Foreign JMS and XA

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
          >>
          >>
          >>
          

Similar Messages

  • Foreign JMS and Enlisting Transactions?

    I'm working on implementing an XA interface layer to an implementation of a foreign JMS provider and am having a problem with enlisting XA transactions in WebLogic.
              I implemented a simple JNDI that stores and retrieves serialized versions of classes in the local filesystem.
              I create an XATopicConnectionFactory named ambxatcf and a Topic named ChatterTopic and store them in there.
              The XATopicConnection implements XAConnection.
              I put a client jar in bea/weblogic91/samples/domains/wl_server/lib/ which contains the JNDI code and all of my XA classes which call the JMS.
              That gets picked up by the server on startup.
              In the Web Logic Admin Console:
              I create a Foreign Server under JMS Modules, ambrosiaServer.
              I set the JNDI Initial Context Factory set to my JNDI InitialContext class and the JNDI Properties is the path to my JNDI filestore so that it can find the serialized objects.
              I create a Foreign Destination in this server which has a Local JNDI Name: Chatter and Remote JNDI Name: ChatterTopic
              And then also in this server, I create a Foreign Connection Factory, Local JNDI Name: ambxatcf and Remote JNDI Name: XATopicConnectionFactory.
              Then in Deployments, I Install the jar containing my bean and Start it.
              Then I run the client and the bean prints out the XATopicConnectionFactory and it's the one that came out my JNDI.
              I have messages in my XATopicConnectionFactory, XATopicConnection and XATopicSession code so I know they're getting called.
              What's not getting called is XATopicSession.getXAResource() or my XAResourceImpl.start() or XAResourceImpl.commit().
              This happens whether I have the bean set up for bean managed or container managed transactions.
              I'm testing against WebLogic 9.1.
              Thanks,
              Don Hermes

    Hi Tom,
              Thank you for your response.
              I saw the article in the 8.1 documentation but I also found the following in the 9.1 docs.
              So, I assumed it would work.
              Was that assumption wrong?
              Thanks,
              Don
              =====================
              http://e-docs.bea.com/wls/docs91/jms/j2ee.html
              Automatically Enlisting Transactions
              This feature works for either WebLogic JMS implementations or for third-party JMS providers that support two-phase commit transactions (XA protocol). If a wrapped JMS connection sends or receives a message inside a transaction context, the JMS session being used to send or receive the message is automatically enlisted in the transaction through the XA capabilities of the JMS provider. This is the case whether the transaction was started implicitly because the JMS code was invoked inside an EJB with container-managed transactions enabled, or whether the transaction was started manually using the UserTransaction interface in a servlet or an EJB that supports bean-managed transactions.

  • Foreign JMS server connection issue.

    Hi All,
    We are migrating a JMS application from websphere 6.1 to weblogic 10.3. The message queue resides in a TIBCO EMS server.
    We are trying to configure the foreign JMS server through JMS Module in the admin console. We are getting the following error will deploying the application.
    +<May 4, 2009 12:32:52 AM PDT> <Warning> <EJB> <BEA-010061> <The Message-Driven EJB: TxnMessageSubscriber is unable to connect to the JMS destination: weblogic.bbmdb-txn.jms/system+
    module-0-jms.xml. The Error was:
    Can not get distribute destination information. The destination JNDI name is weblogic.bbmdb-txn.jms/systemmodule-0-jms.xml, the provider URL is null>
    we have provided the connection URL in "JNDI Connection URL" column in the foreign server setup page.
    Is there any other thing that need to be configured?

    I m facing the same problem, we are using Weblogic Server 10.3.
    We have defined a cluster on one Weblogic server and have created one managed server in the cluster machine and the other managed server in another machine.
    We are using Foreign JMS and I m getting the error as follow:
    ####<Jun 19, 2009 3:30:53 PM IST> <Warning> <EJB> <iflexpkw513> <Managed1> <[STANDBY] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1245405653881> <BEA-010061> <The Message-Driven EJB: TestJMSALSB is unable to connect to the JMS destination: fcssi/FCSSI. The Error was:
    Can not get distribute destination information. The destination JNDI name is fcssi/FCSSI, the provider URL is null>
    Not able to understand what is the problem here...
    ejb-jar.xml :
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar id="ejb-jar_ID">
    <enterprise-beans>
    <message-driven>
    <ejb-name>TestJMSALSB</ejb-name>
    <ejb-class>samplemdb.TestJMSALSB</ejb-class>
    <transaction-type>Container</transaction-type>
    <message-driven-destination id="MessageDrivenDestination_1169302343246">
         <destination-type>javax.jms.Queue</destination-type>
    </message-driven-destination>
    </message-driven>
    </enterprise-beans>
    </ejb-jar>
    weblogic-ejb-jar.xml :
    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-ejb-jar
    xmlns="http://www.bea.com/ns/weblogic/90" xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" 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-ejb-jar.xsd">
    <weblogic-enterprise-bean>
    <ejb-name>TestJMSALSB</ejb-name>
    <message-driven-descriptor>
    <destination-jndi-name>fcssi/FCSSI</destination-jndi-name>
    <connection-factory-jndi-name>iflex/fcssiQCF</connection-factory-jndi-name>
    </message-driven-descriptor>
    </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    Can anyone provide some help on this.....

  • Weblogic: problem with JMS foreign server and Transaction

    Hello everyone,
    I am working with an enterprise application with Web Application Server Logic 10.3. L 'application uses the following components:
    1) MDB 2.0
    2) FOREIGN JMS SERVER -> WebSpereMQ
    3) EJB SESSION
    L 'MDB calls the session bean which uses in its ejb-jar.xml using a Wrapper for JMS QueueConnectionFactory with res-ref:
    <resource- ref>
    <res-ref-name> jms / iss / QCFIXP </ res-ref-name>
    <res-auth> Container </ res-auth>
    <res-sharing -scope> Shareable </ res-sharing-scope>
    <resource- ref>
    The MDB is CMT
    <transaction-type> Container </ transaction-type>
    while the session bean is BMT
    <transaction-type> Bean </ transaction-type>
    to call the QCFIXP in its transaction.
    The QCFIXP ii an XA resource
    When there is a rollback operation in SessionBean also in 'MDB
    There 'an operation setRollbackOnly:
    getMessageDrivenContext (). setRollbackOnly ();
    After this operation on the MDB I do a JNDI look up the QueueConnectionFactory but sending the message on a queue I get the following exception:
    javax.jms.JMSException: [JMSPool: 169809] An error occurred while registering the JMS connection with JTA:
    But if not using the "wrapper jms" in the session bean I did not take any exception and the application don' t have any error.
    My doubt is :
    Why if I use the JMS wrapper I get an error javax.jms.JMSException: [JMSPool: 169809] An error occurred while registering the JMS connection with JTA?
    Thanks in advance.
    Michele
    Edited by: user3501731 on 11-mag-2011 3.16

    Hi Tom,
    Thanks very much for your responses and careful analysis you've done.
    Following the source code of the MDB where error occurs.
    Marked In bold the line where the exception is thrown.
         public void onMessage(Message msg) {
    //          Utility.logger(AP.DEBUG, "Partito MDB 2");
              processa(msg);
              protected void processa(Message msg) {
              Utility.logger(
                   AP.DEBUG,
                   "IXPReceiverMDB7.processa(Message msg) partito");
              try {
                   long start = System.currentTimeMillis();
    /*               Utility.logger(
                        AP.DEBUG,
                        "IXPReceiverMDB.processa(Message msg) effettuo lookup");*/
                   ejb = myEjbLocalHome.create();
                   // individuo l'identificativo del messaggio in ricezione
                   String msgid = msg.getJMSMessageID();
                   Utility.logger(
                        AP.DEBUG,
                        "IXPReceiverMDB7.processa(Message msg) elaboro messaggio:"
                             + msgid);
                   String charset = msg.getStringProperty("JMS_IBM_Character_Set");
                   Utility.logger(
                        AP.DEBUG,
                        "IXPReceiverMDB7.processa Charset:" + charset );
                   // invoco il processo di ricezione
                   boolean commitRequested = ejb.processa(ctlReq, encoding, msg);
                   // il valore di ritorno del processo di ricezione identifica o meno
                   // la necessita' di effettuare il rollback dell'intero processo
                   if (!commitRequested) {
                        getMessageDrivenContext().setRollbackOnly();
                   if (ctlReq) {
                        Utility.logger(
                             AP.INFO,
                             "IXPReceiverMDB7.processa(Message msg) spedisco il messaggio pilota del 'cleaning' con JMSCorrelationID = '"
                                  + msgid
                                  + "'");
                        msg.setJMSCorrelationID(msgid);
                        // Viene creata la QueueConnection
                        QueueConnectionFactory factory =
                             JmsFactoryDispenser.getSingleton().getFactory();
                        QueueConnection connection = factory.createQueueConnection();
                        // Viene ottenuta la 'session'
                        QueueSession session =
                             connection.createQueueSession(
                                  false,
                                  Session.AUTO_ACKNOWLEDGE);
                        // spedisco il messaggio sulla coda abbinata al processo di 'cleaning'
                        // della coda di controllo
                        IXPMessageManager msgManager = new IXPMessageManager(session);
                        msgManager.spedisci(msg, AP.PILOTQUEUE, "J", AP.STD_MESSAGE);                    session.close();
                        connection.close();
                   long end = System.currentTimeMillis();
                   Long durata = new Long (end - start);
                   Utility.logger(
                        AP.INFO,
                        "IXPReceiverMDB7 Tempo totale elaborazione messaggio: " +
                        msgid + " " +
                        durata.toString() + " mill" );
                   Utility.logger(
                        AP.DEBUG,
                        "IXPReceiverMDB7.processa(Message msg) terminato");
              } catch (Throwable e) {
                   getMessageDrivenContext().setRollbackOnly();
                   try {
                        Utility.myExceptionHandler(
                             "E",
                             "1",
                             "4028",
                             "IXPReceiverMDB.onMessage()",
                             e);
                   } catch (Throwable ex) {
                        ex.printStackTrace();
    Thanks in advance.
    Edited by: serpichetto on 16-mag-2011 1.24

  • Load balancing MQ 7.0 Foreign JMS Server and Weblogic 10 MDBs?

    We have the following configuration and we are trying to troubleshoot what appears to be a load balancing issue.
    We have 3 Solaris servers. Each Solaris server has two Weblogic managed servers running on it. There are a total of 6 managed servers in the Weblogic cluster.
    MQ Series 7.0 is also installed on each Solaris server. The MQ queue managers are in a MQ cluster. Each queue manager has the same queues defined.
    We have a foreign JMS Server configured on Weblogic that has destinations and a connection factory defined. There aren't many configuration options available for the connection factory. The destinations are bound to the queues defined on MQ using the MQ bindings file.
    The MQ bindings file was generated using the TRANSPORT(BIND) mechanism. Each bindings file points to the queue manager running on that machine. So the 2 managed servers running on one machine are accepting messages from the queue manager on that machine.
    The MDB's listenning for messages on the MQ queues are configured as follows in the weblogic-ejb-jar.xml:
         <max-beans-in-free-pool>16</max-beans-in-free-pool>
    We also created a custom work manager with min threads constraint=5 and max threads constraint=16. The dispatch-policy of all the MDBs is set to the custom work manager.
    The open input count on each MQ queue managers shows up as 32 which is expected.
    The default load algorithm on the cluster is round-robin.
    When we run a load test (injecting 40 messages per second on one MQ queue), we notice that one managed server ends up being significantly loaded than the other. Each MQ queue manager in the MQ cluster receives approximately the same number of messages in the load test. But it seems like one managed server is preferred over the other in Weblogic.
    What can be done to equally balance the load among the two managed servers on each Solaris server?
    Thanks for the help.

    Load balancing generally applies at determing how many consumer threads has to be created on each of the clustered queue instance. In that sense you have achieved perfect load balancing as your queue instances has the same no of consumer threads.
    Once you have set 'x' consumer threads on a queue, it is upto messaging provider to decide which thread to deliver a particular message and you will hardly have any control over this. Since your 32 threads are listening on the same queue, MQ can select any thread for delivering the message and the behaviour could be non deterministic.
    One option to change your design is to have a dispacther mdb which picks the messages off the MQ and then routes to a weblogic distributed destination and you can have your core mdb which does all processing listen to this distributed destination. You can enable load balancing when the disaptcher mdb routes the message to the distributed destination. Since dispatcher MDB is nothing more than a router, the unbalanced consumption off the MQ shouldn't seriously affect the server.

  • Foreign JMS QCF and Weblogic Sever Session Pool

              Hi!
              We have Weblogic 6.1 SP2 installation.
              We are trying to use JMS Server session pool and connection consumer configuration
              with MQSeries QCF registered to weblogic JNDI via startup class.
              Upon server startup weblogic is throwing ClassCast exception for QueueConnection.
              It seems weblogic is expecting QueueConnection implementation by weblogic.
              Any suggestions or alternative way of doing it.
              Thanks
              Jay PArikh
              

    Hi Jay,
              Server session pools do not support foreign providers.
              The preferred way to integrate foreign providers is via MDBs or
              via the Messaging Bridge (bridge available in SP3). For a
              comprehensive write-up on integrating foreign providers with
              WL see the whitepaper "Using Foreign JMS Providers with
              WebLogic Server" on dev2dev.bea.com.
              Tom
              Jay Parikh wrote:
              > Hi!
              >
              > We have Weblogic 6.1 SP2 installation.
              >
              > We are trying to use JMS Server session pool and connection consumer configuration
              > with MQSeries QCF registered to weblogic JNDI via startup class.
              >
              > Upon server startup weblogic is throwing ClassCast exception for QueueConnection.
              > It seems weblogic is expecting QueueConnection implementation by weblogic.
              >
              > Any suggestions or alternative way of doing it.
              >
              > Thanks
              > Jay PArikh
              

  • Foreign jms connection factory username and password

    I have to connect to TIBCO as the foreign JMS. I have created a foreign JMS server and configured JNDI properties including username and password. I configured a connection factory and specified username and password as well. Finally, I configured foreign destination.
              In web.xml and corresponding welogic.xml, I am using the resource-ref with Container authentication.
              With the above, I always get the following exception.
              javax.jms.JMSSecurityException: Not permitted
                   at com.tibco.tibjms.Tibjmsx.buildException(Tibjmsx.java:499)
                   at com.tibco.tibjms.TibjmsSession._createProducer(TibjmsSession.java:697)
                   at com.tibco.tibjms.TibjmsQueueSession.createSender(TibjmsQueueSession.java:123)
              The above code works fine under the following circumstances:
              * If I don't use any username and passwords.
              * If I pass the username and password to the connection factory when creating the connection. According to the documentation here (http://e-docs.bea.com/wls/docs81/jms/j2ee_components.html#1033768) doing so in an error:(
              Any ideas or suggestions?

    Even though I had configured things in the web.xml and weblogic.xml, I didn't use them. So, instead of using global JNDI, I used java:comp/env JNDI. Once, I used the correct JNDI, the connection is working... I will continue to do further testing.
              > I have to connect to TIBCO as the foreign JMS. I
              > have created a foreign JMS server and configured JNDI
              > properties including username and password. I
              > configured a connection factory and specified
              > username and password as well. Finally, I configured
              > foreign destination.
              >
              > In web.xml and corresponding welogic.xml, I am using
              > the resource-ref with Container authentication.
              >
              > With the above, I always get the following exception.
              >
              >
              > javax.jms.JMSSecurityException: Not permitted
              > at
              > t
              > com.tibco.tibjms.Tibjmsx.buildException(Tibjmsx.java:4
              > 99)
              > at
              > t
              > com.tibco.tibjms.TibjmsSession._createProducer(TibjmsS
              > ession.java:697)
              > at
              > t
              > com.tibco.tibjms.TibjmsQueueSession.createSender(Tibjm
              > sQueueSession.java:123)
              >
              > The above code works fine under the following
              > circumstances:
              > * If I don't use any username and passwords.
              > * If I pass the username and password to the
              > connection factory when creating the connection.
              > According to the documentation here
              > e
              > (http://e-docs.bea.com/wls/docs81/jms/j2ee_components.
              > html#1033768) doing so in an error:(
              >
              > Any ideas or suggestions?

  • Foreign JMS between 8.1 and 7.0

              We are experience strange behaviour when we are using foreign JMS between 8.1 and
              7.0. When one MDB on a 8.1 server connects to the JMS on the 7.0 server everything
              is fine. When a second 8.1 server connect to a JMS queue on the 7.0 server the
              it seems to connect but the messages on hanging as pending. If we writes the provider
              URL directly into the MDB descriptor it seems to work. Should foreign JMS work
              between WLS versions? Is there any way to get more debugging information?
              Björn Caroll
              

    It should work. All a "Foreign JMS Provider" is in 8.1 is a way to create
              sort of a "symbolic link" in JNDI between some objects in another JNDI
              provider and the local WLS JNDI tree.
              You can get more info out of the MDB startup process by setting the
              following command-line settings when you start weblogic.Server:
              -Dweblogic.ejb.jms.connect.debug=true
              -Dweblogic.ejb.jms.connect.verbose=true
              (You'll also have to have "StdoutDebugEnabled" set in the "Server" element
              of your config.xml file, or you'll have to turn on that checkbox in the
              console.)
              Also, if you post your MDB deployment descriptors and the ForeignJMS stuff
              from config.xml, we might have some ideas.
              greg
              "Björn Caroll" <[email protected]> wrote in message
              news:3fd6f281$[email protected]..
              >
              > We are experience strange behaviour when we are using foreign JMS between
              8.1 and
              > 7.0. When one MDB on a 8.1 server connects to the JMS on the 7.0 server
              everything
              > is fine. When a second 8.1 server connect to a JMS queue on the 7.0 server
              the
              > it seems to connect but the messages on hanging as pending. If we writes
              the provider
              > URL directly into the MDB descriptor it seems to work. Should foreign JMS
              work
              > between WLS versions? Is there any way to get more debugging information?
              >
              > Björn Caroll
              

  • MDB behavior with Foreign JMS Provider

              I am experiencing some MDB behavior which I do not quite understand. I would appreciate
              if someone could tell me what might be happening.
              An application on WebLogic 8.1 SP1 (also tried it with SP2) has MDB's which listen
              on a MQ Queue. If I put a large XML message on the MQ Queue (say around 600 KB),
              the onMessage execution is very random, For the large messages only 1 MDB gets
              invoked and the other messages just sit on the MQ Queue. Even though I have defined
              an weblogic execute queue for the MDB's and they have 15 threads allocated.
              The other messages get picked up after the first one gets completed. The problem
              is the whole transaction (which is XA) can take a while (upto 10 minutes). This
              is not intended, but for some reason it takes that long.
              Also, while monitoring the MDB execute queues, I noticed that none of the threads
              from that queue are performing the work and a thread dump shows that the weblogic.ejb20.internal.JMSPoller
              thread has invoked the MDB and is currently waiting for the database to finish
              some processing.
              When the message size is smaller, the MDB's fire concurrently and are executed
              on the MDB execute queue.
              Thanks,
              Ketan.
              

    When we're using MDBs against a foreign JMS provider with XA, the EJB
              container tries to reduce the number of threads that are blocked waiting for
              a message. You should see lots of threads working when there are lots of
              messages on the queue, a few threads (or only one) working when the queue is
              empty or nearly so, and there should be some ramp-up and ramp-down time in
              between. It sounds like the ramp-up takes longer in your case because
              receiving the very first message takes a long time.
              If this behavior is causing big problems for you, you might want to contact
              product support and file an enhancement request.
              greg
              "Ketan" <[email protected]> wrote in message
              news:[email protected]...
              >
              > Here is some more information regarding this issue.
              >
              > When I place sufficiently large messages (such that the parsing and
              processing
              > of these messages takes longer than it does for normal size messages), I
              notice
              > the following behavior.
              >
              > Lets say I put 6 large messages on the MQ Queue. The server immediately
              picks
              > up 1 message and starts processing it. The other 5 messages are sitting on
              the
              > MQ Queue, while the MDB execute queue has all 15 idle threads.
              >
              > After the processing of the message is done, 2 messages get picked up.
              This time,
              > 1 thread in the MDB execute queue gets the message and the other is
              processed
              > by the JMSPoller thread. After these 2 messages are processed, 3 Messages
              get
              > picked up and this time 2 messages are on the MDB execute queue and 1 is
              processed
              > by the JMSPoller.
              >
              > So based on this the question is ..Is this the expected behavior? I was
              under
              > the impression that the poller would simply dispatch messages to the
              execute queue,
              > and as a result, I was expecting all the messages would get picked up from
              the
              > MQ queue pretty fast and would not have to wait for 1 or more MDB's to
              finish
              > processing.
              >
              > I would really appreciate any suggestions anyone may have for me.
              >
              > Again the environment is WLS 8.1 SP2, MQ 5.3
              >
              > thanks,
              > Ketan
              

  • Calling Foreign JMS in SOA Suite 11g JMS Adapter

    Hi,
    Just want to get some guidance in the implementation of Foreign JMS in WebLogic 10.3.
    I followed the creation of the Foreign JMS Server using this document:
    http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e13952/taskhelp/jms_modules/foreign_servers/CreateForeignServers.html
    I am trying to connect to a remote Weblogic 10.3 JMS queue but cannot get pass the JDev wizard stage.
    I need to call the foreign JMS via the Fusion 11g JMS Adapter but cannot lookup the destination from the JDev wizard. My composite will produce a message that will end up in the remote queue.
    Has anybody got this to work? Is this supported in JMS Adapter? I've read quite a few using MDB to call the Foreign JMS but not JMS Adapter.
    Regards,
    Robert

    Please refer to the following document that shows how to access remote wls jms queues and topics. This is the preferred way when accessing remote wls destinations.
    http://download.oracle.com/docs/cd/E17904_01/integration.1111/e10231/adptr_jms.htm#BABJACJA
    Thanks
    Aman

  • Reading Message from Foreign JMS Queue in SOA Suite 11g.

    Hi,
    I am trying to read a JMS message that has been put into a JMS Queue on a remote weblogic Server.
    The steps that I know is that I need to create a foreign JMS Server and then probably use JMS Adapter to subscribe to the message that is lying in the remote queue.
    Has anybody been able to achieve this kind of scenario working for a remote JMS queue? Also, is this supported by JMS Adapter in SOA11g?
    Any help will be appreciated.
    Regards,
    Varun Maheshwari

    Hi Atheek1,
    Thanks for your reply.
    The confusion that is pondering me is that do I need to create a Foreign JMS Server or should I create a JMS adapter and override the properties.
    I have tried the steps for creating a Foreign Server from the below link
    Unable to access remote JMS Queue through JMS Adapter
    But I am not able to find the Foreign Server created and any connection factories and Destinations related to foreign Server in my JMS Destination while configuring JMS Adapter.
    I am not sure how to do step2 as entailed by you.
    Could you please explain me in little detail on how to do this or redirect me to some blog or forum which will be really helpful.
    Cheers,
    Varun

  • [EJB:010112] - error with WLI8.1 Event Generator for foreign JMS/MQ provider

    I'm getting following error in weblogic server log when starting a JMS Event generator
    to a foreign JMS(MQ5.3) Queue.
    <May 4, 2004 4:44:35 PM PDT> <Warning> <EJB> <BEA-010096> <The Message-Driven
    EJ
    B: mqQueueEventGen is unable to connect to the JMS destination: WAL1021852D_Test
    JMSQueue. Connection failed after 2 attempts. The MDB will attempt to reconnect
    every 10 seconds. This log message will repeat every 600 seconds until the condi
    tion clears.>
    <May 4, 2004 4:44:35 PM PDT> <Warning> <EJB> <BEA-010061> <The Message-Driven
    EJ
    B: mqQueueEventGen is unable to connect to the JMS destination: WAL1021852D_Test
    JMSQueue. The Error was:
    [EJB:010112]The Message Driven Bean 'mqQueueEventGen' is transacted, but the pro
    vider defined in the EJB is not transacted. Provider should be transacted if onM
    essage method in MDB is transacted.>
    My WLI8.1.2 is patched with CR131686_812.zip to support event generator for foreign
    JMS destinations. The foreign JMS/MQ provider is configured properly. QueueSend/Receive
    were tested fine with JMS java code using local JNDI names of foreign JMS objects.
    So we know that foreign Queue is active and accessiable from webLogic.
    Anyone run into this? Solution?
    Thanks,
    Scott

    Hi Scott,
    I need a transaction from the MDB since I am not using an EJb to pursue the action.
    Hence I need to retain the <trans-attribute>Required</trans-attribute> at the
    MDB.
    Have any answers?
    Pradip
    "Scott Yen" <[email protected]> wrote:
    >
    It's resolved.
    The MDB automatically created by JMS Event Generator defaults to be deployed
    with
    “transacted”. That requires the foreign JMS provider to be “XA”.
    The deployment descriptor is created as <domain-directory>/WLIJmsEG_<event_gen_name>.jar
    e.g. C:\bea812\user_projects\domains\jmsInterop\WLIJmsEG_mqQueueEventGen.jar
    Since MQ in the localhost and remote SLUDV18 are not XA-enabled, we had
    to manually
    change the <container-transaction> section in ejb-jar.xml:
    From :
    <trans-attribute>Required</trans-attribute>
    To:
    <trans-attribute>NotSupported</trans-attribute>
    "Scott Yen" <[email protected]> wrote:
    I'm getting following error in weblogic server log when starting a JMS
    Event generator
    to a foreign JMS(MQ5.3) Queue.
    <May 4, 2004 4:44:35 PM PDT> <Warning> <EJB> <BEA-010096> <The Message-Driven
    EJ
    B: mqQueueEventGen is unable to connect to the JMS destination: WAL1021852D_Test
    JMSQueue. Connection failed after 2 attempts. The MDB will attempt to
    reconnect
    every 10 seconds. This log message will repeat every 600 seconds until
    the condi
    tion clears.>
    <May 4, 2004 4:44:35 PM PDT> <Warning> <EJB> <BEA-010061> <The Message-Driven
    EJ
    B: mqQueueEventGen is unable to connect to the JMS destination: WAL1021852D_Test
    JMSQueue. The Error was:
    [EJB:010112]The Message Driven Bean 'mqQueueEventGen' is transacted,
    but the pro
    vider defined in the EJB is not transacted. Provider should be transacted
    if onM
    essage method in MDB is transacted.>
    My WLI8.1.2 is patched with CR131686_812.zip to support event generator
    for foreign
    JMS destinations. The foreign JMS/MQ provider is configured properly.
    QueueSend/Receive
    were tested fine with JMS java code using local JNDI names of foreign
    JMS objects.
    So we know that foreign Queue is active and accessiable from webLogic.
    Anyone run into this? Solution?
    Thanks,
    Scott

  • Configuring WL JMS as a foreign JMS provider with security scope (WLS 8.1)

    Hello, i have a problem accessing a queue from a foreign jms provider, if the queue has a security policy. I have the following scenario:
              1) Server server1 in domain1 (WLS81) has a JMS Server with one queue queue1 with a security policy "Caller is a member of the group GROUP_QUEUE". There is also a user USER_QUEUE user defined, which belongs to the this group.
              There is also a ConnectionFactory with "XA Connection Factory Enabled = true" configured.
              The queue and the connection factory are visible in the jndi tree of this server.
              2) Server server2 has a foreign jms server. Foreign JMSConnectionFactory and foreign JMSDestination refer to the jndi entries of server 1. For Foreign JMS Connection Factory username is set to USER_QUEUE. JNDI entries for foreign references are visible in jndi tree of this server.
              I wrote a standalone client to store messages in the queue accessing server1 with USER_QUEUE sucessfully.
              Now I try to deploy a MDB on server2 accessing the queue on server 1. I tried different versions of ejb-jar.xml/weblogic-ejb-jar.xml to access the queue, but with no luck.
              scenario a): no security entries in both descriptors; weblogic-descr has entries <destination-jndi-name> and <connection-factory-jndi-name> pointing to the local jndi names. REsult:
              <11.02.2005 19.16 Uhr CET> <Warning> <EJB> <BEA-010061> <The Message-Driven EJB:
              CancelEasyMoneyBean is unable to connect to the JMS destination: prepaid.Cancel
              EasyMoneyQueue. The Error was:
              [EJB:010196]'weblogic.jms.common.JMSSecurityException: Access denied to resource
              : type=<jms>, application=, destinationType=queue, resource=CancelEasyMoneyQueue
              , action=receive' Linked exception = 'weblogic.jms.common.JMSSecurityException:
              Access denied to resource: type=<jms>, application=, destinationType=queue, reso
              urce=CancelEasyMoneyQueue, action=receive'
              So entering username and password for ForeignJMSConnectionFactory doesn't do the trick.
              scenario b:) trying to set additional security entries in both descriptors. I added a role queueUser to my mdb and to weblogic-descr a
              <security-role-assignment>
              <role-name>queueUser</role-name>
              <principal-name>USER_QUEUE<principal-name>
              </security-role-assignment>
              I added the user USER_QUEUE and the group GROUP_QUEUE to server2.
              Now server 1 throws exception after redeployment on server 2:
              java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[USER_QUEUE, GROUP_QUEUE].
              java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[USER_QUEUE, GROUP_QUEUE]
              at weblogic.security.service.SecurityServiceManager.seal(SecurityService
              Manager.java:680)
              Has anybody an idea or a pointer how to define access from a mdb to a foreign queue using security ?
              Thanks in advance,
              Rainer

    Hello, i have a problem accessing a queue from a foreign jms provider, if the queue has a security policy. I have the following scenario:
              1) Server server1 in domain1 (WLS81) has a JMS Server with one queue queue1 with a security policy "Caller is a member of the group GROUP_QUEUE". There is also a user USER_QUEUE user defined, which belongs to the this group.
              There is also a ConnectionFactory with "XA Connection Factory Enabled = true" configured.
              The queue and the connection factory are visible in the jndi tree of this server.
              2) Server server2 has a foreign jms server. Foreign JMSConnectionFactory and foreign JMSDestination refer to the jndi entries of server 1. For Foreign JMS Connection Factory username is set to USER_QUEUE. JNDI entries for foreign references are visible in jndi tree of this server.
              I wrote a standalone client to store messages in the queue accessing server1 with USER_QUEUE sucessfully.
              Now I try to deploy a MDB on server2 accessing the queue on server 1. I tried different versions of ejb-jar.xml/weblogic-ejb-jar.xml to access the queue, but with no luck.
              scenario a): no security entries in both descriptors; weblogic-descr has entries <destination-jndi-name> and <connection-factory-jndi-name> pointing to the local jndi names. REsult:
              <11.02.2005 19.16 Uhr CET> <Warning> <EJB> <BEA-010061> <The Message-Driven EJB:
              CancelEasyMoneyBean is unable to connect to the JMS destination: prepaid.Cancel
              EasyMoneyQueue. The Error was:
              [EJB:010196]'weblogic.jms.common.JMSSecurityException: Access denied to resource
              : type=<jms>, application=, destinationType=queue, resource=CancelEasyMoneyQueue
              , action=receive' Linked exception = 'weblogic.jms.common.JMSSecurityException:
              Access denied to resource: type=<jms>, application=, destinationType=queue, reso
              urce=CancelEasyMoneyQueue, action=receive'
              So entering username and password for ForeignJMSConnectionFactory doesn't do the trick.
              scenario b:) trying to set additional security entries in both descriptors. I added a role queueUser to my mdb and to weblogic-descr a
              <security-role-assignment>
              <role-name>queueUser</role-name>
              <principal-name>USER_QUEUE<principal-name>
              </security-role-assignment>
              I added the user USER_QUEUE and the group GROUP_QUEUE to server2.
              Now server 1 throws exception after redeployment on server 2:
              java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[USER_QUEUE, GROUP_QUEUE].
              java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[USER_QUEUE, GROUP_QUEUE]
              at weblogic.security.service.SecurityServiceManager.seal(SecurityService
              Manager.java:680)
              Has anybody an idea or a pointer how to define access from a mdb to a foreign queue using security ?
              Thanks in advance,
              Rainer

  • MDB Credential Mapper for connecting to secured foreign JMS  - Need WLST

    Hello All
    Weblogic 10.3.0
    I am in a situation where i have the MDB trying to read messages from secure foreign jms . The ejb-jar and weblogic-jar.xml has the right values like
    ejb-jar.xml
    ==========
    <assembly-descriptor>
    <security-role>
    <role-name>admin</role-name>
    </security-role>
    </assembly-descriptor>
    weblogic-ejb-jar.xml
    ==============
    <run-as-principal-name>CFAMJMS</run-as-principal-name>
    <security-role-assignment>
    <role-name>admin</role-name>
    <principal-name>CFAMJMS</principal-name>
    </security-role-assignment>
    </weblogic-ejb-jar>
    If i am correct , to connect to the Secured Foreign JMS Connection - There are couple of steps involved
    1) To create a new security wlsuser under myrealm - called CFAMJMS
    2) Each MDB deployed as part of the ear file - I need to perform the credential Mapping - Means
    EJB Component Credential Mappings - create a WLS user of the name CFAMJMS and supply the Remote JMS User Name and Password .
    Today , i perform the setp 2 ) using the Weblogic Admin Console . Need to automate the same using wlst script . Please help

    Hi,
    Similar question was answered in this thread...
    JMS integration with Tibco EMS via SSL
    Could you please check if your TIBCO EMS is ssl enabled .Login on TIBCO EMS using putty and then type show config and check for the following parameter ssl_server_identity ,ssl_server_key . Go to the path mentioned in these two properties and see if the certificate with .pem is present there.
    As you are getting following error in the log
    Caused by: javax.jms.JMSSecurityException: Can not initialize SSL client: no trusted certificates are set
    In TIBCO we need trusted store .pem certificate to make it ssl enabled.
    Cheers,
    Vlad
    It is considered good etiquette to reward answerers with points (as "helpful" - 5 pts - or "correct" - 10pts)
    https://forums.oracle.com/forums/ann.jspa?annID=893

  • Foreign jms queue binding problem

              Hi,
              I am on the way to wls7.0 from wls5.1, but I got a probelm when I tried to rebind
              the jms queue to weblogic jndi.
              [javax.naming.ConfigurationException [Root exception is java.rmi.MarshalException:
              failed to marshal rebind(Ljava.lang.String;Ljava.lang.Object;Ljava.util.Hasht
              able;); nested exception is: java.io.NotSerializableException]]
              Can I bind the queue to wls jndi? Anybody has silimar situation?
              Thanks
              

    Hi Jen,
              As TOM said, in your case weblogic interaoperabilty supports only from
              weblogic 5.1 to 6.1, that to specified service packs. you can go through the
              following url
              http://e-docs.bea.com/wls/docs61/interop/interop.html
              So you better go by using message bridges for foreign jms providers. The
              document has how you can configure about JNDI provider either File based Or
              Ldap based.
              Thanks
              Kumar
              "Je" <[email protected]> wrote in message
              news:[email protected]...
              >
              > Thanks, actually I am trying to rebind the jms queue from Fiorano
              > MQ. It works fine in wls5.1. Is there special requirement for jndi for
              wls7.1,
              > does the object needs to be serilizable to be bind into jndi?
              >
              > Tom Barnes <[email protected]> wrote:
              > >
              > >It seems you are trying to access 5.1 JMS from 7.0. WebLogic did not
              > >
              > >support interoperability between versions until 6.1. The classes are
              > >
              > >not compatible. So interop requires a good bit of class-loader magic.
              > >
              > > The only way to interop between JMS 5.1 and 7.0 is to use the
              > >messaging bridge (which does the magic for you).
              > >
              > >FYI: I think that it may be possible to invoke remote 5.1 methods from
              > >
              > >7.0 using the IIOP protocol.
              > >
              > >Tom
              > >
              > >Jen wrote:
              > >> Hi,
              > >> I am on the way to wls7.0 from wls5.1, but I got a probelm when I tried
              > >to rebind
              > >> the jms queue to weblogic jndi.
              > >>
              > >> [javax.naming.ConfigurationException [Root exception is
              java.rmi.MarshalException:
              > >> failed to marshal
              rebind(Ljava.lang.String;Ljava.lang.Object;Ljava.util.Hasht
              > >> able;); nested exception is: java.io.NotSerializableException]]
              > >>
              > >> Can I bind the queue to wls jndi? Anybody has silimar situation?
              > >> Thanks
              > >
              >
              

Maybe you are looking for