JMS Wrappers
I'm using WL9.1 and would like to enable WebLogic JMS wrappers for my EJB. I followed the steps in e-docs, which included adding of the followings:
1) In ejb-jar.xml, I added:
<resource-ref>
<res-ref-name>MyFactory</res-ref-name>
<res-type>javax.jmx.TopicConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>MyTopic</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Topic</resource-env-ref-type>
</resource-env-ref>
2) In weblogic-ejb-jar.xml
<resource-description>
<res-ref-name>MyFactory</res-ref-name>
<jndi-name>MyFactory</jndi-name>
</resource-description>
<resource-env-description>
<resource-env-ref-name>MyTopic</resource-env-ref-name>
<jndi-name>MyTopic</jndi-name>
</resource-env-description>
3) I created the global MyFactory and MyTopic JNDI by adding new connection factory and topic using the console. When I did a look up for my connection factory using the name "java:comp/env/MyFactory", I received NamingException that it couldn't find the specified name. The same went with my topic. What did I do wrong?
4) I was able to look up my factory using the name "MyFactory", but I wanted to use the wrapped connection factory. What should I do?
Thanks.
First of all, wrappers are not applicable for local WL JMS server. Actually, wrappers are applicable. They implicitly provide JMS resource pooling. When wrapped JMS resources are closed, they are put into an internal pool rather than destroyed - very similar to the way JDBC connection pools work. That said, it can be simpler and more performant just to cache references to destinations, connections, sessions, producers, and consumers directly in the EJB.
>>> Second, you need to set destination-jndi-name and connection-factory-jndi-name in weblogic-ejb-jar.xml to access a remote or foreign JMS server using wrappers.
Wrappers have nothing to do with these fields. These fields are used to configure the consumers that drive the MDB.
For more information, see the EJB MDB documentation, and also see the the following FAQ:
http://e-docs.bea.com/wls/docs81/faq/interop.html
Tom, BEA
Similar Messages
-
JMS Wrappers can't cache JNDI lookups when using secured queues
Hi All!
We are working on a jms client, inside a webapp(servlets), using Weblogic 9.2 and Weblogic 10.3.
As we want to use secured queues and keep being efficient we tryed to use Weblogic JMS Wrappers, that should work according to the docs:
Enhanced Support for Using WebLogic JMS with EJBs and Servlets
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jms/j2ee.html
But we are facing a problem:
When we define a JMS Wrapper and try to cache JNDI lookups for the QueueConnectionFactory and Queue, as the docs recommend for efficiency, the connection to the queue is ignoring the user/pwd.
The JMS Wrapper is using <res-auth>Application</res-auth>.
We are creating the connection using createQueueConnection(user, pwd) from QueueConnectionFactory and after several tests it seems that the user and password are ingored unless a jndi lookup is made in the same thread, as if when there are not any thread credentials present user and password are ignored for the connection...
so the question is:
That behaviour goes against Weblogic JMS Wrapper documentation, doesn't it?
Is there then any other way to access efficiently secured queues using a servlet as a client? (iit's not an option for us to use mdbs, or ejbs).
If it helps, this seems related to this still opened spring-weblogic issue: SPR-2941 --> http://jira.springframework.org/browse/SPR-2941 and SPR-4720 --> http://jira.springframework.org/browse/SPR-4720
Thanxs
And here goes our DDs and code to reproduce:
First in pretty format:
web.xml --> http://pastebin.com/f5f85e8d4
weblogic.xml --> http://pastebin.com/f2fbe10cc
Client code --> http://pastebin.com/f586d32d9
And now emmebded in the msg:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<description>WebLogic Descriptor</description>
<resource-description>
<res-ref-name>jms/QCF</res-ref-name>
<jndi-name>weblogic.jms.ConnectionFactory</jndi-name>
</resource-description>
</weblogic-web-app>weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name> QCFWrapperCredentialsTest </display-name>
<description> QCFWrapperCredentialsTest </description>
<servlet id="Servlet_1">
<servlet-name>QCFWrapperCredentialsTest</servlet-name>
<servlet-class>QCFWrapperCredentialsTest</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping id="ServletMapping_1">
<servlet-name>QCFWrapperCredentialsTest</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jms/QCF</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Application</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>And our test client:
import java.io.*;
import java.util.Properties;
import javax.jms.*;
import javax.naming.*;
import javax.servlet.http.*;
public class QCFWrapperCredentialsTest extends HttpServlet {
QueueConnectionFactory factory = null;
Queue queue = null;
String jndiName = "java:comp/env/jms/QCF";
String queueName= "jms/ColaEntradaConsultas";
String user = "usuarioColas";
String pwd = "12345678";
String userjndi = "usuarioColas";
String pwdjndi = "12345678";
String serverT3URL="t3://127.0.0.1:7007";
public void init() {
setupJNDIResources();
private void setupJNDIResources(){
try {
Properties props = new Properties();
props.put("java.naming.factory.initial",
"weblogic.jndi.WLInitialContextFactory");
props.put("java.naming.provider.url",serverT3URL );
props.put("java.naming.security.principal", userjndi);// usr
props.put("java.naming.security.credentials", pwdjndi);// pwd
InitialContext ic = new InitialContext(props);
factory = (QueueConnectionFactory) ic.lookup(jndiName);
queue = (Queue) ic.lookup(queueName);
} catch (NamingException e) {
e.printStackTrace();
public void service(HttpServletRequest req, HttpServletResponse res) {
res.setContentType("text/html");
Writer wr = null;
try {
wr = res.getWriter();
//Comment this out, do a lookup for each request and it will work
//setupJNDIResources();
String user = this.user;
String pwd = this.pwd;
//read users and passwords from the request in case they are present
if (req.getParameter("user") != null) {
user = req.getParameter("user");
if (req.getParameter("pwd") != null) {
pwd = req.getParameter("pwd");
wr.write("JNDI User: *" + userjndi + "* y pwd: *" + pwdjndi + "*<p>");
wr.write("Queue User: *" + user + "* y pwd: *" + pwd + "*<p>");
//Obtain a connection using user/pwd
QueueConnection conn = factory.createQueueConnection(user, pwd);
QueueSession ses = conn.createQueueSession(true,
Session.SESSION_TRANSACTED);
QueueSender sender = ses.createSender(queue);
TextMessage msg = ses.createTextMessage();
msg.setText("Hi there!");
conn.start();
sender.send(msg);
ses.commit();
sender.close();
ses.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
try {
wr.write(e.toString());
} catch (Exception e2) {
e2.printStackTrace();
finally{
try {
wr.close();
} catch (IOException e) {
e.printStackTrace();
}Edited by: user2525402 on Feb 9, 2010 7:14 PMThanks Tom,
Quite a useful response .-)
Leaving aside the fact that weblogic behaviour with jms wrappers and secured queues seems to not be working as the docs says...
Talking about workarounds:
Both workarounds you suggest works, but as you already noted, creating a new JNDI context just to inject credentials into the threads is overkill when high performance is needed.
I also found more information about the same issue here: http://sleeplessinslc.blogspot.com/2009/04/weblogic-jms-standalone-multi-threaded.html
And he suggest the same workaround, injecting credentials
So I tried the second approach, successfully, injecting credentials into the thread using the security API.
This way, using JMS wrappers and injecting credentials into the thread we get the best performance available, caching resource using wrappers and using credentials in a somewhat efficient way.
Now the test snippet looks like this:
import java.io.*;
import java.security.PrivilegedAction;
import java.util.Properties;
import javax.jms.*;
import javax.naming.*;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginException;
import javax.servlet.http.*;
import weblogic.jndi.Environment;
import weblogic.security.auth.Authenticate;
public class JMSWrapperCredentialsTest extends HttpServlet {
QueueConnectionFactory factory = null;
Queue queue = null;
String jndiName = "java:comp/env/jms/QCF";
String queueName= "jms/ColaEntradaConsultas";
String user = "usuarioColas";
String pwd = "12345678";
String userjndi = "usuarioColas";
String pwdjndi = "12345678";
String serverT3URL="t3://127.0.0.1:7007";
public void init() {
setupJNDIResources();
private void setupJNDIResources(){
try {
Properties props = new Properties();
props.put("java.naming.factory.initial",
"weblogic.jndi.WLInitialContextFactory");
props.put("java.naming.provider.url",serverT3URL );
props.put("java.naming.security.principal", userjndi);// usr
props.put("java.naming.security.credentials", pwdjndi);// pwd
InitialContext ic = new InitialContext(props);
factory = (QueueConnectionFactory) ic.lookup(jndiName);
queue = (Queue) ic.lookup(queueName);
} catch (NamingException e) {
e.printStackTrace();
public void service(HttpServletRequest req, HttpServletResponse res) {
final HttpServletRequest fReq=req;
final HttpServletResponse fRes=res;
PrivilegedAction action = new java.security.PrivilegedAction() {
public java.lang.Object run() {
performRequest(fReq,fRes);
return null;
try {
Subject subject=createSingleSubject(serverT3URL,user,pwd);
weblogic.security.Security.runAs(subject, action);
} catch (Exception e) {
e.printStackTrace();
public void performRequest(HttpServletRequest req, HttpServletResponse res) {
res.setContentType("text/html");
Writer wr = null;
try {
wr = res.getWriter();
//Comment this out, do a lookup for each request and it will work
//setupJNDIResources();
String user = this.user;
String pwd = this.pwd;
//read users and passwords from the request in case they are present
if (req.getParameter("user") != null) {
user = req.getParameter("user");
if (req.getParameter("pwd") != null) {
pwd = req.getParameter("pwd");
wr.write("JNDI User: *" + userjndi + "* y pwd: *" + pwdjndi + "*<p>");
wr.write("Queue User: *" + user + "* y pwd: *" + pwd + "*<p>");
//Obtain a connection using user/pwd
QueueConnection conn = factory.createQueueConnection(user, pwd);
QueueSession ses = conn.createQueueSession(true,
Session.SESSION_TRANSACTED);
QueueSender sender = ses.createSender(queue);
TextMessage msg = ses.createTextMessage();
msg.setText("Hi there!");
conn.start();
sender.send(msg);
ses.commit();
sender.close();
ses.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
try {
wr.write(e.toString());
} catch (Exception e2) {
e2.printStackTrace();
finally{
try {
wr.close();
} catch (IOException e) {
e.printStackTrace();
private Subject createSingleSubject(String providerUrl, String userName, String password) {
Subject subject = new Subject();
// Weblogic env class
Environment env = new Environment();
if(providerUrl!=null)
env.setProviderUrl(providerUrl);
env.setSecurityPrincipal(userName);
env.setSecurityCredentials(password);
try {
// Weblogic Authenticate class will populate and Seal the subject
Authenticate.authenticate(env, subject);
return subject;
catch (LoginException e) {
throw new RuntimeException("Unable to Authenticate User", e);
catch (Exception e) {
throw new RuntimeException("Error authenticating user", e);
}Thanks a lot for the help -
Using WebLogic JMS Wrappers with Spring
Hi,
I was just wondering if anyone used WebLogic JMS wrappers with Spring?
I am using WebLogic configured to have Sonic as my Foreign JNDI Provider. Weblogic provide me with specific entries on the admin console to set information such as the JNDI name of the Sonic Connection Factory. If I specify this JNDI name in the Spring config, and call getConnection() then I will get back a new connection each time.
I don't want this, I want to cache the connection (as connections are expensive in Sonic). This is where the WebLogic JMS wrappers come in, they can handle the pooling for me but the only way I can see to use them is via a resource-ref. It is possible for Spring to get a handle onto these wrappers or should I use Spring's own pooling mechanism instead?
P.S. I've also asked this question on the Spring forum
Thanks for any help
MandyMaybe you have already tried the following:
<beans xmlns:jee="http://www.springframework.org/schema/jee" ... >
<jee:jndi-lookup id="connectionFactory" jndi-name="jms.ConnectionFactory">
<jee:environment>
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://localhost:7001
</jee:environment>
</jee:jndi-lookup>
</beans>
an alternative is to use the JNDI template
<beans ... >
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
</props>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName"><value>jms.ConnectionFactory</value></property>
</bean>
</beans> -
For a specific use case, we are looking at the option of using a java callout ( A POJO) in a ALSB proxy service and to write some synchronous JMS code in it. We are not sure of ALSB internals and not sure whether the java callout code will be executed from a servlet or ejb context; and even if it is we dont have a choice to specify resource reference descriptors.
In this context is, it possible to leverage the features of JMS wrappers ( especially pooled connections and sessions) using some API's in the POJO code. Or is it that we have to maintain our own pooling for these objects in the POJO ?
All documentation I have looked so far seems to indicate that this feature is available only for servlet and ejb contexts at the server side and the way to enable is to use reource reference.
Thanks,
AtheekRegardless of whether the code is running in an EJB, servlet, or even an arbitrary thread, I think you can simply lookup an arbitrary stateless session bean in JNDI and call it. The SSB can be your POJO, and can use a resource reference.
Some JNDI best practices: Remember to cache and re-use your JNDI context if possible, to cache your lookup result (JNDI lookups are relatively expensive), call context.close() when done with JNDI (to prevent a memory leak), and remember that you should not specify a URL (when no URL is specified, you get the local server or cluster name space -- which is what you want).
Tom -
Hi everybody,
Is anybody successfully using remote IBM MQseries 5.3 server as
Foreign JMS in WLS 8.1sp2?
We're observing some strange behavior in this case. Here is our setup:
WLS and IBM MQ server deployed on separate boxes.
WLS version 8.1sp2 running on Windows 2000/Intel
IBM MQ version 5.3 running on Solaris/SPARC
We're using "WebSphere MQ classes for Java, version 5.303 - j5303-L030225"
and "WebSphere MQ Extended Transactional Client Feature, version 5.300 -
j5303-L030122"
MQ files added in WLS POST_CLASSPATH variable in WLS starup script.
Foreign JMS server configured in WLS via fscontext JNDI.
MDB bean deployed with Transaction attribute "Required".
Everything seems to work fine, if we're posting message to MQ queue MDB
receives it and process successfully (just print message content to the
console for now).
Problem: In WLS console, under Server->Monitoring->JTA->Monitor inflight
transactions we can constantly see one transaction enlisted for our MDB
bean with following details:
=====================================================
Transaction ID: BEA1-00DFC5EB4B7B7F28EDB9
Coordinator: mydomain+myserver
Name: JMSMessagePoller.xxx.xxx.MyMessageProcessorMdb
Status: Active
Seconds Active: 17
Resources:
weblogic.ejb20.JMSConnectionPoller.xxx.xxx.MyMessageProcessorMdb=started
Properties
(key=value):
weblogic.transaction.name=JMSMessagePoller.xxx.xxx.MyMessageProcessorMdb
=====================================================
This transaction seems to be Active for 30 seconds and then rolled back
(no error messages on WLS console displayed).On JTA statistics page in
WLS console "Total Rolled Back" counter keeps increneting with every
rollback.
Does anybody observerd similar problem? May be it's normal behaviour but
I'm kind of worrying about those transactions and constant rollback. I'd
appreciate any feedback.
Sincerely,
Dmitri Maximovich
Hi Dmitri,
The shutdown "suspend" failure has nothing to do with transactions
or JMS. It looks like the failure is due to a
java.util.ConcurrentModificationException during undeployment
which indicates a bug in WL - something is not getting
synchronized that should be.
As for MQ, their new extended client supports remote XA, which I think
is the reason for the product in the first place. Even so, I
still recommend testing to make sure that its messages
participate in transactions. (Actually, I recommend such testing
for any transactional app, including those built on WL JMS.)
Tom
Dmitri Maximovich wrote:
> Hi Tom,
>
> Thanks for info, that's a relief. Unfortunately there is no hints in WLS
> documentation that it's normal, that's why we were worried about it.
>
> Now there is one more issue, which I believe is related. You see with
> those 'in-flight' transactions graceful shutdown of WLS doesn't quite
> work. There is suspicious exception thrown and after that WLS is still
> running in some state but console is not available anymore. Please see
> console messages attached (sorry for long post). at the time of shutdown
> there is no messages in the queue(s) so as far as I can tell those
> 'pending transactions' mentioned is those from foreign JMS wrappers.
>
> I'd appreciate any comments on that. We have case opened with BEA about
> this but so far they cannot reproduce it in their lab. That's why I
> start wondering if we're doing something wrong here, like using remote
> MQ server for example, may be you not supposed to (I remember there was
> an issue before with IBM MQ that XA support required binding mode, I was
> kind of hope that it's not the case anymore)?
>
> <Mar 3, 2004 1:47:56 PM EST> <Notice> <WebLogicServer> <BEA-000365>
> <Server state changed to SUSPENDING>
> <Mar 3, 2004 1:47:56 PM EST> <Info> <Deployer> <BEA-149236> <Preparing
> to suspend.>
> <Mar 3, 2004 1:47:56 PM EST> <Info> <Deployer> <BEA-149237> <Ready to
> suspend.>
> <Mar 3, 2004 1:47:56 PM EST> <Info> <WebService> <BEA-220028> <Web
> Service reliable agents are suspended.>
> <Mar 3, 2004 1:47:56 PM EST> <Notice> <JTA> <BEA-110476> <The server has
> detected pending transactions during graceful shutdown. The server will
> wait for the pending transactions to complete before suspending the RMI
> service. A force shutdown command can be issued to shutdown the server
> immediately.>
> <Mar 3, 2004 1:48:26 PM EST> <Info> <Management> <BEA-141080> <A request
> has been received to force shut down of the server.>
> <Mar 3, 2004 1:48:26 PM EST> <Alert> <WebLogicServer> <BEA-000228> <The
> disabling of server logins has been requested by <WLS Kernel>>
> <Mar 3, 2004 1:48:26 PM EST> <Alert> <WebLogicServer> <BEA-000229>
> <Server logins have been disabled.>
> <Mar 3, 2004 1:48:26 PM EST> <Info> <WebService> <BEA-220028> <Web
> Service reliable agents are suspended.>
> <Mar 3, 2004 1:48:26 PM EST> <Info> <EJB> <BEA-010084> <The
> message-driven beans are being suspended. This may take a minute or two.>
> <Mar 3, 2004 1:48:32 PM EST> <Info> <EJB> <BEA-010085> <The
> message-driven beans have all been suspended.>
> <Mar 3, 2004 1:48:32 PM EST> <Info> <EJB> <BEA-010084> <The
> message-driven beans are being suspended. This may take a minute or two.>
> <Mar 3, 2004 1:48:32 PM EST> <Info> <EJB> <BEA-010085> <The
> message-driven beans have all been suspended.>
> [MessageDrivenBeanPoolInfoImpl] : Couldn't unregister MBean
> javax.management.InstanceNotFoundException:
> mydomain:ApplicationRuntime=myserver_otis-dasl-ejb,EJBComponentRuntime=myserver_otis-dasl-ejb_otis-dasl-ejb.jar,Location=myserver,Name=myserver_otis-dasl-ejb_otis-dasl-ejb.jar_com.cibcwm.go.otis.dasl.submission.DASLSubmissionMdb_wls.mqs.dasl.dev.adp.reply3,ServerRuntime=myserver,Type=EJBTransactionRuntime
>
> at
> com.sun.management.jmx.MBeanServerImpl.getMBean(MBeanServerImpl.java:1680)
> at
> com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1524)
> at
> weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:947)
>
> at
> weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:908)
>
> at weblogic.management.internal.MBeanProxy.invoke(MBeanProxy.java:946)
> at
> weblogic.management.internal.MBeanProxy.invokeForCachingStub(MBeanProxy.java:481)
>
> at
> weblogic.management.runtime.EJBTransactionRuntimeMBean_Stub.preDeregister(EJBTransactionRuntimeMBean_Stub.java:433)
>
> at
> weblogic.management.internal.MBeanHomeImpl.internalDeleteMBean(MBeanHomeImpl.java:996)
>
> at
> weblogic.management.internal.MBeanHomeImpl.privateDeleteMBean(MBeanHomeImpl.java:982)
>
> at
> weblogic.management.internal.MBeanHomeImpl.access$000(MBeanHomeImpl.java:74)
>
> at
> weblogic.management.internal.MBeanHomeImpl$2.run(MBeanHomeImpl.java:948)
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at
> weblogic.management.internal.MBeanHomeImpl.deleteMBeanWithKernelID(MBeanHomeImpl.java:944)
>
> at
> weblogic.management.internal.MBeanHomeImpl.deleteMBean(MBeanHomeImpl.java:939)
>
> at
> weblogic.management.internal.MBeanHomeImpl.deleteMBean(MBeanHomeImpl.java:933)
>
> at
> weblogic.management.runtime.RuntimeMBeanDelegate.unregister(RuntimeMBeanDelegate.java:140)
>
> at
> weblogic.ejb20.monitoring.EJBRuntimeMBeanImpl.unregisterDependents(EJBRuntimeMBeanImpl.java:58)
>
> at
> weblogic.ejb20.monitoring.MessageDrivenEJBRuntimeMBeanImpl.unregisterDependents(MessageDrivenEJBRuntimeMBeanImpl.java:50)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.unInitPool(MessageDrivenBeanPoolInfoImpl.java:208)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.onUndeploy(MessageDrivenBeanPoolInfoImpl.java:121)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.onUndeploy(MessageDrivenBeanInfoImpl.java:628)
>
> at weblogic.ejb20.internal.BaseEJBHome.undeploy(BaseEJBHome.java:203)
> at
> weblogic.ejb20.internal.MessageDrivenEJBHome.undeploy(MessageDrivenEJBHome.java:260)
>
> at
> weblogic.ejb20.deployer.EJBDeployer.deactivate(EJBDeployer.java:1802)
> at weblogic.ejb20.deployer.EJBModule.doDeactivate(EJBModule.java:865)
> at weblogic.ejb20.deployer.EJBModule.deactivate(EJBModule.java:712)
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivateModule(J2EEApplicationContainer.java:3161)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2186)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2131)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.stop(J2EEApplicationContainer.java:1915)
>
> at
> weblogic.j2ee.J2EEApplicationContainerFactory.removeDeployedApplications(J2EEApplicationContainerFactory.java:761)
>
> at
> weblogic.j2ee.J2EEApplicationService.shutdown(J2EEApplicationService.java:115)
>
> at
> weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.shutdownHelper(DeploymentManagerServerLifeCycleImpl.java:257)
>
> at
> weblogic.application.ApplicationService.prepareToSuspend(ApplicationService.java:46)
>
> at
> weblogic.t3.srvr.SubsystemManager.prepareToSuspend(SubsystemManager.java:168)
>
> at weblogic.t3.srvr.T3Srvr.prepareToSuspend(T3Srvr.java:1085)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.prepareToSuspend(ServerLifeCycleWorkerThread.java:51)
>
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread$1.run(ServerLifeCycleWorkerThread.java:35)
>
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.run(ServerLifeCycleWorkerThread.java:32)
>
> --------------- nested within: ------------------
> weblogic.management.ManagementException: An error has occurred during
> preDeregister().
> nullmydomain:ApplicationRuntime=myserver_otis-dasl-ejb,EJBComponentRuntime=myserver_otis-dasl-ejb_otis-dasl-ejb.jar,Location=myserver,Name=myserver_otis-dasl-ejb_otis-dasl-ejb.jar_com.cibcwm.go.otis.dasl.submission.DASLSubmissionMdb_wls.mqs.dasl.dev.adp.reply3,ServerRuntime=myserver,Type=EJBTransactionRuntime
> - with nested exception:
> [javax.management.InstanceNotFoundException:
> mydomain:ApplicationRuntime=myserver_otis-dasl-ejb,EJBComponentRuntime=myserver_otis-dasl-ejb_otis-dasl-ejb.jar,Location=myserver,Name=myserver_otis-dasl-ejb_otis-dasl-ejb.jar_com.cibcwm.go.otis.dasl.submission.DASLSubmissionMdb_wls.mqs.dasl.dev.adp.reply3,ServerRuntime=myserver,Type=EJBTransactionRuntime]
>
> at
> weblogic.management.runtime.RuntimeMBeanDelegate.unregister(RuntimeMBeanDelegate.java:148)
>
> at
> weblogic.ejb20.monitoring.EJBRuntimeMBeanImpl.unregisterDependents(EJBRuntimeMBeanImpl.java:58)
>
> at
> weblogic.ejb20.monitoring.MessageDrivenEJBRuntimeMBeanImpl.unregisterDependents(MessageDrivenEJBRuntimeMBeanImpl.java:50)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.unInitPool(MessageDrivenBeanPoolInfoImpl.java:208)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.onUndeploy(MessageDrivenBeanPoolInfoImpl.java:121)
>
> at
> weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.onUndeploy(MessageDrivenBeanInfoImpl.java:628)
>
> at weblogic.ejb20.internal.BaseEJBHome.undeploy(BaseEJBHome.java:203)
> at
> weblogic.ejb20.internal.MessageDrivenEJBHome.undeploy(MessageDrivenEJBHome.java:260)
>
> at
> weblogic.ejb20.deployer.EJBDeployer.deactivate(EJBDeployer.java:1802)
> at weblogic.ejb20.deployer.EJBModule.doDeactivate(EJBModule.java:865)
> at weblogic.ejb20.deployer.EJBModule.deactivate(EJBModule.java:712)
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivateModule(J2EEApplicationContainer.java:3161)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2186)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2131)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.stop(J2EEApplicationContainer.java:1915)
>
> at
> weblogic.j2ee.J2EEApplicationContainerFactory.removeDeployedApplications(J2EEApplicationContainerFactory.java:761)
>
> at
> weblogic.j2ee.J2EEApplicationService.shutdown(J2EEApplicationService.java:115)
>
> at
> weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.shutdownHelper(DeploymentManagerServerLifeCycleImpl.java:257)
>
> at
> weblogic.application.ApplicationService.prepareToSuspend(ApplicationService.java:46)
>
> at
> weblogic.t3.srvr.SubsystemManager.prepareToSuspend(SubsystemManager.java:168)
>
> at weblogic.t3.srvr.T3Srvr.prepareToSuspend(T3Srvr.java:1085)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.prepareToSuspend(ServerLifeCycleWorkerThread.java:51)
>
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread$1.run(ServerLifeCycleWorkerThread.java:35)
>
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.run(ServerLifeCycleWorkerThread.java:32)
>
> <Mar 3, 2004 1:48:33 PM EST> <Info> <Management> <BEA-141082>
> <ServerRuntime:java.util.ConcurrentModificationException>
> <Mar 3, 2004 1:48:33 PM EST> <Info> <Management> <BEA-141082>
> <ServerRuntime:java.util.ConcurrentModificationException
> at
> java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:552)
> at java.util.LinkedList$ListItr.next(LinkedList.java:488)
> at
> weblogic.ejb20.deployer.EJBDeployer.deactivate(EJBDeployer.java:1801)
> at weblogic.ejb20.deployer.EJBModule.doDeactivate(EJBModule.java:865)
> at weblogic.ejb20.deployer.EJBModule.deactivate(EJBModule.java:712)
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivateModule(J2EEApplicationContainer.java:3161)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2186)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.deactivate(J2EEApplicationContainer.java:2131)
>
> at
> weblogic.j2ee.J2EEApplicationContainer.stop(J2EEApplicationContainer.java:1915)
>
> at
> weblogic.j2ee.J2EEApplicationContainerFactory.removeDeployedApplications(J2EEApplicationContainerFactory.java:761)
>
> at
> weblogic.j2ee.J2EEApplicationService.shutdown(J2EEApplicationService.java:115)
>
> at
> weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.shutdownHelper(DeploymentManagerServerLifeCycleImpl.java:257)
>
> at
> weblogic.application.ApplicationService.prepareToSuspend(ApplicationService.java:46)
>
> at
> weblogic.t3.srvr.SubsystemManager.prepareToSuspend(SubsystemManager.java:168)
>
> at weblogic.t3.srvr.T3Srvr.prepareToSuspend(T3Srvr.java:1085)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.prepareToSuspend(ServerLifeCycleWorkerThread.java:51)
>
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread$1.run(ServerLifeCycleWorkerThread.java:35)
>
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at
> weblogic.t3.srvr.ServerLifeCycleWorkerThread.run(ServerLifeCycleWorkerThread.java:32)
>
> >
> <Mar 3, 2004 1:48:35 PM EST> <Critical> <WebLogicServer> <BEA-000217>
> <Failed to fully suspend the server due to:
> java.util.ConcurrentModificationException
> java.util.ConcurrentModificationException
> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:782)
> at java.util.HashMap$KeyIterator.next(HashMap.java:818)
> at
> weblogic.j2ee.J2EEApplicationContainerFactory.removeDeployedApplications(J2EEApplicationContainerFactory.java:751)
>
> at
> weblogic.j2ee.J2EEApplicationService.shutdown(J2EEApplicationService.java:115)
>
> at
> weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.shutdownHelper(DeploymentManagerServerLifeCycleImpl.java:257)
>
> at
> weblogic.application.ApplicationService.forceSuspend(ApplicationService.java:82)
>
> at
> weblogic.t3.srvr.SubsystemManager.forceSuspend(SubsystemManager.java:184)
> at weblogic.t3.srvr.T3Srvr.forceSuspend(T3Srvr.java:1097)
> at
> weblogic.t3.srvr.ServerRuntime.uprotectedForceShutdown(ServerRuntime.java:629)
>
> at weblogic.t3.srvr.ServerRuntime.access$300(ServerRuntime.java:83)
> at weblogic.t3.srvr.ServerRuntime$4.run(ServerRuntime.java:563)
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at weblogic.t3.srvr.ServerRuntime.forceShutdown(ServerRuntime.java:559)
> at weblogic.t3.srvr.ServerRuntime.shutdown(ServerRuntime.java:547)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:324)
> at
> weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:711)
>
> at
> weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:690)
>
> at
> com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
> at
> com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
> at
> weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:947)
>
> at
> weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:908)
>
> at weblogic.management.internal.MBeanProxy.invoke(MBeanProxy.java:946)
> at
> weblogic.management.internal.MBeanProxy.invokeForCachingStub(MBeanProxy.java:481)
>
> at
> weblogic.management.runtime.ServerRuntimeMBean_Stub.shutdown(ServerRuntimeMBean_Stub.java:1184)
>
> at
> weblogic.server.ServerLifeCycleRuntime$ShutdownRequest.execute(ServerLifeCycleRuntime.java:585)
>
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> >
> <Mar 3, 2004 1:48:35 PM EST> <Debug> <Management> <BEA-141132> <Dynamic
> invocation while executing action shutdown on
> mydomain:Location=myserver,Name=myserver,Type=ServerRuntime MBean
> instance failed. The method shutdown with signature [int, boolean] was
> invoked with parameters as [30, true].
> java.util.ConcurrentModificationException
> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:782)
> at java.util.HashMap$KeyIterator.next(HashMap.java:818)
> at
> weblogic.j2ee.J2EEApplicationContainerFactory.removeDeployedApplications(J2EEApplicationContainerFactory.java:751)
>
> at
> weblogic.j2ee.J2EEApplicationService.shutdown(J2EEApplicationService.java:115)
>
> at
> weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.shutdownHelper(DeploymentManagerServerLifeCycleImpl.java:257)
>
> at
> weblogic.application.ApplicationService.forceSuspend(ApplicationService.java:82)
>
> at
> weblogic.t3.srvr.SubsystemManager.forceSuspend(SubsystemManager.java:184)
> at weblogic.t3.srvr.T3Srvr.forceSuspend(T3Srvr.java:1097)
> at
> weblogic.t3.srvr.ServerRuntime.uprotectedForceShutdown(ServerRuntime.java:629)
>
> at weblogic.t3.srvr.ServerRuntime.access$300(ServerRuntime.java:83)
> at weblogic.t3.srvr.ServerRuntime$4.run(ServerRuntime.java:563)
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> at weblogic.t3.srvr.ServerRuntime.forceShutdown(ServerRuntime.java:559)
> at weblogic.t3.srvr.ServerRuntime.shutdown(ServerRuntime.java:547)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:324)
> at
> weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:711)
>
> at
> weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:690)
>
> at
> com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
> at
> com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
> at
> weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:947)
>
> at
> weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:908)
>
> at weblogic.management.internal.MBeanProxy.invoke(MBeanProxy.java:946)
> at
> weblogic.management.internal.MBeanProxy.invokeForCachingStub(MBeanProxy.java:481)
>
> at
> weblogic.management.runtime.ServerRuntimeMBean_Stub.shutdown(ServerRuntimeMBean_Stub.java:1184)
>
> at
> weblogic.server.ServerLifeCycleRuntime$ShutdownRequest.execute(ServerLifeCycleRuntime.java:585)
>
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> >
>
> Tom Barnes wrote:
>
>> Hi Dmitri,
>>
>> This is normal behavior.
>> The internal rollbacks are a side effect of WL MDBs
>> necessarily starting a transaction before they (internally)
>> post a synchronous
>> receive on the remote foreign JMS server. If the synchronous receive
>> receives nothing, the tx is rolled back, and another
>> synch receive is posted with a new tx. (When interacting with
>> foreign vendors, tx MDBs usually must post synchronous receives
>> in order to infect the received message - there is no
>> standard JMS API for infecting asynchronously received messages
>> with a user transaction.)
>>
>> Tom
>>
>> Dmitri Maximovich wrote:
>>
>>> Hi everybody,
>>>
>>> Is anybody successfully using remote IBM MQseries 5.3 server as
>>> Foreign JMS in WLS 8.1sp2?
>>> We're observing some strange behavior in this case. Here is our setup:
>>>
>>> WLS and IBM MQ server deployed on separate boxes.
>>> WLS version 8.1sp2 running on Windows 2000/Intel
>>> IBM MQ version 5.3 running on Solaris/SPARC
>>>
>>> We're using "WebSphere MQ classes for Java, version 5.303 -
>>> j5303-L030225"
>>> and "WebSphere MQ Extended Transactional Client Feature, version
>>> 5.300 - j5303-L030122"
>>>
>>> MQ files added in WLS POST_CLASSPATH variable in WLS starup script.
>>>
>>> Foreign JMS server configured in WLS via fscontext JNDI.
>>>
>>> MDB bean deployed with Transaction attribute "Required".
>>>
>>> Everything seems to work fine, if we're posting message to MQ queue
>>> MDB receives it and process successfully (just print message content
>>> to the console for now).
>>>
>>> Problem: In WLS console, under Server->Monitoring->JTA->Monitor
>>> inflight transactions we can constantly see one transaction enlisted
>>> for our MDB bean with following details:
>>>
>>> =====================================================
>>> Transaction ID: BEA1-00DFC5EB4B7B7F28EDB9
>>> Coordinator: mydomain+myserver
>>> Name: JMSMessagePoller.xxx.xxx.MyMessageProcessorMdb
>>> Status: Active
>>> Seconds Active: 17
>>> Resources:
>>> weblogic.ejb20.JMSConnectionPoller.xxx.xxx.MyMessageProcessorMdb=started
>>> Properties
>>> (key=value):
>>> weblogic.transaction.name=JMSMessagePoller.xxx.xxx.MyMessageProcessorMdb
>>> =====================================================
>>>
>>> This transaction seems to be Active for 30 seconds and then rolled
>>> back (no error messages on WLS console displayed).On JTA statistics
>>> page in WLS console "Total Rolled Back" counter keeps increneting
>>> with every rollback.
>>>
>>> Does anybody observerd similar problem? May be it's normal behaviour
>>> but I'm kind of worrying about those transactions and constant
>>> rollback. I'd appreciate any feedback.
>>>
>>> ---
>>> Sincerely,
>>> Dmitri Maximovich
>>
>>
>>
-
How to configure MQ with WLS (JMS MQ vs Native MQ)
Hi All,
SOA Suite = 11.1.3.3
MQ Series = 6.0
Jdeveloper = 11.1.3.3
I want to read/write data to an MQ which is setup on a physical box different from Weblogic Server box. But both systems fall under the same network. I did some research on the forums to know the steps to configure MQ but ultimately got confused with the following questions in mind.
1. What is the difference between JMS MQ and Native MQ? How to determine which one to use?
2. If native MQ can be used here, what are the steps to configure Native MQ on WLS in my situation?
3. Do I need any foreign servers or message bridges to be configured?
Please provide any directions or pointers.
Regards,
Neeraj Sehga1. What is the difference between JMS MQ and Native MQ? How to determine which one to use?Native MQ refers to a proprietary api provided by IBM in multiple languages including java so that applications running on these can communicate mq. IBM also provides JMS wrappers around this native api, so that a jms client can talk to mq using JMS API. This is called MQ JMS.
2. If native MQ can be used here, what are the steps to configure Native MQ on WLS in my situation?SOA suite provides a MQ Resource Adaptor which can be used to connect to MQ. The developers of this resource adapter would have used the native api to enable the adaptor to talk to MQ, so that you dont have to worry about it. However you will need to configure the properties of your local MQ ( qmgr , q name etc). This is done in the outbound connection pool properties of the resource adaptor.
please check this blog for how to do this : http://soa-bpel-esb.blogspot.com/2009/09/configuring-mq-in-11g-soa-suite.html.
Since your MQ installation is in a remote machine you will have to configure the following properties specific to your environment - hostname, port, server connection channel, along with the queue manager name and queue name
3. Do I need any foreign servers or message bridges to be configured?Not required for your case if you are using MQ Adaptor. Since MQ also provides a JMS transport , you would have required foreign servers if you have to use JMS Adaptor instead of MQ Adaptor. Native MQ is expected to be faster than MQ JMS as it doesn't have the extra JMS layer. -
EJB3 - where to perform JMS JNDI lookups?
Hi, I was reading about how the WebLogic jms wrappers work at:
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jms/j2ee.html
and noticed this section:
"The JNDI lookups of the Connection Factory and Destination objects can be expensive in terms of performance. This is particularly true if the Destination object points to a Foreign JMS Destination MBean, and therefore, is a lookup on a non-local JNDI provider.". I am using Sonic MQ as my foreign JMS Provider hence this is of particular interest to me.
The document recommends caching these lookups in the ejbCreate() method of an EJB. I'm new to EJB3 but notice there is no concept of an ejbCreate() method there so where should I cache the lookups and how do I ensure they get re-looked up in the case of a connection failure?
Many thanks
MandyThanks very much Tom, this helps a lot. I think my confusion lay in the fact that this document talks about caching the JNDI lookups in the ejbCreate and gives the example PoolTestBean.java which uses EJB2 style code. I've made your recommended changes to my code, would you mind just casting your eye over to see if looks ok? I have chosen to cache on create of the bean rather than on first invocation as I want clients to fail on startup rather than during their processing.
Sorry about code layout, not sure how to use HTML in posts to make it verbatim..
@Stateless
@TransactionAttribute(NEVER)
//@ExcludeDefaultInterceptors
public class ServiceWrapperBean implements ServiceWrapper {
// injected resources
@Resource
private SessionContext sctx; // inject the bean context
@Resource(name = "sonicConnectionFactory", mappedName = "sonic.connFactory", shareable = true)
private ConnectionFactory connectionFactory;
@Resource(name = "LegacyAccessIn", mappedName = "queue/LegacyIn", shareable = true)
private Destination sendQueue;
public void sendMessage(String msg) {
if (connectionFactory == null)
connectionFactory = (javax.jms.ConnectionFactory) sctx
.lookup("sonicConnectionFactory");
if (sendQueue == null)
sendQueue = (javax.jms.Destination) sctx.lookup("LegacyAccessIn");
if (msg == null)
throw new IllegalArgumentException("object cannot be null!");
Connection con = null;
Session session = null;
MessageProducer sender = null;
try {
con = connectionFactory.createConnection();
session = con.createSession(true, Session.AUTO_ACKNOWLEDGE);
sender = session.createProducer(null);
Message message = session.createTextMessage("do stuff");
sender.send(sendQueue, message);
} catch (JMSException e) {
// Invalidate the JNDI objects if there is a failure
// this is necessary because the destination object
// may become invalid if the destination server has
// been shut down
connectionFactory = null;
sendQueue = null;
throw new RuntimeException(e);
} finally {
if (con != null) {
try {
// Return JMS resources to the resource reference pool for later re-use.
// Closing a connection automatically also closes its sessions, etc.
con.close(); // also closes other objects
} catch (JMSException je) {
// ignore
} -
JMS multi thread best practise
Hi,
I would like to code a JMS layer that could be accessed by
a multi thread environment (a web app)
Is there any "Connection-Pool/DAO" equivalent design
pattern for JMS ?
Form what I know, connection are Thread Safe and Sessions
are not ...
PhilippeMany J2EE providers have their own JMS facades which provide pooling - so you could just use your container's JMS wrappers.
Another option, if you are inside a Servlet Engine, is to use Jencks which provides JMS & JDBC connection pooling as well as pooling of threads & message listeners & exception handling when consuming JMS messages.
e.g. here's inbound message consumption...
http://jencks.org/Message+Driven+POJOs
and here's outbound JMS (i.e. pooling when sending JMS messages etc)
http://jencks.org/Outbound+JMS
Jencks is basically a Spring based JCA container so it takes care of all the pooling for you as well as handling message inflow & outflow and can work with XA if you need it as well as local transactions.
James
http://logicblaze.com/ -
How to configure MQ-FTE and IBM Datapower along with PI7.1
Hi Friends,
Can somebody guide me with the steps to configure MQ-FTE and IBM Datapower with PI7.1 for B2B communication?
Thanks,
--Sonal1. What is the difference between JMS MQ and Native MQ? How to determine which one to use?Native MQ refers to a proprietary api provided by IBM in multiple languages including java so that applications running on these can communicate mq. IBM also provides JMS wrappers around this native api, so that a jms client can talk to mq using JMS API. This is called MQ JMS.
2. If native MQ can be used here, what are the steps to configure Native MQ on WLS in my situation?SOA suite provides a MQ Resource Adaptor which can be used to connect to MQ. The developers of this resource adapter would have used the native api to enable the adaptor to talk to MQ, so that you dont have to worry about it. However you will need to configure the properties of your local MQ ( qmgr , q name etc). This is done in the outbound connection pool properties of the resource adaptor.
please check this blog for how to do this : http://soa-bpel-esb.blogspot.com/2009/09/configuring-mq-in-11g-soa-suite.html.
Since your MQ installation is in a remote machine you will have to configure the following properties specific to your environment - hostname, port, server connection channel, along with the queue manager name and queue name
3. Do I need any foreign servers or message bridges to be configured?Not required for your case if you are using MQ Adaptor. Since MQ also provides a JMS transport , you would have required foreign servers if you have to use JMS Adaptor instead of MQ Adaptor. Native MQ is expected to be faster than MQ JMS as it doesn't have the extra JMS layer. -
Session Beans and TIBCO E4JMS and Weblogic JMS 8.1
Setup:-
Weblogic Server 8.1 SP2 on Linux
TIBCO E4JMS 3.1.2
I have a two Staeless Session Beans which are deployed in both sides of the cluster
- Cluster is made up of two servers(ManagedServer1 and ManagedServer2) on the
same machine. The beans have container managed transaction and trans-type set
to required. The JMS Server is on ManagedServer1. The session bean publishes 100
messages to TIBCO JMS and Weblogic JMS and calls the second bean which again publishes
100 messages to TIBCO JMS and Weblogic JMS .
The connection factories used are XAQueueConnectionFactories.
This seems to work under the following conditions:-
a) The session beans are deployed just in ManagedServer1
b) The WL load balancing scheme manages to run both the beans on ManagedServer1
c) If I don't publish onto Weblogic JMS( It runs successfully on ManagedServer1
and ManagedServer2)
It does not seems to work :-
When the The WL load balancing scheme manages to run both the beans on ManagedServer2.I
put debug statements on the beans and it seems to publish everything but fails
during the commit
murali@dbuslinux1:~/SessionBeanExample> ant run
Buildfile: build.xml
run:
[java] Run : 0
[java] InitialContextFactory weblogic.jndi.WLInitialContextFactory
[java] Provider Url t3://myhost.mycompany.com:18003,myhost.mycompany.com:18005
[java] javax.transaction.TransactionRolledbackException: Exception while
commiting Tx : Name=[EJB Case463495.StatelessBean.sendMessageWrap(java.lang.Integer,java.lang.Integer,java.lang.String,boolean,boolean)],Xid=BEA1-000649EC8876A0032A5E(160401684),Status=Rolled
back. [Reason=javax.transaction.xa.XAException],numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds
since begin=3,seconds left=30,XAServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN1TCF]=(ServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN1TCF]=(state=rolledback,assigned=ManagedServer2),xar=weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource@a0181b0),XAServerResourceInfo[JMS_MyJMS
File Store]=(ServerResourceInfo[JMS_MyJMS File Store]=(state=rolledback,assigned=ManagedServer1),xar=null),XAServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN2TCF]=(ServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN2TCF]=(state=rolledback,assigned=ManagedServer2),xar=weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource@98f6821),SCInfo[E4JMSDOMAIN+ManagedServer1]=(state=rolledback),SCInfo[E4JMSDOMAIN+ManagedServer2]=(state=rolledback),properties=({weblogic.transaction.name=[EJB
Case463495.StatelessBean.sendMessageWrap(java.lang.Integer,java.lang.Integer,java.lang.String,boolean,boolean)]}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=ManagedServer2+myhost.mycompany.com:18005+E4JMSDOMAIN+t3+,
XAResources={},NonXAResources={})],CoordinatorURL=ManagedServer2+myhost.mycompany.com:18005+E4JMSDOMAIN+t3+):
javax.transaction.xa.XAException
[java] at com.tibco.tibjms.TibjmsXAResource.end(Ljavax.transaction.xa.Xid;I)V(TibjmsXAResource.java:157)
[java] at weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource.end(Ljavax.transaction.xa.Xid;I)V(Unknown
Source)
[java] at weblogic.transaction.internal.XAServerResourceInfo.end(Lweblogic.transaction.internal.ServerTransactionImpl;Ljavax.transaction.xa.Xid;I)V(XAServerResourceInfo.java:1124)
[java] at weblogic.transaction.internal.XAServerResourceInfo.internalDelist(Lweblogic.transaction.internal.ServerTransactionImpl;I)V(XAServerResourceInfo.java:325)
[java] at weblogic.transaction.internal.XAServerResourceInfo.delist(Lweblogic.transaction.internal.ServerTransactionImpl;IZ)V(XAServerResourceInfo.java:255)
[java] at weblogic.transaction.internal.ServerTransactionImpl.delistAll(IZ)V(ServerTransactionImpl.java:1408)
[java] at weblogic.transaction.internal.ServerTransactionImpl.delistAll(I)V(ServerTransactionImpl.java:1396)
[java] at weblogic.transaction.internal.ServerTransactionImpl.globalPrepare()V(ServerTransactionImpl.java:1932)
[java] at weblogic.transaction.internal.ServerTransactionImpl.internalCommit()V(ServerTransactionImpl.java:252)
[java] at weblogic.transaction.internal.ServerTransactionImpl.commit()V(ServerTransactionImpl.java:221)
[java] at weblogic.ejb20.internal.BaseEJBObject.postInvoke(Lweblogic.ejb20.interfaces.InvocationWrapper;Ljava.lang.Throwable;)V(BaseEJBObject.java:289)
[java] at weblogic.ejb20.internal.StatelessEJBObject.postInvoke(Lweblogic.ejb20.interfaces.InvocationWrapper;Ljava.lang.Throwable;)V(StatelessEJBObject.java:141)
[java] at Case463495.Stateless_soycq8_EOImpl.sendMessageWrap(Ljava.lang.Integer;Ljava.lang.Integer;Ljava.lang.String;ZZ)V(Stateless_soycq8_EOImpl.java:112)
[java] at Case463495.Stateless_soycq8_EOImpl_WLSkel.invoke(ILweblogic.rmi.spi.InboundRequest;Lweblogic.rmi.spi.OutboundResponse;Ljava.lang.Object;)Lweblogic.rmi.spi.OutboundResponse;(Unknown
Source)
[java] at weblogic.rmi.internal.BasicServerRef.invoke(Lweblogic.rmi.extensions.server.RuntimeMethodDescriptor;Lweblogic.rmi.spi.InboundRequest;Lweblogic.rmi.spi.OutboundResponse;)V(BasicServerRef.java:477)
[java] at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(Lweblogic.rmi.extensions.server.RuntimeMethodDescriptor;Lweblogic.rmi.spi.InboundRequest;Lweblogic.rmi.spi.OutboundResponse;)V(ReplicaAwareServerRef.java:108)
[java] at weblogic.rmi.internal.BasicServerRef$1.run()Ljava.lang.Object;(BasicServerRef.java:420)
[java] at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.subject.AbstractSubject;Ljava.security.PrivilegedExceptionAction;)Ljava.lang.Object;(AuthenticatedSubject.java:353)
[java] at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedExceptionAction;)Ljava.lang.Object;(SecurityManager.java:144)
[java] at weblogic.rmi.internal.BasicServerRef.handleRequest(Lweblogic.rmi.spi.InboundRequest;)V(BasicServerRef.java:415)
[java] at weblogic.rmi.internal.BasicExecuteRequest.execute(Lweblogic.kernel.ExecuteThread;)V(BasicExecuteRequest.java:30)
[java] at weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(ExecuteThread.java:197)
[java] at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:170)
[java] at java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown
Source)
[java] ; nested exception is:
[java] javax.transaction.xa.XAException
[java] at weblogic.rjvm.BasicOutboundRequest.sendReceive()Lweblogic.rmi.spi.InboundResponse;(BasicOutboundRequest.java:108)
[java] at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(Lweblogic.rmi.extensions.server.RemoteReference;Lweblogic.rmi.extensions.server.RuntimeMethodDescriptor;[Ljava.lang.Object;Ljava.lang.reflect.Method;)Ljava.lang.Object;(ReplicaAwareRemoteRef.java:284)
[java] at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(Ljava.rmi.Remote;Lweblogic.rmi.extensions.server.RuntimeMethodDescriptor;[Ljava.lang.Object;Ljava.lang.reflect.Method;)Ljava.lang.Object;(ReplicaAwareRemoteRef.java:244)
[java] at Case463495.Stateless_soycq8_EOImpl_812_WLStub.sendMessageWrap(Ljava.lang.Integer;Ljava.lang.Integer;Ljava.lang.String;ZZ)V(Unknown
Source)
[java] at Case463495.Client.run()V(Client.java:103)
[java] at Case463495.Client.sendMessage()V(Client.java:132)
[java] at Case463495.Client.main([Ljava.lang.String;)V(Client.java:195)
[java] Caused by: javax.transaction.xa.XAException
[java] at com.tibco.tibjms.TibjmsXAResource.end(TibjmsXAResource.java:157)
[java] at weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource.end(Unknown
Source)
[java] at weblogic.transaction.internal.XAServerResourceInfo.end(XAServerResourceInfo.java:1124)
[java] at weblogic.transaction.internal.XAServerResourceInfo.internalDelist(XAServerResourceInfo.java:325)
[java] at weblogic.transaction.internal.XAServerResourceInfo.delist(XAServerResourceInfo.java:255)
[java] at weblogic.transaction.internal.ServerTransactionImpl.delistAll(ServerTransactionImpl.java:1408)
[java] at weblogic.transaction.internal.ServerTransactionImpl.delistAll(ServerTransactionImpl.java:1396)
[java] at weblogic.transaction.internal.ServerTransactionImpl.globalPrepare(ServerTransactionImpl.java:1932)
[java] at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:252)
[java] at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
[java] at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:289)
[java] at weblogic.ejb20.internal.StatelessEJBObject.postInvoke(StatelessEJBObject.java:141)
[java] at Case463495.Stateless_soycq8_EOImpl.sendMessageWrap(Stateless_soycq8_EOImpl.java:112)
[java] at Case463495.Stateless_soycq8_EOImpl_WLSkel.invoke(Unknown Source)
[java] at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477)
[java] at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:108)
[java] at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420)
[java] at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
[java] at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
[java] at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:415)
[java] at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
[java] at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
[java] at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
[java] at java.lang.Thread.startThreadFromVM(Unknown Source)
Apologies in advance if this need to be posted in the JTA news group..
Any ideas?
Murali
Posting to the transaction newsgroup would probably also be helpful.
Can you post the code for the session bean so we can see how you're
enlisting Tibco in the transaction? It looks like you're using the JMS
provider wrappers from 8.1, which do the transaction enlistment for you, so
you shouldn't need to mess with JTA at all in your code. Still, something
weird is going on and it'd be nice to see exactly what your code looks like.
greg
"L Muralidharan" <[email protected]> wrote in message
news:[email protected]...
>
> Setup:-
>
> Weblogic Server 8.1 SP2 on Linux
>
> TIBCO E4JMS 3.1.2
>
> I have a two Staeless Session Beans which are deployed in both sides of
the cluster
> - Cluster is made up of two servers(ManagedServer1 and ManagedServer2) on
the
> same machine. The beans have container managed transaction and trans-type
set
> to required. The JMS Server is on ManagedServer1. The session bean
publishes 100
> messages to TIBCO JMS and Weblogic JMS and calls the second bean which
again publishes
> 100 messages to TIBCO JMS and Weblogic JMS .
>
> The connection factories used are XAQueueConnectionFactories.
>
> This seems to work under the following conditions:-
>
> a) The session beans are deployed just in ManagedServer1
> b) The WL load balancing scheme manages to run both the beans on
ManagedServer1
> c) If I don't publish onto Weblogic JMS( It runs successfully on
ManagedServer1
> and ManagedServer2)
>
> It does not seems to work :-
>
> When the The WL load balancing scheme manages to run both the beans on
ManagedServer2.I
> put debug statements on the beans and it seems to publish everything but
fails
> during the commit
>
> murali@dbuslinux1:~/SessionBeanExample> ant run
> Buildfile: build.xml
>
> run:
> [java] Run : 0
> [java] InitialContextFactory weblogic.jndi.WLInitialContextFactory
> [java] Provider Url
t3://myhost.mycompany.com:18003,myhost.mycompany.com:18005
> [java] javax.transaction.TransactionRolledbackException: Exception
while
> commiting Tx : Name=[EJB
Case463495.StatelessBean.sendMessageWrap(java.lang.Integer,java.lang.Integer
,java.lang.String,boolean,boolean)],Xid=BEA1-000649EC8876A0032A5E(160401684)
,Status=Rolled
> back.
[Reason=javax.transaction.xa.XAException],numRepliesOwedMe=0,numRepliesOwedO
thers=0,seconds
> since begin=3,seconds
left=30,XAServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEA
N1TCF]=(ServerResourceInfo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN1
TCF]=(state=rolledback,assigned=ManagedServer2),xar=weblogic.deployment.jms.
WrappedXAResource_com_tibco_tibjms_TibjmsXAResource@a0181b0),XAServerResourc
eInfo[JMS_MyJMS
> File Store]=(ServerResourceInfo[JMS_MyJMS File
Store]=(state=rolledback,assigned=ManagedServer1),xar=null),XAServerResource
Info[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN2TCF]=(ServerResourceIn
fo[E4JMSDOMAIN.ManagedServer2.JMSXASessionPool.BEAN2TCF]=(state=rolledback,a
ssigned=ManagedServer2),xar=weblogic.deployment.jms.WrappedXAResource_com_ti
bco_tibjms_TibjmsXAResource@98f6821),SCInfo[E4JMSDOMAIN+ManagedServer1]=(sta
te=rolledback),SCInfo[E4JMSDOMAIN+ManagedServer2]=(state=rolledback),propert
ies=({weblogic.transaction.name=[EJB
>
Case463495.StatelessBean.sendMessageWrap(java.lang.Integer,java.lang.Integer
,java.lang.String,boolean,boolean)]}),OwnerTransactionManager=ServerTM[Serve
rCoordinatorDescriptor=(CoordinatorURL=ManagedServer2+myhost.mycompany.com:1
8005+E4JMSDOMAIN+t3+,
>
XAResources={},NonXAResources={})],CoordinatorURL=ManagedServer2+myhost.myco
mpany.com:18005+E4JMSDOMAIN+t3+):
> javax.transaction.xa.XAException
> [java] at
com.tibco.tibjms.TibjmsXAResource.end(Ljavax.transaction.xa.Xid;I)V(TibjmsXA
Resource.java:157)
> [java] at
weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource.
end(Ljavax.transaction.xa.Xid;I)V(Unknown
> Source)
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.end(Lweblogic.transaction
.internal.ServerTransactionImpl;Ljavax.transaction.xa.Xid;I)V(XAServerResour
ceInfo.java:1124)
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.internalDelist(Lweblogic.
transaction.internal.ServerTransactionImpl;I)V(XAServerResourceInfo.java:325
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.delist(Lweblogic.transact
ion.internal.ServerTransactionImpl;IZ)V(XAServerResourceInfo.java:255)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.delistAll(IZ)V(ServerTra
nsactionImpl.java:1408)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.delistAll(I)V(ServerTran
sactionImpl.java:1396)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.globalPrepare()V(ServerT
ransactionImpl.java:1932)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.internalCommit()V(Server
TransactionImpl.java:252)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.commit()V(ServerTransact
ionImpl.java:221)
> [java] at
weblogic.ejb20.internal.BaseEJBObject.postInvoke(Lweblogic.ejb20.interfaces.
InvocationWrapper;Ljava.lang.Throwable;)V(BaseEJBObject.java:289)
> [java] at
weblogic.ejb20.internal.StatelessEJBObject.postInvoke(Lweblogic.ejb20.interf
aces.InvocationWrapper;Ljava.lang.Throwable;)V(StatelessEJBObject.java:141)
> [java] at
Case463495.Stateless_soycq8_EOImpl.sendMessageWrap(Ljava.lang.Integer;Ljava.
lang.Integer;Ljava.lang.String;ZZ)V(Stateless_soycq8_EOImpl.java:112)
> [java] at
Case463495.Stateless_soycq8_EOImpl_WLSkel.invoke(ILweblogic.rmi.spi.InboundR
equest;Lweblogic.rmi.spi.OutboundResponse;Ljava.lang.Object;)Lweblogic.rmi.s
pi.OutboundResponse;(Unknown
> Source)
> [java] at
weblogic.rmi.internal.BasicServerRef.invoke(Lweblogic.rmi.extensions.server.
RuntimeMethodDescriptor;Lweblogic.rmi.spi.InboundRequest;Lweblogic.rmi.spi.O
utboundResponse;)V(BasicServerRef.java:477)
> [java] at
weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(Lweblogic.rmi.extensions.s
erver.RuntimeMethodDescriptor;Lweblogic.rmi.spi.InboundRequest;Lweblogic.rmi
.spi.OutboundResponse;)V(ReplicaAwareServerRef.java:108)
> [java] at
weblogic.rmi.internal.BasicServerRef$1.run()Ljava.lang.Object;(BasicServerRe
f.java:420)
> [java] at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.
subject.AbstractSubject;Ljava.security.PrivilegedExceptionAction;)Ljava.lang
.Object;(AuthenticatedSubject.java:353)
> [java] at
weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.inter
nal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubjec
t;Ljava.security.PrivilegedExceptionAction;)Ljava.lang.Object;(SecurityManag
er.java:144)
> [java] at
weblogic.rmi.internal.BasicServerRef.handleRequest(Lweblogic.rmi.spi.Inbound
Request;)V(BasicServerRef.java:415)
> [java] at
weblogic.rmi.internal.BasicExecuteRequest.execute(Lweblogic.kernel.ExecuteTh
read;)V(BasicExecuteRequest.java:30)
> [java] at
weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(Exe
cuteThread.java:197)
> [java] at
weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:170)
> [java] at
java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown
> Source)
> [java] ; nested exception is:
> [java] javax.transaction.xa.XAException
> [java] at
weblogic.rjvm.BasicOutboundRequest.sendReceive()Lweblogic.rmi.spi.InboundRes
ponse;(BasicOutboundRequest.java:108)
> [java] at
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(Lweblogic.rmi.extensions.s
erver.RemoteReference;Lweblogic.rmi.extensions.server.RuntimeMethodDescripto
r;[Ljava.lang.Object;Ljava.lang.reflect.Method;)Ljava.lang.Object;(ReplicaAw
areRemoteRef.java:284)
> [java] at
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(Ljava.rmi.Remote;Lweblogic
.rmi.extensions.server.RuntimeMethodDescriptor;[Ljava.lang.Object;Ljava.lang
.reflect.Method;)Ljava.lang.Object;(ReplicaAwareRemoteRef.java:244)
> [java] at
Case463495.Stateless_soycq8_EOImpl_812_WLStub.sendMessageWrap(Ljava.lang.Int
eger;Ljava.lang.Integer;Ljava.lang.String;ZZ)V(Unknown
> Source)
> [java] at Case463495.Client.run()V(Client.java:103)
> [java] at Case463495.Client.sendMessage()V(Client.java:132)
> [java] at
Case463495.Client.main([Ljava.lang.String;)V(Client.java:195)
> [java] Caused by: javax.transaction.xa.XAException
> [java] at
com.tibco.tibjms.TibjmsXAResource.end(TibjmsXAResource.java:157)
> [java] at
weblogic.deployment.jms.WrappedXAResource_com_tibco_tibjms_TibjmsXAResource.
end(Unknown
> Source)
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.end(XAServerResourceInfo.
java:1124)
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.internalDelist(XAServerRe
sourceInfo.java:325)
> [java] at
weblogic.transaction.internal.XAServerResourceInfo.delist(XAServerResourceIn
fo.java:255)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.delistAll(ServerTransact
ionImpl.java:1408)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.delistAll(ServerTransact
ionImpl.java:1396)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.globalPrepare(ServerTran
sactionImpl.java:1932)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTra
nsactionImpl.java:252)
> [java] at
weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransaction
Impl.java:221)
> [java] at
weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:289)
> [java] at
weblogic.ejb20.internal.StatelessEJBObject.postInvoke(StatelessEJBObject.jav
a:141)
> [java] at
Case463495.Stateless_soycq8_EOImpl.sendMessageWrap(Stateless_soycq8_EOImpl.j
ava:112)
> [java] at
Case463495.Stateless_soycq8_EOImpl_WLSkel.invoke(Unknown Source)
> [java] at
weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477)
> [java] at
weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java
:108)
> [java] at
weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420)
> [java] at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubjec
t.java:353)
> [java] at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
> [java] at
weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:415)
> [java] at
weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)
> [java] at
weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> [java] at
weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> [java] at java.lang.Thread.startThreadFromVM(Unknown Source)
>
>
> Apologies in advance if this need to be posted in the JTA news group..
>
> Any ideas?
>
> Murali
>
-
Remote JMS Queue in Non-Clustered Environment
We have two hosts, both running WLS 8.1, that are not clustered. We would like
to create a queue on the first and be able to read it from the second. Is this
possible? How does one go about setting this up?
Paul wrote:
> We have two hosts, both running WLS 8.1, that are not clustered. We would like
> to create a queue on the first and be able to read it from the second. Is this
> possible? How does one go about setting this up?
Hi Paul,
This a common use case. Even user transactions
can include operations from both servers.
The remote server just looks a regular
client as far as the JMS server is concerned.
I recommend using MDBs - which can be be configured with a URL
and connection factory, messaging bridges, and/or foreign destination
wrappers. In addition, you can use the JMS resource reference
pooling feature to pool the "foreign" JMS server's resources.
For information you can start here:
http://edocs.bea.com/wls/docs81/jms/intro.html#jms_features
and here:
http://dev2dev.bea.com/technologies/jms/index.jsp
Important: As documented, for various reasons, some not
having to do with JMS, you will need to ensure the following are
true to enable "non-clustered" communication:
- all domains should be named uniquely
- all wl servers must be named uniquely
- all jms servers must be named uniquely
- all jms stores must be named uniquely
Tom
-
HELP with JMS message bridge to MSMQ
Can anyone offer suggestions on how to obtain/build a JMS messaging bridge to MSMQ.
I see that WL has a Messaging Bridge but only for certain foreign messaging systems.
FioranoMQ have a JMS Implementation with a bridge to MSMQ but a complete JMS implementation
seems overkill and is costly.
We already have Weblogic's JMS implementation & just want messages to appear on
a JMS Queue when they are put in a MSMQ queue. A message driven bean will then
trigger from the JMS queue.
It is rare to hear of MSMQ when it comes to messaging.
(I guess MSMQ users typically stay in MS world?)
I suggest building a minimal subset JMS wrapper. Customers
have had success with this approach with other queuing products.
If you can implement asynchronous (onMessage) then the same
wrapper can be used to plug into MDBs as well as into the bridge.
You might find that there already is open source
for these wrappers, search the web.
Take note that interop is what web-services is supposed
to be all about. You might want to investigate writing
an MSMQ app that in turn invokes a WebLogic web-service
that finally enqueues to a WL queue.
Another possibility is to write an MSMQ app that invokes
WebLogic's JMS C client to put messages into a JMS
queue. The JMS C client is due out
shortly, perhaps this week, perhaps within the next
few weeks. It will be posted to dev2dev and work
with 7.0.
Tom, BEA
Pete wrote:
> Can anyone offer suggestions on how to obtain/build a JMS messaging bridge to MSMQ.
> I see that WL has a Messaging Bridge but only for certain foreign messaging systems.
>
>
> FioranoMQ have a JMS Implementation with a bridge to MSMQ but a complete JMS implementation
> seems overkill and is costly.
>
> We already have Weblogic's JMS implementation & just want messages to appear on
> a JMS Queue when they are put in a MSMQ queue. A message driven bean will then
> trigger from the JMS queue.
-
JMS Foreign Provider using XAConnectionFactory for Container Managed Trans
Hello, we've been running some proof of concepts using Weblogic 10.3 with a JMS Foreign Provider attached to MQSeries 7.
We created a very simple MDB to read a message and output it's content.
We created a bindings file with a Connection Factory (without XA)
The question I have is that when I set the Transaction Management to Container and Transaction Attribute to "Required" , does Weblogic automatically look for a XAQueueConnectionFactory? We get the error below:
[EJB:011013]The Message-Driven EJB attempted to connect to the JMS connection factory with the JNDI name: OP_CF. However, the object with the JNDI name: OP_CF is not a JMS connection factory. NestedException Message is :com.ibm.mq.jms.MQQueueConnectionFactory cannot be cast to javax.jms.XAConnectionFactory>
When we set the transacation to Bean Managed or we set to Container Managed but set the attribute to "NotSupported" it works fine.
My goal is to have a MDB that has Container Managed Transactions and "Requires" Attribute, but only particpates in a local transaction and does not need the overhead of XA. It will read from a Foreign MQ manager Queue, process and then write back to the same Foreign MQ manager(different queue), so only one resource (MQ) is used.
If we set the above settings, it seems that a XAConnectionFactory is required. Is that true?-- If you do not enable the container transaction, then the MDB connection factory does not need to be an XA connection factory.
-- If the application is performing messaging operations, and wants to use locally managed transactions, then you have a variety of options. These are all standard JMS:
* Use an XA connection and XA session. Begin JTA transactions before performing JMS operations, and call commit or rollback on the JTA transaction after performing the JMS operations. For foreign vendors, you must take extra steps to ensure that the vendor enlists with the WebLogic transaction -- typically by using WebLogic resource reference wrappers.
* Use the standard JMS API "transacted session" on a non-XA session -- the transaction will be local to the session (this is extremely similar to JDBC local transactions).
* Use a non-transacted session. Sends will occur immediately. Receive messages will be acknowledged immediately for auto-ack sessions, or will not for non-ack.
-- Note that if a transaction only includes a single operation, there's no need for XA or non-transacted sessions.
-- For more information on transactions and integration, I highly recommend reading our [ Integrating Remote JMS Providers | http://download.oracle.com/docs/cd/E15523_01/web.1111/e13727/interop.htm#JMSPG553 ] FAQ. I also very highly recommend purchasing a copy of [ Professional Oracle WebLogic Server | http://www.amazon.com/Professional-Oracle-WebLogic-Server-Patrick/dp/0470484306/ref=sr_1_1?ie=UTF8&s=books&qid=1252088885&sr=8-1 ], and of course reviewing our [ JMS Information Roadmap | http://download.oracle.com/docs/cd/E15523_01/web.1111/e14529/messaging.htm#sthref23 ].
-- Finally, you may also want to consider replacing some MQ usage with WebLogic JMS. WL JMS is a heavily adopted messaging vendor, and for obvious reasons, tends to integrate especially well with the WebLogic app server.
Hope this helps,
Tom -
JMS over MQ Series (how?)
Hi All,
I am trying to use JMS over MQ series 5.2. Can anyone tell me how to configure the Server for the JMS.
Also in mq series 5.2 JMS jars (javax.jms.* etc or its wrappers) for client programs are not available.
Can some one help me out?
Awaiting your replies....
Regards,
Lee.There are java classes for MQSeries that you can download:
http://www-4.ibm.com/software/ts/mqseries/txppacs/ma88.html
This page includes a tutorial/manual which tells you (nearly) everything you need to know about using JMS over MQSeries.
Steve. -
Hi,
I have several legacy java daemons that communicates with a vendor via MQ Java using MQSeries hosted at a vendor site. The daemons were poorly written and are always dying (that is when production support remembers to start them at all). :D
I'd like to rewrite the application using MDBs. Is there any way to support this without requiring the vendor to change to MQSeries JMS (i.e. set up MQSeries JNDI, configure a Java Channel, etc)? I don't have any JMS transactional requirements. I just want to move to an in-server process.
thanks,
LaphroaigIf you had the time, you could write your own version of the javax.jms.* interfaces that wraps the MQ java APIs sufficient for MDB or bridge purposes, and then register instances of the CF and destination wrappers in WebLogic's JNDi via a startup class or load-on-start servlet. I've seen various customers use this approach for non-JMS (and even non-java) queueing systems, and personally, I think this is one of the most elegant, flexible, and maintainable solutions.
Another alternative is to write your own version of a bridge. You might be able to use the "MQSeries JMS Support" code sample (meant for 6.x) as an example:
http://dev2dev.bea.com/codelibrary/code/mqseries.jsp
Tom
Maybe you are looking for
-
To display bill of lading info in FBL3N
Dear Experts, Could any one please share experience with me that if it is possible to display bill of lading info in FBL3N? if so how what configuration needs to be done? Thanks a lot. Regards Simon
-
Will iTunes ever use folder monitoring? To be honest, it's the one thing iTunes is missing. Don't give me the "itunes doesn't want to mess with you files" stuff. I just want iTuens to monitor a folder so when i add songs to it, it is added into ituen
-
Hi, I gave a presentation recently on JavaServer Faces. It may be of use to someone. By no means am I an authority on JSF. Please don't hesitate to send comments/correction: [email protected]
-
Hi guys, I will really appreciate it if someone can answer this for me. I do understand that you can use snapshots to back up file systems. But they also use up pool space when their file systems grow. So, is it necessary to create zfs snapshots even
-
NEED HELP! Ipod immediately ejected from pc
I've been having trouble with my ipod for the last few months. Whenever I connect it to my computer it immediately ejects. I have tried resetting my ipod and restoring it and nothing worked. Finally I replaced my ipod and got a brand new one and the