Queues - 1 MDB or many?

I need an opinion - how well would a system with a single MDB that handles multiple message types (e.g. xml messages, with tags to indicate the type of message) vs having multiple MDB's per topic. I guess I'm looking at a "best practice" pattern. I've been thinking of this and realized that if you have a single MDB with multiple message types, then this could mean that if there were a message type that sees a high volume vs another that sees a lower volume, the lower volume message processing of the messages would be delayed.
From what I've read, the container is supposed to compensate for a high volume of messages through creating more instances, but this still doesn't stop the fact that the messages are processed FIFO, so having multiple topics would be a far more better way to go.
The hope here however was to have a model where we would only have two types of messages initially processed asynchronously, while the others were processed synchronously through regular session beans, but additional message types may be turned on later to run asynchronously without having to create new MDB's for each additional topic. But I think this could just mean creating unnecessary delays for other types of messages.
(reposted from AQ forum...figured this may be a better forum for this)
Any thoughts?
Thanks

Jason -- One important point is that the EJB specification (specifically MDBs) does not guarantee FIFO processing. Here is the quote from section 15.4.6 of the spec:
A container allows many instances of a message-driven bean class to be executing concurrently, thus allowing for the concurrent processing of a stream of messages. No guarantees are made as to the exact order in which messages are delivered to the instances of the message-driven bean class, although the container should attempt to deliver messages in order when it does not impair the concurrency of message processing. Message-driven beans should therefore be prepared to handle messages that are out of sequence: for example, the message to cancel a reservation may be delivered before the message to make the reservation.
That said, I have seen queuing systems that have used both types of arrangements you describe (although none were using JMS.) For the generic case, there were problems if the queue was backed up so you might consider multiple queues with different priorities, each of which has a generic payload. This helps starvation of time critical messages.
If you do establish different topics, then you will have more work to do in terms of deployment and management of the topics, but the messages will be cleanly separated and you may be able to make some optimizaitons of message processing since they can be created in a form that best mathces their use.
Overall, my experiences with generic queues, once we established multiple queues with different priorities, was good. Just be ready for the additional overhead of processing XML messages.
Thanks -- Jeff

Similar Messages

  • WL6.1 - browsing and receiving from queues with MDBs

    Hi all,
              I have hit on a problem that has been brought up previously without,
              as far as I can tell, any conclusive response.
              I am using a queue which is processed by message driven beans. This
              queue contains jobs which may take a long time to execute and hence it
              is important to allow users to manage the queue. Ideally this
              management should work in the same way as, say, a printer queue where
              it is possible to view queued jobs and cancel them if necessary.
              It has been said that MDBs in WLS6.1 use an internal pipeline which
              [quote from previous thread " QueueBrowser not working in WL6"]
              "uses an optimistic algorithm and pushes the message at the bean
              before it is ready"
              and, sure enough, pointing a queue browser, activated from a JSP, at
              the queue always returns a queue length of zero, whatever the number
              of pooled MDBs and whatever the actual number of messages queued. I
              have worked around this by creating a second 'monitoring' queue not
              listened to by any MDBs and which I then have to manually synchronise
              with the 'real' jobs queue. However, removing jobs does not work
              either (I am storing the job message ID and trying to access the jobs
              queue using this as a selector) since the queue is empty when looked
              at from any client which is not the listening MDB. In contrast with
              the browsing, there seems to be no obvious way around this as I need
              to access the jobs queue itself before I can remove any jobs.
              My intended 'queue management' functionality does not seem
              particularly esoteric to me and hence I am puzzled that this appears
              difficult to implement. I have therefore been wondering whether I have
              been missing any obvious point and I would be grateful to hear of
              anybody else's experiences trying to achieve similar functionality.
              It would also be interesting to hear whether moving to WLS 7.0 would
              change/fix this 'pipelining' behaviour of MDBs.
              Many thanks.
              Peter
              

    Hi Peter,
              Since 6.0, when pipelining was introduced,
              the pipeline size is configurable via the connection
              factory (see "MessagesMaximum"). To tune this setting,
              you will need to configure a
              custom connection factory for the MDB rather than use
              the default one, and specify its name in the xml descriptor.
              I'm a little surprised you did not find reference to this
              setting in your search.
              Regardless, you will not be able to stop the current message in the MDB.
              In the next release (beta December) you can force the current tx to
              rollback through the JTA mbeans. Of course, this won't stop
              the onMessage() from continuing its work, but it will
              guarantee that any of its transactional
              work will be ultimately discarded.
              Since the app server has no control of the thread
              once it is passed to the MDB app (it can't just kill
              the thread), you will need to roll your
              own mechanism to make it stop. One possibility is to have your MDB
              "register" that it is starting with a "manager" application, and then
              have the MDB poll this application to see if the system admin
              has requested that the current job be aborted.
              You will likely find it useful to read through the JMS FAQ. You
              might also find it useful to look at the jsp queue browser app
              posted on dev2dev by Adarsh...
              Tom, BEA
              P.S. The release after next release will contain more advanced message
              management features.
              Peter Case wrote:
              > Hi all,
              >
              > I have hit on a problem that has been brought up previously without,
              > as far as I can tell, any conclusive response.
              > I am using a queue which is processed by message driven beans. This
              > queue contains jobs which may take a long time to execute and hence it
              > is important to allow users to manage the queue. Ideally this
              > management should work in the same way as, say, a printer queue where
              > it is possible to view queued jobs and cancel them if necessary.
              > It has been said that MDBs in WLS6.1 use an internal pipeline which
              >
              > [quote from previous thread " QueueBrowser not working in WL6"]
              > "uses an optimistic algorithm and pushes the message at the bean
              > before it is ready"
              >
              >
              > and, sure enough, pointing a queue browser, activated from a JSP, at
              > the queue always returns a queue length of zero, whatever the number
              > of pooled MDBs and whatever the actual number of messages queued. I
              > have worked around this by creating a second 'monitoring' queue not
              > listened to by any MDBs and which I then have to manually synchronise
              > with the 'real' jobs queue. However, removing jobs does not work
              > either (I am storing the job message ID and trying to access the jobs
              > queue using this as a selector) since the queue is empty when looked
              > at from any client which is not the listening MDB. In contrast with
              > the browsing, there seems to be no obvious way around this as I need
              > to access the jobs queue itself before I can remove any jobs.
              > My intended 'queue management' functionality does not seem
              > particularly esoteric to me and hence I am puzzled that this appears
              > difficult to implement. I have therefore been wondering whether I have
              > been missing any obvious point and I would be grateful to hear of
              > anybody else's experiences trying to achieve similar functionality.
              > It would also be interesting to hear whether moving to WLS 7.0 would
              > change/fix this 'pipelining' behaviour of MDBs.
              >
              > Many thanks.
              >
              > Peter
              

  • How to manage parallel processing for queue JMS/MDB?

    Hello, we are developing a system in WebLogic Server 10g (10.3.0) that contains multiple JMS queues associated with each in an MDB. We need know how manage the parallelism of the message for each queue? for example:
    Queue 1: up to 4 messages in parallel
    Queue 2: up to 2 messages in parallel
    Queue 3: up to 5 messages in parallel
    Can also perform this configuration from the WebLogic Server Admin Console?
    Thank you very much,
    Lucas.

    Thanks a lot Tom for the reply, I have read about the descriptor setting 'max-beans-in-free-pool' and I searched this concept at the Administration Console without success.
    I suppose other way is create a “Session Pools” under the JMSServer, and then create a “Consumer” and define the setting “Messages Maximum”. One of the disadvantages is that “Session Pools” don’t support JTA, from the documentation:
    +Session pools enable an application to process messages concurrently. Session pools are now used rarely, as they are not a required part of the J2EE specification, do not support JTA user transactions, and are largely superseded by message-driven beans (MDBs), which are a required part of the J2EE specification.+
    I continue reading the MDB chapter of the performance and tuning guide in the documentation, thanks for any contribution to the topic.
    Lucas.

  • JMS Queue/Topic MDB

    Es posible crear Queue/Topic diamicamente
    Es posible crear los MDB dinamicamente.
    de que manera se puede implementar.
    gracias.

    Hi Rolper
    La capacidad de crear din�micamente un queue/topic depende de su abastecedor de JMS. La mayor�a de los abastecedores de JMS tienen un "API administrativo" para hacer esto - por ejemplo ArjunaMS (http://www.arjuna.com) proporciona un API comprensivo para crear queue y topics en runtime.
    Hope this helps,
    Tom Jenkinson

  • Print queue stalling when spooling many documents

    Hello all, need help with a peculiar issue.
    We have just built a brand-new Server 2003 R2 SP2 x86 virtual server in VMWare.  This server is also installed with the Subsystem for UNIX-based Applications components and a program called PrintMonitor that appears to be a bridge between a UNIX-based
    application on UNIX server submitting print jobs to the Server 2003 R2 server.
    The problem is that whether going through PrintMonitor or just into the standard Windows printing subsystem, the print queue for any of the 3 printers installed on the server will stall when a large number of documents are submitted.  For example, if
    15 small Notepad documents are printed to a printer, they will all queue, but after 11 print (this number appears to be consistent and repeatable), it can take anywhere from 45 seconds to 2 minutes for the rest to print.
    I've already done a lot of searching on this issue and everything I read says that printing problems are most likely due to print drivers.  Of the three printers, one is an HP 4000 series LaserJet and the other 2 are large Kyocera TASKalfa 8001i's.
     The problem has manifested on all three printers, but so far we've only tried to remedy the problem on the HP.  We've tried 4 alternate drivers and the problem persists.  The HP PCL5 and PS drivers completely failed to work because it didn't
    have correct paper parameters.  The PCL6 driver behaved the same as the driver included in Windows.  We've tried submitting through PrintMonitor and directly into Windows, but the problem persists there as well, which would seem to eliminate PrintMonitor
    as the source of the problem.
    Does anyone else have any suggestions on what we can try?

    This is a very old issue due to the RFC and design of the lpr protocol.  Can you not use Standard TCP/IP ports to the print devices rather than LPR ports?
    Here's a doc comparing limitations in LPR and reasons to move to Standard TCP/IP Port monitor.
    http://technet.microsoft.com/en-us/library/cc728404(v=WS.10).aspx
    All the print devices you listed support Standard TCP/IP Ports.
    If you really have to stick to LPR Port due to your PrintMonitor application, respond back or just search for: 721 lpr alan morris. 
    Alan Morris Windows Printing Team

  • Creating a MDB and Distributed Queue in Clustered env in weblogic 9.2

    I have created 3 managed servers and all these managed servers are in the cluster.
              Now i create JMS module for this cluster and create the Connection factory 'QUEUE_CF_8' and distributed Queue 'DIS_QUEUE_8' targeting to the cluster.
              I create a MDB and JMS client and deploy them in the cluster.JMS client sends the message to the distributed queue and MDB is listening to the distributed queue
              When i deploy the MDB , it is deploys perfectly . But when i run the client it fails with the following exception
              [java] javax.naming.NameNotFoundException: Unable to resolve 'QUEUE_CF_8'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Unable to resolve 'QUEUE_CF_8'. Resolved '']; remaining name 'QUEUE_CF_8'
              When i view the JNDI tree for all the managed servers , i can see the Connection factory and the distributed queue.
              Also i deploy the MDB to the cluster and no submoduletargets are specified.
              Let me know what is that iam missing.

    <?xml version='1.0' encoding='UTF-8'?>
              <weblogic-jms xmlns="http://www.bea.com/ns/weblogic/90" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xsi:schemaLocation="http://www.bea.com/ns/weblogic/920 http://www.bea.com/ns/weblogic/920.xsd">
              <connection-factory name="Queue_CF_8">
              <sub-deployment-name>Server_group_4</sub-deployment-name>
              <jndi-name>QUEUE_CF_8</jndi-name>
              <security-params>
              <attach-jmsx-user-id>false</attach-jmsx-user-id>
              </security-params>
              </connection-factory>
              <uniform-distributed-queue name="DIS_QUEUE_8">
              <sub-deployment-name>Server_group_4</sub-deployment-name>
              <jndi-name>DIS_QUEUE_8</jndi-name>
              <load-balancing-policy>Round-Robin</load-balancing-policy>
              </uniform-distributed-queue>
              </weblogic-jms>
              But the problem was with the clustering.
              Thanks for your time..

  • Can an MDB listens to remote queue

    In my application , i have created a queue and MDB for that queue.
    this MDB should also listen to the queue in another system that is remote queue.how is this possible.
    because the queue will be in remote system. and MDB will be in my system. the queue to which this MDB should listen will be in specified in deplyment descriptors. then how it will identify that the queue is local or remote.
    Please clarify me as we have a release near.

    Hello Sairam,
    I have used MDB in WebLogic Server. You can add the Destination Queue, Connection factory, etc information in weblogic-ejb-jar.xml.
    I am not sure what is to be used in Oracle Server.
    Simple search in Oracle Website gave me some links..
    http://www.oracle.com/technology/tech/java/oc4j/ejb3/how_to/howtoejb30mdb/doc/how-to-ejb30-mdb.html
    Search the Oracle website for more information.
    Thanks and regards,
    Pazhanikanthan. P

  • MDB registered to to a Queue

    What happens if two different MDBs are listening to a single Queue ?
    More clearly, suppose two MDBs are configured to listen on a single Queue through a listener port, then when a message arrives in the Queue which MDBs onmessage() will be called and on what basis?

    The answer is which ever MDB gets there first. JMS guarantees that your will be processed by only one of them however.
    If you want both MDB's to consume the message use a topic instead of a queue.
    If you want to control which MDB will consume the message use a Message Selector.
    Try posting MDB related questions on the EJB or JMS forums.

  • Thread Count Queue Length in Negative and Too many standby Thread

    We are using Weblogic server 9.2.2 with 1 admin server and 4 managed server . Currently in one of the servers I could observe that there are around 77 standby threads.
    Home > Summary of Servers > server1 > Monitoring > Threads > Self-Tuning Thread Pool
    I could see that the "queue length" is negative (-138) and self tuning standby thread count is 77. Large number of threads STANDBY thread persists during the busy time of the business hours where as other servers are fully utilized.
    Is it normal to have negative queue length and so many STANDBY threads? As for JMS queue negative oracle had already acknowledged that it is a bug. Thanks.
    Edited by: 855849 on May 1, 2011 7:19 AM
    Edited by: SilverHawk on May 12, 2011 8:12 AM

    Yesterday an Oracle Consultant acknowlegded that it is a bug. There was a patch issued for Negative count in the JMS queue count and now this. Thanks for the reply by the way.

  • Re: Pause a MDB?

    Variation of (2): Additionally configure a
              redelivery delay on the destination (via the console or mbeans). This
              reduces spin, but is not viable if the queue sees heavy use (many messages
              per second), or if message order is important.
              Or (3) have MDB "pause" itself using "wait()" or "sleep()". (Just make
              very
              sure that the MDB pool size is smaller than the execute thread pool size,
              or you will run out of threads.)
              Tom
              Bill Nixon wrote:
              > I have an application that consume messages from a JMS queue via a
              > MDB. At certain times, I'd like to be able to pause the MDB or queue,
              > i.e. stop the container from invoking onMessage(). Once some critical
              > processing has completed, I'd like to unpause.
              >
              > Two solutions that we have tossed around are:
              >
              > 1. Undeploy and then redeploy the MDB. (Not very elegant or production
              > ready).
              >
              > 2. In onMessage(), using a Read-Mostly Entity Bean, check for the
              > condition and if "pausing" then don't acknowledge the message, forcing
              > the message to be redelivered. (Bad design that conceptually is a busy
              > wait).
              >
              > Any other options or suggestions?
              >
              > Thanks in advance.
              

              Peter Lee wrote:
              > Have you tried using JMX to call weblogic.management.runtime.
              > JMSDestinationRuntimeMBean.pause()/resume()?
              This prevents sends, not receives, and so doesn't apply here.
              >
              > If you are integrating with foreign JMS providers via the message bridge,
              > you can use weblogic.management.runtime.RuntimeMBean.
              > MessagingBridgeRuntimeMBean.start()/stop(), or you may find that you
              > need to call weblogic.management.configuration.MessagingBridgeMBean.
              > setEnabled(boolean).
              Good point.
              >
              > Srini <[email protected]> wrote:
              >
              >>Hi Tom,
              >>
              >>Do you know if this (Pausing the MDB) is implemented, or not yet? If
              >>it's implemented, can you please indicate the version?
              >>
              >>Anyone else has any better solution apart from introducing a wait or
              >>sleep (assuming that BEA has not implemented this enhancement as yet)?
              >>
              >>
              >>Please help!
              >>Srini
              >
              >
              

  • Urgent - MDB Concurrent Msg Pickup Issue

    hi all
    i am using weblogic 81 sp2 , websphere 5.2 as a foreign server. for Concurrent message processing ,
    my MDB not able to pick up message at right time.
    if client put 25 msg at time in my request queue, my MDB pick-up first 8 msg only at a time,after that MDB waiting for these msg processing.
    after these msg processing then MDB pick up other 8 msg.... so i cant perform well.
    how to make it my MDB pick up all message at a right time.
    and one more thing
    if i declare user defined execute thread and assign my MDB with execute thread (using <dispatch-policy>),i got jms exception.(JMS exception:MQJMS2005: failed to create MQQueueManager for 'localhost:UTSD11')
    (i got BEA-014005 warning)
    is it possible to assign user-define execute thread?
    plz clear my problem
    thanx n advance
    regards
    muruganandam

    Hi,
    Your MDB is processing as many messages at a time it has been configured for. So, you should increase your concurrency level from 8 to whatever level you think is acceptable for your application.
    Hope this helps,
    Arnaud
    www.arjuna.com

  • Strange MDB behaviour:  All MDBs in pool consuming a single message.

    Greetings,
    I'm noticing rather bizzarre behaviour with an MDB. The MDB in question does nothing
    more than consume a message, to a tiny bit of processing, and sends to another JMS
    queue.
    I set the max pool size to 2, initial pool size to 2. I then put a single JMS message
    onto the queue that the MDB is bound to. This is where the problem starts. Both
    MDBs in the pool consume the said message (and I end up with two messages in my outbound
    queue). I have confirmed that indeed only one message is placed on the queue the
    MDBs are bound to. If I set the pool sizes to larger values, all the MDBs in the
    pool still end up consuming that one message.
    Any ideas?
    -Matt.
    P.S. Crossposting to .ejb.ejb20

    I'm not sure what the problem can be, but check that:
    1- you're really using a queue and not a topic.
    2- your transaction didn't roll back. Catch any throwables in onMessage() to
    make sure.
    Does this fix it?
    Emmanuel
    "Matthew" <[email protected]> wrote in message
    news:3cd7fb5c$[email protected]..
    >
    Greetings,
    I'm noticing rather bizzarre behaviour with an MDB. The MDB in questiondoes nothing
    more than consume a message, to a tiny bit of processing, and sends toanother JMS
    queue.
    I set the max pool size to 2, initial pool size to 2. I then put a singleJMS message
    onto the queue that the MDB is bound to. This is where the problemstarts. Both
    MDBs in the pool consume the said message (and I end up with two messagesin my outbound
    queue). I have confirmed that indeed only one message is placed on thequeue the
    MDBs are bound to. If I set the pool sizes to larger values, all the MDBsin the
    pool still end up consuming that one message.
    Any ideas?
    -Matt.
    P.S. Crossposting to .ejb.ejb20

  • Single-instance MDB - jmsra

    Hello,
    I've got the following SAS configuration:
    Sun Java System Application Server Platform Edition 8.1_02 (build b06-fcs).
    It comes with the Sun Java(tm) System Message Queue 3 2005Q1 Sun Microsystems, Inc.; Version: 3.6 SP2-ER Bugs 6256771 - 2005-04-25 (Build 2-A).
    I want to setup the following queues and MDBs.
    Queue-1 consumed by MyFirstMDB.
    Queue-2 consumed by MySecondMDB.
    Both MDBs "use" the same jms/QueueConnectionFactory. I guess this is not the problem.
    The questions I now have are the following:
    Where and how should I specify that only one instance of MyFirstMDB should consume messages from Queue-1 ?
    Where and how should I specify that only one instance of MySecondMDB should consume messages from Queue-2 ?
    Should I specify this in the MDB descriptor in my ejb-jar.xml, or should I put this in the sun-ejb-jar.xml, or still should I configure this somewhere else and if yes where and how ?
    Where and how should I specify that in case of a problem, messages on Queue-1 should be retried 3 times with an interval of 1 hour ?
    Where and how should I specify that in case of a problem, messages on Queue-2 should be retried 10 times with an interval of 2 hour ?
    Should I specify this in the MDB descriptor in my ejb-jar.xml, or should I put this in the sun-ejb-jar.xml, or still should I configure this somewhere else and if yes where and how ?
    Does the fact that the redelivery attempts and redelivery interval differ mean that I need to use two different sessionfactories and that I can't let my MDB share the same ?
    Any help would be appreciated.
    Thanks,
    EDH

    in 11gR2,ASM is part of grid infrastructure so you've to install Grid Infrastructure first on standalone server first.
    http://docs.oracle.com/cd/E11882_01/install.112/e24346/oraclerestart.htm#CIHCBGCC
    http://docs.oracle.com/cd/E18728_01/html/821-2678/gjafo.html
    Single instance Oracle ASM is not supported with Oracle 11g release 2 on Oracle Solaris Clusteri'm not fully sure but i think it should be supported.

  • UCCX Calls Waiting in Queue Customer Request

    Hi. Currently we have a customer with a no so common request. Their supervisors would like to have the ability to see Caller ID for the people waiting in queue. They currently only see the longest call in queue (time) and how many calls in queue (total calls). Also they would like the option to pick any call they want from all calls waiting on queue. At least for the Supervisors. 
    Supervisors are saying that they work on a previous CallCenter environment and they were able to accomplished those 2 request. See Caller ID of the people waiting on queue and also the ability for the supervisor to choose any call they want to from the ones waiting on queue. I don't know if that was a feature out of the box for that particular Call Center environment (Don't know the vendor CC) or if it was a custom job.
    Any ideas? Is it possible on UCCX? 
    -Jose

    Hi,
    can you please tell me the license level of your UCCX? Premium, Enhanced, Standard or IP IVR?
    G.

  • JMS Queue problems causing EJB to rollback....

              We recently purchased WLS 6.1 and we have been using the product for the last few
              months. I am having a problem which I have detailed below. I have provided as much
              information as possible. If you need additional information, please let me know.
              Server A Config:
              Pentium III, 1000Mhz
              Windows 2000, SP2
              WLS WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
              Server B Config:
              SunBlade 100
              Solaris 5.8
              WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
              Server A contains a session EJB called GoalManager. This EJB has a method named cancel().
              The transactional attribute for all methods supported by this bean is REQUIRED. GoalManager
              uses a transactional data source deployed on Server A named "goal". There is nothing
              special about this data source aside from the fact that I have enabled two phase
              commit for it because a previous error was indicating that this was a required setting
              for the pool. A JMS server exists on Server B. A queue named "emailQueue" is set
              up as a destination on this JMS server. I also have a MDB on Server B that listens
              for messages on this queue. When a message is received, the MDB's onMessage() method
              extracts some properties from the message and sends an email to the specified recipient
              in the message. I have confirmed that this queue and MDB are working properly because
              I ran a small test program from the command prompt which creates a message and sends
              it to the queue on Server B. The MDB gets the message and sends the email to the
              correct recipient, so I am sure there are no misconfigurations on the server.
              The problem is as follows: The cancel() method in the GoalManager EJB on Server A
              performs some database work. If no exceptions are raised, the last task in the method
              attempts to access the queue on Server B and send a message to the queue. Here is
              the code that I am using to access the queue:
              QueueConnectionFactory queueFactory = (QueueConnectionFactory)context.lookup( "javax.jms.QueueConnectionFactory");
              QueueConnection queueConnection = queueFactory.createQueueConnection();
              Queue queue = (Queue)context.lookup( "emailQueue");
              QueueSession queueSession = queueConnection.createQueueSession( false, Session.AUTO_ACKNOWLEDGE);
              QueueSender queueSender = queueSession.createSender( queue);
              The cancel() method executes without error, but when the EJB container on Server
              A attempts to commit the transaction at the end of the cancel() method, I am receiving
              the following error on Server A's log:
              <Error> <EJB> <Exception during commit of transaction Name=[EJB com.frx.emp.go.ejb.session.goal.GoalManagerBean.cancelGoal(com.frx.emp.entity.Employee,com.frx.emp.go.entity.Goal)],
              Xid=0:7c2dda32cf39a36e(6911242),
              Status=Rolled back. [Reason=javax.transaction.xa.XAException],
              numRepliesOwedMe=0,
              numRepliesOwedOthers=0,
              seconds since begin=2,
              seconds left=10,
              ServerResourceInfo[weblogic.jdbc.jts.Connection]=(state=rolledback,assigned=server1),
              ServerResourceInfo[JMS_EMailServer_NotDurable]=(state=rolledback,assigned=server1),
              SCInfo[FRX+server1]=(state=rolledback),
              SCInfo[frxnet+wlsvr1]=(state=rolledback),
              properties=({weblogic.transaction.name=[EJB com.frx.emp.go.ejb.session.goal.GoalManagerBean.cancelGoal(com.frx.emp.entity.Employee,com.frx.emp.go.entity.Goal)],
              weblogic.jdbc=t3://172.16.200.9:9005}),
              OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=server1+172.16.200.9:9005+FRX+,
              Resources={})],
              CoordinatorURL=server1+172.16.200.9:9005+FRX+): javax.transaction.xa.XAException
              at weblogic.jms.backend.BEXAResource.prepare(BEXAResource.java:853)
              at weblogic.transaction.internal.ServerResourceInfo.prepare(ServerResourceInfo.java:1124)
              at weblogic.transaction.internal.ServerResourceInfo.prepare(ServerResourceInfo.java:370)
              at weblogic.transaction.internal.ServerSCInfo.startPrepare(ServerSCInfo.java:186)
              at weblogic.transaction.internal.ServerTransactionImpl.localPrepare(ServerTransactionImpl.java:1822)
              at weblogic.transaction.internal.ServerTransactionImpl.globalPrepare(ServerTransactionImpl.java:1607)
              at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:218)
              at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:190)
              at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:231)
              at com.frx.emp.go.ejb.session.goal.GoalManagerBean_e3dvd2_EOImpl.cancelGoal(GoalManagerBean_e3dvd2_EOImpl.java:459)
              at com.frx.emp.go.web.handler.UpdateGoalHandler.handleRequest(UpdateGoalHandler.java:55)
              at com.frx.emp.web.mvc.HandlerMappedController.service(HandlerMappedController.java:115)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
              at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
              at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
              at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
              at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              --------------- nested within: ------------------
              weblogic.transaction.RollbackException: Could not prepare resource 'JMS_EMailServer_NotDurable
              - with nested exception:
              [javax.transaction.xa.XAException]
              at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1475)
              at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:263)
              at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:190)
              at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:231)
              at com.frx.emp.go.ejb.session.goal.GoalManagerBean_e3dvd2_EOImpl.cancelGoal(GoalManagerBean_e3dvd2_EOImpl.java:459)
              at com.frx.emp.go.web.handler.UpdateGoalHandler.handleRequest(UpdateGoalHandler.java:55)
              at com.frx.emp.web.mvc.HandlerMappedController.service(HandlerMappedController.java:115)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
              at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
              at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
              at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
              at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              Just a quick note, I tried to change the following line to specify a "transacted"
              JMS session by passing "true" to the statement below. When I tested this, the cancel()
              method raised no exceptions, but the MDB on Server B is never invoked and the email
              is never sent. Strange.
              QueueSession queueSession = queueConnection.createQueueSession( true, Session.AUTO_ACKNOWLEDGE);
              If you need more info, let me know. I thank you for your help.
              

    Correct. According to the trace you have it set at 10 seconds, while the default is 30 seconds.
              Tom
              SAF wrote:
              > Thanks for the reply.
              >
              > Increase the trx time? You mean JTA, right?
              >
              > I already opened a case with BEA, so I'm waiting to get a response from them.
              >
              > Thanks again,
              >
              > Raffi
              >
              > Tom Barnes <[email protected]> wrote:
              > >Hi,
              > >
              > >I looked at the BEXAResource.java source code which the stack trace points
              > >at. It seems that from the
              > >JMS server's resource manager's point of view, it never heard of the transaction
              > >before, indicating
              > >that the transaction may have already rolled back. I think this could
              > >happen if the transaction
              > >times out before commit() is called, but I'm not sure what is wrong in your
              > >case -- as according
              > >to the trace you provided, your tx is 2 seconds old and your tx-timout is
              > >10 seconds.
              > >
              > >In any case, it looks like the culprit may be in the transaction code and
              > >not the JMS code...
              > >
              > >I suggest:
              > > A) increasing your tx timeout (what the heck give it a try)
              > > B) could it somehow be a clock synchronization problem? are multiple
              > >servers involved?
              > > C) posting to the transaction newsgroup
              > > D) contacting customer support
              > >
              > >Tom
              > >
              > >SAF wrote:
              > >
              > >> We recently purchased WLS 6.1 and we have been using the product for the
              > >last few
              > >> months. I am having a problem which I have detailed below. I have provided
              > >as much
              > >> information as possible. If you need additional information, please let
              > >me know.
              > >>
              > >> Server A Config:
              > >> Pentium III, 1000Mhz
              > >> Windows 2000, SP2
              > >> WLS WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
              > >>
              > >> Server B Config:
              > >> SunBlade 100
              > >> Solaris 5.8
              > >> WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
              > >>
              > >> Server A contains a session EJB called GoalManager. This EJB has a method
              > >named cancel().
              > >> The transactional attribute for all methods supported by this bean is
              > >REQUIRED. GoalManager
              > >> uses a transactional data source deployed on Server A named "goal". There
              > >is nothing
              > >> special about this data source aside from the fact that I have enabled
              > >two phase
              > >> commit for it because a previous error was indicating that this was a
              > >required setting
              > >> for the pool. A JMS server exists on Server B. A queue named "emailQueue"
              > >is set
              > >> up as a destination on this JMS server. I also have a MDB on Server B
              > >that listens
              > >> for messages on this queue. When a message is received, the MDB's onMessage()
              > >method
              > >> extracts some properties from the message and sends an email to the specified
              > >recipient
              > >> in the message. I have confirmed that this queue and MDB are working properly
              > >because
              > >> I ran a small test program from the command prompt which creates a message
              > >and sends
              > >> it to the queue on Server B. The MDB gets the message and sends the email
              > >to the
              > >> correct recipient, so I am sure there are no misconfigurations on the
              > >server.
              > >>
              > >> The problem is as follows: The cancel() method in the GoalManager EJB
              > >on Server A
              > >> performs some database work. If no exceptions are raised, the last task
              > >in the method
              > >> attempts to access the queue on Server B and send a message to the queue.
              > >Here is
              > >> the code that I am using to access the queue:
              > >>
              > >> QueueConnectionFactory queueFactory = (QueueConnectionFactory)context.lookup(
              > >"javax.jms.QueueConnectionFactory");
              > >> QueueConnection queueConnection = queueFactory.createQueueConnection();
              > >> Queue queue = (Queue)context.lookup( "emailQueue");
              > >> QueueSession queueSession = queueConnection.createQueueSession( false,
              > >Session.AUTO_ACKNOWLEDGE);
              > >> QueueSender queueSender = queueSession.createSender( queue);
              > >>
              > >> The cancel() method executes without error, but when the EJB container
              > >on Server
              > >> A attempts to commit the transaction at the end of the cancel() method,
              > >I am receiving
              > >> the following error on Server A's log:
              > >>
              > >> <Error> <EJB> <Exception during commit of transaction Name=[EJB com.frx.emp.go.ejb.session.goal.GoalManagerBean.cancelGoal(com.frx.emp.entity.Employee,com.frx.emp.go.entity.Goal)],
              > >> Xid=0:7c2dda32cf39a36e(6911242),
              > >> Status=Rolled back. [Reason=javax.transaction.xa.XAException],
              > >> numRepliesOwedMe=0,
              > >> numRepliesOwedOthers=0,
              > >> seconds since begin=2,
              > >> seconds left=10,
              > >> ServerResourceInfo[weblogic.jdbc.jts.Connection]=(state=rolledback,assigned=server1),
              > >> ServerResourceInfo[JMS_EMailServer_NotDurable]=(state=rolledback,assigned=server1),
              > >> SCInfo[FRX+server1]=(state=rolledback),
              > >> SCInfo[frxnet+wlsvr1]=(state=rolledback),
              > >> properties=({weblogic.transaction.name=[EJB com.frx.emp.go.ejb.session.goal.GoalManagerBean.cancelGoal(com.frx.emp.entity.Employee,com.frx.emp.go.entity.Goal)],
              > >>
              > >> weblogic.jdbc=t3://172.16.200.9:9005}),
              > >> OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=server1+172.16.200.9:9005+FRX+,
              > >> Resources={})],
              > >> CoordinatorURL=server1+172.16.200.9:9005+FRX+): javax.transaction.xa.XAException
              > >> at weblogic.jms.backend.BEXAResource.prepare(BEXAResource.java:853)
              > >> at weblogic.transaction.internal.ServerResourceInfo.prepare(ServerResourceInfo.java:1124)
              > >> at weblogic.transaction.internal.ServerResourceInfo.prepare(ServerResourceInfo.java:370)
              > >> at weblogic.transaction.internal.ServerSCInfo.startPrepare(ServerSCInfo.java:186)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.localPrepare(ServerTransactionImpl.java:1822)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.globalPrepare(ServerTransactionImpl.java:1607)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:218)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:190)
              > >> at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:231)
              > >> at com.frx.emp.go.ejb.session.goal.GoalManagerBean_e3dvd2_EOImpl.cancelGoal(GoalManagerBean_e3dvd2_EOImpl.java:459)
              > >> at com.frx.emp.go.web.handler.UpdateGoalHandler.handleRequest(UpdateGoalHandler.java:55)
              > >> at com.frx.emp.web.mvc.HandlerMappedController.service(HandlerMappedController.java:115)
              > >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              > >> at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
              > >> at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
              > >> at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
              > >> at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
              > >> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              > >> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              > >> --------------- nested within: ------------------
              > >> weblogic.transaction.RollbackException: Could not prepare resource 'JMS_EMailServer_NotDurable
              > >> - with nested exception:
              > >> [javax.transaction.xa.XAException]
              > >> at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1475)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:263)
              > >> at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:190)
              > >> at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:231)
              > >> at com.frx.emp.go.ejb.session.goal.GoalManagerBean_e3dvd2_EOImpl.cancelGoal(GoalManagerBean_e3dvd2_EOImpl.java:459)
              > >> at com.frx.emp.go.web.handler.UpdateGoalHandler.handleRequest(UpdateGoalHandler.java:55)
              > >> at com.frx.emp.web.mvc.HandlerMappedController.service(HandlerMappedController.java:115)
              > >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              > >> at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)
              > >> at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
              > >> at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2495)
              > >> at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2204)
              > >> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              > >> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              > >>
              > >> Just a quick note, I tried to change the following line to specify a "transacted"
              > >> JMS session by passing "true" to the statement below. When I tested this,
              > >the cancel()
              > >> method raised no exceptions, but the MDB on Server B is never invoked
              > >and the email
              > >> is never sent. Strange.
              > >>
              > >> QueueSession queueSession = queueConnection.createQueueSession( true,
              > >Session.AUTO_ACKNOWLEDGE);
              > >>
              > >> If you need more info, let me know. I thank you for your help.
              > >
              

Maybe you are looking for

  • Fonts not appearing correctly

    Hi. My fonts are defaulting to Arial Bold Italics in Safari and Arial Italics in Mail. Even typing this message they have turned to Arial Bold Italics. A little help will be appreciated Thanks

  • Acrobat 9.0 - how to I keep Sticky Note always maximize

    Acrobat 9.0 How do I keep Sticky Note always maximized. I got one sticky note maximized on open of file but on another file, the sticky note minimized itself. Anyone who can help to keep sticky note always maximized .  Thank you.

  • SDO_Relate problem

    is there anything that i can do to speed up the results of a query such as this one. the civic table contains point data and the parcels2 is polygons. Presently this query takes 23 secs but the amount of pids can be much larger. SELECT /*+ RULE */   

  • Netflix not working with Mavericks, just get a black screen.

    I just recently installed Mavericks, netflix worked fine before the system upgrade.  Any help would be appreciated. I have uninstalled and reinstalled silverlight.  The plug-in is in my harddrive/library/internet plug-in folder.  Safari sees it in th

  • HT5624 apple id password reset but not accepting when sign in

    when came out from flight, switch on my Iphone5, it start asking to "Sign In to FaceTime" with my apple ID password. I did reset the password through mail and start sign in. It is not working. What could be the reason?