How to transaction in the message driven bean?

          hello
          i write a message driven bean,that monitor the weblogic message queue,when a "Order"
          object is witten to the queue,the mdb get it and write it to a entity bean "Orderinfo".all
          of above logic is within the "onMessage" method of the mdb.
          i want to encapsulate the flow in a transaction,see my code snippet of the onMessage
          method:
          ObjectMessage objMsg = (ObjectMessage) msg;
          OrderVO orderVO = (OrderVO) objMsg.getObject();
          System.out.println(orderVO.booklist);
          OrderinfoHome orderinfoHome = (OrderinfoHome) ctx.lookup(
          "java:/comp/env/orderinfo");
          Orderinfo orderinfo = orderinfoHome.create(orderVO.orderID);
          orderinfo.setAddress(orderVO.address);
          orderinfo.setCustname(orderVO.custName);
          orderinfo.setEmail(orderVO.email);
          orderinfo.setBooklist(orderVO.booklist);
          orderinfo.setPrice(new BigDecimal(orderVO.price));
          and deploy descriptor snippet(ejb-jar.xml):
          <assembly-descriptor>
          <container-transaction>
          <method>
          <ejb-name>orderMDB</ejb-name>
          <method-name>*</method-name>
          </method>
          <trans-attribute>Required</trans-attribute>
          </container-transaction>
          </assembly-descriptor>
          i think during this transaction,there are two action:geting the object from the
          queue and saving it to entity bean.in order to test the transaction,i modify the
          jndi name of entity bean in the code to a WRONG one.redeploy my program,and send
          a message to the queue,the mdb is activated,then the exception is thrown because
          of the wrong jndi name.after that,i check the message queue,find that it is empty.why?i
          think if the second action of the transaction is fail,the transaction should roll
          back,the message should be send BACK to the queue.
          i also ty to use the "javax.transaction.UserTransaction" in the onMessage method,but
          the follwing exception is thrown:
          javax.transaction.NotSupportedException: Another transaction is associated with
          this thread.................................
          who can help me,if any wrong with me,and how to use the transaction with the message
          driven bean?
          thank you.
          

The transaction should rollback if the MDB throws an
          exception. Try changing your MDB code to
          call "setRollbackOnly()" on the EJB
          context (instead of throwing an exception) to see
          if that works. If calling "setRollbackOnly()" fixes
          the problem - then please contact customer support
          and report a bug.
          zbcong wrote:
          > hello
          >
          > i write a message driven bean,that monitor the weblogic message queue,when a "Order"
          > object is witten to the queue,the mdb get it and write it to a entity bean "Orderinfo".all
          > of above logic is within the "onMessage" method of the mdb.
          > i want to encapsulate the flow in a transaction,see my code snippet of the onMessage
          > method:
          >
          >
          > ObjectMessage objMsg = (ObjectMessage) msg;
          > OrderVO orderVO = (OrderVO) objMsg.getObject();
          > System.out.println(orderVO.booklist);
          > OrderinfoHome orderinfoHome = (OrderinfoHome) ctx.lookup(
          > "java:/comp/env/orderinfo");
          > Orderinfo orderinfo = orderinfoHome.create(orderVO.orderID);
          > orderinfo.setAddress(orderVO.address);
          > orderinfo.setCustname(orderVO.custName);
          > orderinfo.setEmail(orderVO.email);
          > orderinfo.setBooklist(orderVO.booklist);
          > orderinfo.setPrice(new BigDecimal(orderVO.price));
          >
          >
          > and deploy descriptor snippet(ejb-jar.xml):
          >
          >
          > <assembly-descriptor>
          > ............
          > ...........
          >
          > <container-transaction>
          > <method>
          > <ejb-name>orderMDB</ejb-name>
          > <method-name>*</method-name>
          > </method>
          > <trans-attribute>Required</trans-attribute>
          > </container-transaction>
          > </assembly-descriptor>
          >
          >
          > i think during this transaction,there are two action:geting the object from the
          > queue and saving it to entity bean.in order to test the transaction,i modify the
          > jndi name of entity bean in the code to a WRONG one.redeploy my program,and send
          > a message to the queue,the mdb is activated,then the exception is thrown because
          > of the wrong jndi name.after that,i check the message queue,find that it is empty.why?i
          > think if the second action of the transaction is fail,the transaction should roll
          > back,the message should be send BACK to the queue.
          >
          > i also ty to use the "javax.transaction.UserTransaction" in the onMessage method,but
          > the follwing exception is thrown:
          >
          > javax.transaction.NotSupportedException: Another transaction is associated with
          > this thread.................................
          >
          > who can help me,if any wrong with me,and how to use the transaction with the message
          > driven bean?
          >
          > thank you.
          >
          >
          

Similar Messages

  • Transactional onMessage without message driven beans

    Hi.
    Imagine a system that does not use message driven beans, but instead a non-EJB MessageListener that invokes some SessionBean method in its onMessage(), as described for example in "http://www.theserverside.com/resources/article.jsp?l=Bringing-Together-Application-Servers-and-JMS-Messaging".
    Is it possible to execute the MessageListener.onMessage() and the SessionBean.someMethod() in the same transaction, in such a way that the message is not being removed from the queue if processing in the EJB fails? With JMS methods, given the JMS provider is JTA - capable?
    Products would be WebSphere 4.0.1 an MQSeries.
    Any hints would be appreciated,
    thanks,
    Lutz

    Yes, If the Jms Provider is JTA capable then the OnMessage method can be made transactional.
    Go thru XA package of jms specification.
    -Ashish

  • Can you set isolation levels of message-driven bean transactions?

    The problem: I have 3 different message-driven beans which each get a different type of message, except for a field that is common to all. That field is used as the primary key of an entity object. The message-driven beans configured to use a container managed transaction. Each message-driven bean, in processing the message, first does a lookup by primary key to see if the object associated with the key exists, and if it does not, it requests the entity's home object to create it. After that, they do further processing. The problem is that sometimes all the beans simultaneously get a message, resulting in each bean checking for the entity object at about the same time, and if they fail to find it (because none of them has created it yet), each creates an object, all with the same primary key. This is not caught until the beans start to complete their onMessage method, which I believe results in the container committing the transaction. One of the transactions will be committed successfully, while the other two will fail, get rolled back, and then be retried with the same message. The second time through, the other beans will find the entity object (since it has been created and committed) and they will complete correctly. In the end, they right thing occurs, except that there is a troubling exception or 2 in the log telling about the constraint violation (with the primary key) and the rollback. If it was just me, that would be fine, but our customer does not like to see exceptions in the log; that indicates to him that something is wrong.
    So, I am looking for someway to make sure that the actions of the message-driven beans are serialized. One suggestion from a colleague was to set the isolation level of the transactions being used by the container in processing the message-driven beans' onMessage method. However, the documentation does not mention any way to do this for a message-driven bean. Suggestions?
    Is the use of a UserTransaction a better way to do this? If I acquire a UserTransaction within the onMessage method of a message-driven bean, can I set its isolation level? How would this work? When I get a UserTransaction, does each client get a different transaction, or do they all get the same one?

    (1) The WebLogic JMS "unit-of-order" feature is a heavily adopted feature that was specifically designed to handle similar use cases - see the JMS developer guide for extensive documentation. In your use case, if "key" is used to define UOO, then there's no limit on the number of keys that can be processed concurrently, but messages for any particular key will be processed single-threaded in the order in which they were first submitted.
    Note that if you're using distributed destinations, the UOO feature is still fully supported - but the developer and/or administrator needs to decide whether to configure the destination to use "hash" or "path service" based routing (the JMS UOO edoc outlines the trade-offs).
    (2) Another alternative is to use a single MDB with max-beans-free-pool that processes all three types (as the other poster suggested). I think this assumes all MDBs run on the same JVM.
    (3) Another alternative is to use multiple queues, with a single MDB on each Q. Where some sort of hash algorithm is used to determine which Q is for the key. This approach is a "hand-coded" variant of the approach in (1) with "hash" based routing enabled...
    (4) If all MDBs actually do run in the same JVM, a third alternative is to use code the application to use a common lock to protect each key, eg, something like:
    // assume MyLock is simply a class with a "reference counter"
    // assume some global "staticHM" hash map that is all MDBs can access
    onMessage() {
    MyLock lock = null;
    key= msg.getKey();
    synchronized(staticHM) {
    lock = staticHM.get();
    if (lock = null) {
    lock = new lock();
    staticHM.put(key, new lock());
    lock.incRefCount();
    try {
    synchronized(lock) {
    // only one onMessage will be able to lock a particular key at a time
    do your work;
    } finally {
    synchronized(staticHT) {
    if (lock.defRefCount() == 0) staticHM.remove(lock);
    if (lock = null) staticHM.put(key);
    If multiple threads get a message with the same key, then only one thread at a time will work on the key.
    Hope this helps,
    Tom

  • Measuring throughput of message driven bean

    Hi,
    I am trying to do some performance testing. I will be send millions of messages
    to a JMS server. These will be consumed by message driven beans (some appropriate
    number created at start up and kept in cache).
    The message driven bean performs uses some local entity bean to perform some database
    transaction.
    I want to measure how many messages did each of the instance of bean process?
    How much total time did each of message bean spend for their share of messages
    and average time for consumption of a message in a bean (which is actually dividing
    the total time for consumption of messages for a message bean dividing by total
    number of messages (assuming that bean pick up message instantaneously).
    Any idea if I could do that through weblogic console (I am using WL 6.1). Or by
    using MBeans??
    Any other idea will be useful.
    Thanks
    Mohit

    Mohit,
    Wily makes a tool tailored for doing the kind of performance evaluation you're
    talking about. How useful it will be to your specific situation depends a lot
    on some details that aren't in this post. Introscope (our tool) isn't designed
    to crack apart individual instances of your message beans, but it is designed
    to give you an idea of throughput per-component; exactly the kind of eval it looks
    like you have in mind.
    Roughly speaking... you can put rate and timer "tracers" on top of the relevant
    methods in your bean's class. There are also increment and decrement tracers,
    so you could match up send/receives between the components of your JMS app. This
    will work across JVMs. There is (of course) some overhead for the monitoring,
    but you could easily cancel out that number by doing a before and after and subtracting
    our overhead-- you will be probably be impressed with how small it really it.
    How many JVM instances are involved in your load test? How many different bean
    classes? Are you using strictly the standard JMS API calls, or do you want to
    monitor thing beyond that?
    Drop me an e-mail if you're interested and we can talk about getting you set up
    to try it out.
    Dave Martin
    [email protected]
    Wily Technology, Inc.
    (http://www.wilytech.com)
    "Mohit Sehgal" <[email protected]> wrote:
    >
    Hi,
    I am trying to do some performance testing. I will be send millions of
    messages
    to a JMS server. These will be consumed by message driven beans (some
    appropriate
    number created at start up and kept in cache).
    The message driven bean performs uses some local entity bean to perform
    some database
    transaction.
    I want to measure how many messages did each of the instance of bean
    process?
    How much total time did each of message bean spend for their share of
    messages
    and average time for consumption of a message in a bean (which is actually
    dividing
    the total time for consumption of messages for a message bean dividing
    by total
    number of messages (assuming that bean pick up message instantaneously).
    Any idea if I could do that through weblogic console (I am using WL 6.1).
    Or by
    using MBeans??
    Any other idea will be useful.
    Thanks
    Mohit

  • WebLogic 10 and EJB 3.0 for Message Driven Bean

    Hi,
    I am trying to deploy Message Driven Bean using EJB3.0 on weblogic 10. I am using annotations and don't want to use deployment descriptors.
    The Bean class:
    CalculatorBean.java
    import javax.ejb.*;
    import javax.jms.*;
    import java.sql.Timestamp;
    import java.util.StringTokenizer;
    @MessageDriven(activationConfig =
    @ActivationConfigProperty(propertyName="destinationType",
    propertyValue="javax.jms.Queue"),
    @ActivationConfigProperty(propertyName="destination",
    propertyValue="queue/mdb")
    public class CalculatorBean implements MessageListener {
    public void onMessage (Message msg) {
    TextMessage tmsg=null;
    try {
    if (msg instanceof TextMessage) {
    tmsg = (TextMessage) msg;
    System.out.println
    ("MESSAGE BEAN1: Message received: "
    + tmsg.getText());
    } else {
    System.out.println
    ("Message of wrong type1: "
    + msg.getClass().getName());
    catch (JMSException e) {
    e.printStackTrace();
    catch (Throwable te) {
    te.printStackTrace();
    My client:
    import javax.naming.*;
    import javax.naming.InitialContext;
    import java.text.*;
    import javax.jms.*;
    public class MsgClient {
    public static void main(String args[])
    QueueConnection cnn=null;
    QueueSender sender=null;
    QueueSession sess=null;
    Queue queue=null;
    try {
    java.util.Properties p = new java.util.Properties();
    p.put("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");
    p.put("java.naming.provider.url","t3://10.6.74.79:7001");
    Context ctx=new InitialContext(p);
    //InitialContext ctx=new InitialContext(p);
    queue = (Queue)ctx.lookup("queue/mdb");
    QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
    cnn = factory.createQueueConnection();
    sess= cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
    sender = sess.createSender(queue);
    TextMessage message = sess.createTextMessage();
    message.setText("This is message by Gurumurthy" );
    System.out.println("Sending message: " +message.getText());
    sender.send(message);
    sess.close();
    catch (Exception e)
    e.printStackTrace();
    I am compiling and creating jar file for this class. Then I am creating a .ear file for this.
    The meta-inf/application.xml contains the following:
    <?xml version="1.0" encoding="UTF-8"?>
    <application xmlns="http://java.sun.com/xml/ns/j2ee" version="1.4"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com /xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
    <display-name>MDBWorking1</display-name>
    <description>Application description</description>
    <module>
    <ejb>MDBWorking1.jar</ejb>
    </module>
    </application>
    I don't want to use deployment descriptor (ejb-jar.xml or weblogic-ejb-jar-xml), because I want to utilize the annotation feature of EJB3.0
    So, after creating the .ear file for this, and try to deploy on weblogic 10, I get the following error:
    An error occurred during activation of changes, please see the log for details.
    Exception preparing module: EJBModule(MDBWorking1.jar) Unable to deploy EJB: CalculatorBean from MDBWorking1.jar: [EJB:011113]Error: The Message Driven Bean 'CalculatorBean(Application: MDBWorking1, EJBComponent: MDBWorking1.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.
    Substituted for missing class [EJB - 11113]Error: The Message Driven Bean 'CalculatorBean(Application: MDBWorking1, EJBComponent: MDBWorking1.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.
    How to solve this?
    Note:
    I don't want to use Deployment Descriptor and all I want to use is EJB3.0's annotation feature.
    Thanks,
    Guru

    Dear gurubbc,
    I don't know if it still matters to you but you can use the javax.ejb.MessageDriven annotation to point your bean on your queue. I had the same issue like you but i could not solve it properly by switchihg to weblogic.ejb.MessageDriven.
    Use the following annotation and it should work out:
    @MessageDriven
    (mappedName = "queue/mdb",
    name = "CalculatorBean",
    activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    Here you can see that the mappedName is the JNDI name of the queue you are trying to connect to. The name is the name for your Bean, and the only property passed is the destination type.
    Hope this helps.
    Cheers,
    Istvan

  • Deployment of Message Driven Bean fails

    Hi guys,
    i use MQSeries as JMS Provider.
    The Application (ear) has the following structure :
    MDBApp.ear
    contains
      mqseries1.jar ,mqseries2.jar, mqseries3.jar , .. ( In the previous Version of NetWeaver is used a deployable                                                           Server library and referenced it from the jms-factories.xml )
      mdb.jar  (contains the Message Driven Bean)
    Note : 
    the jms-resources.xml has the following content :
    <?xml version="1.0" encoding="UTF-8"?>
    <jms-resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="jms-resources.xsd">
         <connection-factory>
              <name>TestFactory</name>
              <object-factory-type>
                   <object-factory-name>com.ibm.mq.jms.MQXAQueueConnectionFactoryFactory</object-factory-name>
                   <class-name>com.ibm.mq.jms.MQXAQueueConnectionFactory</class-name>
                   <property>
                        <config-property-name>HOST</config-property-name>
                        <config-property-value>anIPAdress</config-property-value>
                   </property>
                   <property>
                        <config-property-name>QMGR</config-property-name>
                        <config-property-value>aQueueManagerID</config-property-value>
                   </property>
                   <property>
                        <config-property-name>PORT</config-property-name>
                        <config-property-value>aPort</config-property-value>
                   </property>
                   <property>
                        <config-property-name>TRAN</config-property-name>
                        <config-property-value>1</config-property-value>
                   </property>
              </object-factory-type>
         </connection-factory>
         <destination>
              <name>RA.IBMSOLLIST.ASSOLLIST.001</name>
              <type>javax.jms.Queue</type>
              <external-destination-type>
                   <link-connection-factory>TestFactory</link-connection-factory>
              </external-destination-type>
         </destination>
    </jms-resources>
    The Message Driven Bean code :
    @MessageDriven(activationConfig = {
              @ActivationConfigProperty(propertyName = "destinationType",
              propertyValue = "javax.jms.Queue"),
              @ActivationConfigProperty(propertyName = "destination",
              propertyValue = "RA.IBMSOLLIST.ASSOLLIST.001"),
              @ActivationConfigProperty(propertyName =
              "connectionFactoryName", propertyValue = "TestFactory")
    public class VMRaTestMessageDBean implements MessageListener {
         /* (non-Javadoc)
    @see javax.jms.MessageListener#onMessage(javax.jms.Message)
         public void onMessage(Message arg0) {
              // TODO Auto-generated method stub
    The SDM gets following warning/error :
         Description:
              1. Exception has been returned while the 'vmtubes.de/ratestmdb~ear' was starting. Warning/Exception :
    [ERROR CODE DPL.DS.6193] Error while ; nested exception is:
         com.sap.engine.services.deploy.exceptions.ServerDeploymentException: [ERROR CODE DPL.DS.5030] Clusterwide exception: server ID 2198950:com.sap.engine.services.deploy.container.DeploymentException: Cannot activate endpoint for message-driven bean vmtubes.de/ratestmdbear*annotation|vmtubes.deratestmdb~ejb.jar*annotation|VMRaTestMessageDBean
         at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:893)
         at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
         at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
         at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
         at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
         at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
         at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
         at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
         at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
         at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
         at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
         at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
         at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
         at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
         at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
         at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
         at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
         at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
         at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
         at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
         at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
         at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
         at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
         at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
         at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
         at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
         at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
         at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
         at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
         at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
    Caused by: com.sap.engine.services.ejb3.container.ActionException: Cannot activate endpoint for message-driven bean vmtubes.de/ratestmdbear*annotation|vmtubes.deratestmdb~ejb.jar*annotation|VMRaTestMessageDBean
         at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:94)
         at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
         at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
         at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
         ... 34 more
    Caused by: javax.resource.NotSupportedException: javax.resource.spi.UnavailableException: The destination RA.IBMSOLLIST.ASSOLLIST.001 cannot be looked up. Last attempt performed : jms_vendor_queues_global/RA.IBMSOLLIST.ASSOLLIST.001
         at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:113)
         at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
         at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
         at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
         at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
         at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
         ... 37 more
    Caused by: javax.resource.spi.UnavailableException: The destination RA.IBMSOLLIST.ASSOLLIST.001 cannot be looked up. Last attempt performed : jms_vendor_queues_global/RA.IBMSOLLIST.ASSOLLIST.001
         at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:345)
         at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:121)
         at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
         ... 42 more
    Caused by: com.sap.engine.services.jndi.persistent.exceptions.NameNotFoundException: Object not found in lookup of RA.IBMSOLLIST.ASSOLLIST.001.
         at com.sap.engine.services.jndi.implserver.ServerContextImpl.lookup(ServerContextImpl.java:584)
         at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:343)
         at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:637)
         at javax.naming.InitialContext.lookup(InitialContext.java:351)
         at javax.naming.InitialContext.lookup(InitialContext.java:351)
         at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:343)
         ... 44 more
    I use NetWeaver CE 7.1 SP05 .
    Locke

    Hi Vladimir,
    i can't find the string "JMS Connector Container Application: vmtubes.de/ratestmdb~ear destination name: RA.IBMSOLLIST.ASSOLLIST.001" in the traces.
    These are all the logentries while the deployment (read the entries from top to buttom):
    Starting activation of JMS resource adapter endpoint factory. ActivationSpec is :  applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
    Performing JNDI lookup for obtaining connectionFactory : jms_vendor_factory_local/vmtubes.de/ratestmdb~ear/Testfactory
    First attempt for lookup failed. That could happen for 6.40 applpication without application name. We will continute with the fallback chain. The JNDI lookup is : jms_vendor_factory_local/vmtubes.de/ratestmdb~ear/Testfactory
    Performing JNDI lookup for obtaining connectionFactory : jms_vendor_factory_global/Testfactory
    Attempt for lookup without application name failed. An attempt will be performed to use the default connectionFactory instead of the one supplied during deployment. The JNDI name is : jms_vendor_factory_global/Testfactory
    Performing JNDI lookup for obtaining connectionFactory : jmsfactory/default/XAQueueConnectionFactory
    JMS connection created:
    ================================== Connection ==================================
    ID                            9444418335539219                                 
    Type                          (Generic)Connection                              
    Mode                          STOPPED                                          
    isClosed                      NO                                               
    client = null
    server = com.sap.jms.server.remote.JMSRemoteServerImpl5ec877
    packetFactory = com.sap.jms.protocol.PacketFactoryImpl12e8d47
    thread pool = null
    isClosed = false
    runFlag  = true
    isRunning = true
    ConnectionMetaData -
    JMSVersion                    1.1                                              
    PorviderVersion               Version 1.0                                      
    SupportedJMSXProperties       JMSXGroupID, JMSXGroupSeq                        
    ================================================================================
    com.sap.jms.client.connection.RemoteQueueConnection13d601c isUsed = false
    Attempt for lookup without application name failed. An attempt will be performed to use the default connectionFactory instead of the one supplied during deployment. The JNDI name is : jms_vendor_factory_global/Testfactory
    Attempt for lookup of destination failed. That could happen for 6.40 applications without application name.An attempt will be performed without the application name. The JNDI name is : jms_vendor_queues_local/vmtubes.de/ratestmdb~ear/RA.IBMSOLLIST.ASSOLLIST.001
    java.lang.ClassCastException: class javax.naming.Reference:null incompatible with interface javax.jms.Destination:library:jmscom.sap.engine.boot.loader.ResourceMultiParentClassLoader389922alive
    at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:320)
    at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:121)
    at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
    at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
    at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
    at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
    at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
    at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
    at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
    at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
    at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
    at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
    at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
    at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
    at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
    at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
    at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
    at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
    at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
    at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
    at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
    at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
    at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
    at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
    at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
    at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
    at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
    at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
    Connection, destination and serverSession pool have been initialized correctly. Delivery of JMS messages will be started.Connection = ================================== Connection ==================================
    ID                            9444418335539219                                 
    Type                          (Generic)Connection                              
    Mode                          STOPPED                                          
    isClosed                      NO                                               
    ExceptionListener             com.sap.jms.resourceadapter.RaActivation1fe79   
    client = com.sap.jms.server.remote.JMSRemoteClientImpl857822
    server = RMI_P4: Local Dynamic Stub for impl -> com.sap.jms.server.remote.JMSRemoteServerImpl18f254f
    P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo100
       |-           broker id : -752547698
       |-           server id : 2198950
       |-           client Id : -1
       |-            local Id : 2198950
       |-     is redirectable : false
       |-         redir Ident :
       |-        factory Name : null
       |-               objId : null
       |-  server loader name : null
       |-           connected : false
       |- supportOptimization : true
       |-            protocol :  76 31                                             v1
            Remote Interfaces :
       Interface : [0] = com.sap.jms.server.remote.JMSRemoteServer
       Interface : [1] = com.sap.engine.services.rmi_p4.interfaces.P4Notification
    =========================================
           Connection profiles :
       connection profile : [0] = None:195.233.66.25:50004
    =========================================
    packetFactory = com.sap.jms.protocol.PacketFactoryImple9cc66
    thread pool = com.sap.engine.core.service630.context.core.thread.ThreadSystemImpl1b57cfa
    isClosed = false
    runFlag  = true
    isRunning = true
    ConnectionMetaData -
    JMSVersion                    1.1                                              
    PorviderVersion               Version 1.0                                      
    SupportedJMSXProperties       JMSXGroupID, JMSXGroupSeq                        
    ================================================================================
    com.sap.jms.client.connection.RemoteQueueConnection16a7da2 isUsed = true, destination = queue:///RA.IBMSOLLIST.ASSOLLIST.001, pool = com.sap.jms.resourceadapter.RaServerSessionPool5e2ae5, activation spec =  applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
    JMS session created:
    =================================== Session ====================================
    ID:                           17                                               
    Type:                         (Generic)Session                                 
    ConnectionID:                 9444418335539219                                 
    AcknowledgeMode:              Transacted session!                              
    ================================================================================
    ActivationSpec could not be deployed/started due to internal problem, clean up will be performed, the activation spec was  applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
    javax.resource.spi.UnavailableException: javax.jms.InvalidDestinationException: Illegal destination!
    at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:136)
    at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
    at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
    at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
    at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
    at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
    at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
    at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
    at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
    at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
    at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
    at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
    at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
    at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
    at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
    at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
    at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
    at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
    at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
    at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
    at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
    at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
    at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
    at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
    at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
    at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
    at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
    at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
    at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
    at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
    at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
    Caused by: javax.jms.InvalidDestinationException: Illegal destination!
    at com.sap.jms.client.session.Session.createConsumer(Session.java:1807)
    at com.sap.jms.client.session.Session.createConsumer(Session.java:1795)
    at com.sap.jms.client.connection.ConnectionConsumer.<init>(ConnectionConsumer.java:124)
    at com.sap.jms.client.connection.Connection.createConnectionConsumer(Connection.java:167)
    at com.sap.jms.resourceadapter.RaActivation.setUpConnectionConsumer(RaActivation.java:165)
    at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:128)
    ... 43 more
    An attempt to stop message delivery will be performed. Activation request was  applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
    JMS session closed:
    =================================== Session ====================================
    ID:                           17                                               
    Type:                         (Generic)Session                                 
    ConnectionID:                 9444418335539219                                 
    AcknowledgeMode:              Transacted session!                              
    ================================================================================
    Connection context doesn't exists ! id = 
    Removing unreferenced connection ID =
    Connection context doesn't exists ! id = 
    Connection closed:
    ================================== Connection ==================================
    ID                            9444418335539219                                 
    Type                          (Generic)Connection                              
    Mode                          STOPPED                                          
    isClosed                      YES                                              
    client = com.sap.jms.server.remote.JMSRemoteClientImpl857822
    server = RMI_P4: Local Dynamic Stub for impl -> com.sap.jms.server.remote.JMSRemoteServerImpl18f254f
    P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo100
       |-           broker id : -752547698
       |-           server id : 2198950
       |-           client Id : -1
       |-            local Id : 2198950
       |-     is redirectable : false
       |-         redir Ident :
       |-        factory Name : null
       |-               objId : null
       |-  server loader name : null
       |-           connected : false
       |- supportOptimization : true
       |-            protocol :  76 31                                             v1
            Remote Interfaces :
       Interface : [0] = com.sap.jms.server.remote.JMSRemoteServer
       Interface : [1] = com.sap.engine.services.rmi_p4.interfaces.P4Notification
    =========================================
           Connection profiles :
       connection profile : [0] = None:195.233.66.25:50004
    =========================================
    packetFactory = com.sap.jms.protocol.PacketFactoryImple9cc66
    thread pool = com.sap.engine.core.service630.context.core.thread.ThreadSystemImpl1b57cfa
    isClosed = true
    runFlag  = false
    isRunning = true
    ConnectionMetaData -
    JMSVersion                    1.1                                              
    PorviderVersion               Version 1.0                                      
    SupportedJMSXProperties       JMSXGroupID, JMSXGroupSeq                        
    ================================================================================
    com.sap.jms.client.connection.RemoteQueueConnection16a7da2 isUsed = true
    Here the Telnet output :
    >lookup jms_vendor_queues_local/vmtubes.de/ratestmdb~ear/RA.IBMSOLLIST.ASSOLLIST.001
    Trying to connect...
    Connected.
    [Shell -> LOOKUP] Location : /jms_vendor_queues_local/vmtubes.de/ratestmdb~ear
    /RA.IBMSOLLIST.ASSOLLIST.001
    [Shell -> LOOKUP] Contains : Reference Class Name: com.ibm.mq.jms.MQQueue
    Type: VER
    Content: 1
    Type: EXP
    Content: -2
    Type: PRI
    Content: -2
    Type: PER
    Content: -2
    Type: CCS
    Content: 1208
    Type: TC
    Content: 0
    Type: ENC
    Content: 273
    Type: FIQ
    Content: 1
    Type: QU
    Content: RA.IBMSOLLIST.ASSOLLIST.001
    Type: QMGR
    Content:
    [Shell -> LOOKUP] Class name : javax.naming.Reference
    >llr -all -f com/ibm/mq/jms/MQQueue.class
    jar:file:/C:/usr/sap/J2E/J00/j2ee/cluster/bin/ext/MQSLibrary/com.ibm.mq.jms.jar!
    /com/ibm/mq/jms/MQQueue.class
    jar:file:/C:/usr/sap/J2E/J00/j2ee/cluster/apps/vmtubes.de/mq%7Ebase%7Eserver%7El
    ib/app_libraries_container/com.ibm.mq.jms.jar!/com/ibm/mq/jms/MQQueue.class
    Locke

  • A Question About Message Driven Bean Exception Handling

    "Your onMessage method should handle all exceptions. It must not throw checked exceptions, and throwing a RuntimeException is considered a programming error."
    The above sentence is from the JMS documentation.
    I will use a message driven bean for guarenteeing to send an email with some critical info in case of an unexpected system failure. Say I was not able to save into db some critical info, therefore I want to send that info to myself with a mail to be able to handle that situation manually. Now in case of failure I will send a message to a queue which contains the critical info, and a message driven bean will listen for the message and send email to me. But what if the message driven bean fails ? If I am to handle any exceptions on my onMessage method, how will the messaging system be able to redeliver that message ? It seems to me the message will not remain in the queue anymore(I have consumed it) ?
    Any help appreciated, thanks in advance.

    Fatih.Karakoc wrote:
    "Your onMessage method should handle all exceptions. It must not throw checked exceptions, and throwing a RuntimeException is considered a programming error."
    The above sentence is from the JMS documentation.
    I will use a message driven bean for guarenteeing to send an email with some critical info in case of an unexpected system failure. Say I was not able to save into db some critical info, therefore I want to send that info to myself with a mail to be able to handle that situation manually. Now in case of failure I will send a message to a queue which contains the critical info, and a message driven bean will listen for the message and send email to me. But what if the message driven bean fails ? If I am to handle any exceptions on my onMessage method, how will the messaging system be able to redeliver that message ? It seems to me the message will not remain in the queue anymore(I have consumed it) ?
    You can configure your queue to guarantee delivery. If you use JTA you can also make it transational, so the message is put back on the queue in the event of failure. Your configuration should also include max retries and a failure queue to make sure you don't get stuck in an infinite loop where a message can never be processed.
    Which app server are you using? WebLogic makes it pretty easy to set these config parameters.
    %

  • Message-driven bean questions

    Hello,
    i'm an Italian student trying to develop java applications in NetBeans IDE 6.1 with GlassFish V2, using Java EE 5; since I only recently approached java web programming, I have encountered some problems in using enterprise beans, especially message-driven ones: to get in touch with the stuff, I have created an enterprise application project in NetBeans with a plain message-driven bean and a servlet who sends a message to this bean, following an online netbeans tutorial.
    I'm using annotations to refer the resource in the servlet (the jms name I assigned the bean is "TestBean"):
    @Resource(mappedName="jms/TestBeanFactory")
    private ConnectionFactory connectionFactory;
    @Resource(mappedName="jms/TestBean")
    private Queue queue;I send the message by creating a connection, producing the message with a MessageProducer object, and sending it:
    Connection connection = connectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer messageProducer = session.createProducer(queue);
    TextMessage message = session.createTextMessage("This is a message.");
    messageProducer.send(message);
    messageProducer.close();
    connection.close();In the message-driven bean, I have my onMessage() method catching the message and writing to the system.out his text content:
    public void onMessage(Message message)
            TextMessage msg = null;
            try
                if (message instanceof TextMessage)
                    msg = (TextMessage) message;
                    String x = msg.getText();
                    System.out.println(x);
            catch (Exception e)
                e.printStackTrace();
                m_ctx.setRollbackOnly();
            catch (Throwable te)
                te.printStackTrace();
        }The message is sent and received, and the content printed. Ok, here are my questions:
    1) in the output window of netbeans I see the output but also an exception: "DirectConsumer:Caught Exception delivering messagecom.sun.messaging.jmq.io.Packet cannot be cast to com.sun.messaging.jms.ra.DirectPacket". What does that mean?
    2) I can't figure out how to make the bean answer this message to the servlet...and of course the servlet receive this response: in plain words, I would like to send back another message from the bean to the servlet, and process it. Can someone explain me how to do that?
    Thanks?

    1) in the output window of netbeans I see the output but also an exception: "DirectConsumer:Caught Exception delivering messagecom.sun.messaging.jmq.io.Packet cannot be cast to com.sun.messaging.jms.ra.DirectPacket". What does that mean?casting issue, but i don't know why.
    2) I can't figure out how to make the bean answer this message to the servlet...and of course the servlet receive this response: in plain words, I would like to send back another message from the bean to the servlet, and process it. Can someone explain me how to do that?a message driven bean cannot sent a response back. MDB is asynchronous. if you need to send a response back, you
    shouldn't be using an MDB. In that case, it sounds like you want a synchronous response. let a SLSB do it.
    %

  • My problem in Weblogic and Message Driven Bean for Topic

    Hello to all
    I used this page (http://www.ecomputercoach.com/index.php/component/content/article/90-weblogic-jms-queue-setup.html?showall=1)
    for setup JMS Server, Queue, Connection Factory on Weblogic Server
    and I created a Message Driven Bean ,I used those Queue , and all things was OK
    But I wanted to setup a Topic and use it in this manner
    I created a Topic like previous steps for setup Queue
    (http://www.ecomputercoach.com/index.php/component/content/article/90-weblogic-jms-queue-setup.html?showall=1)
    Except in Step 3  ,I selected Topic instead of Queue
    then I created a Message Driven Bean in JDeveloper , my Message Driven Bean is like this:
    @MessageDriven(mappedName = "jndi.testTopic")
    <p>
    public class aliJMS1_MessageDrivenEJBBean implements MessageListener {
        public void onMessage(Message message) {
          if(message instanceof TextMessage ){
            TextMessage txtM=(TextMessage) message;
            try{
              System.out.println(txtM.getText());
            }catch(Exception ex){
              ex.printStackTrace();
    </p>
    When I deploy the Application , Weblogic shows me this error:
    +<Aug 30, 2011 11:32:28 AM PDT> <Warning> <EJB> <BEA-010061> <The Message-Driven EJB: aliJMS1_MessageDrivenEJBBean is unable to connect to th+
    e JMS destination: jndi.testTopic. The Error was:
    +[EJB:011011]The Message-Driven EJB attempted to connect to the JMS destination with the JNDI name: jndi.testTopic. However, the object with+
    the JNDI name: jndi.testTopic is not a JMS destination, or the destination found was of the wrong type (Topic or Queue).>
    And when I send message to the topic The Message Dirven Bean dosen't work
    But when I create an ordinary Java application like this (it uses that Tpoic) :
    import java.io.*;
    import java.util.*;
    import javax.transaction.*;
    import javax.naming.*;
    import javax.jms.*;
    public class TopicReceive implements MessageListener
        public final static String JNDI_FACTORY =
            "weblogic.jndi.WLInitialContextFactory";
        public final static String JMS_FACTORY =
            "jndi.testConnectionFactory";
        public final static String TOPIC = "jndi.testTopic";
        private TopicConnectionFactory tconFactory;
        private TopicConnection tcon;
        private TopicSession tsession;
        private TopicSubscriber tsubscriber;
        private Topic topic;
        private boolean quit = false;
        public void onMessage(Message msg) {
            try {
                String msgText;
                if (msg instanceof TextMessage) {
                    msgText = ((TextMessage)msg).getText();
                } else {
                    msgText = msg.toString();
                System.out.println("JMS Message Received: " + msgText);
                if (msgText.equalsIgnoreCase("quit")) {
                    synchronized (this) {
                        quit = true;
                        this.notifyAll(); 
            } catch (JMSException jmse) {
                jmse.printStackTrace();
        public void init(Context ctx, String topicName) throws NamingException,
                                                               JMSException {
            tconFactory = (TopicConnectionFactory)ctx.lookup(JMS_FACTORY);
            tcon = tconFactory.createTopicConnection();
            tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            topic = (Topic)ctx.lookup(topicName);
            tsubscriber = tsession.createSubscriber(topic);
            tsubscriber.setMessageListener(this);
            tcon.start();
        public void close() throws JMSException {
            tsubscriber.close();
            tsession.close();
            tcon.close();
        public static void main(String[] args) throws Exception {
            InitialContext ic = getInitialContext("t3://127.0.0.1:7001");
            TopicReceive tr = new TopicReceive();
            tr.init(ic, TOPIC);
            System.out.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");        
            synchronized (tr) {
                while (!tr.quit) {
                    try {
                        tr.wait();
                    } catch (InterruptedException ie) {
            tr.close();
        private static InitialContext getInitialContext(String url) throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, url);
            env.put("weblogic.jndi.createIntermediateContexts", "true");
            return new InitialContext(env);
    It's OK and shows messages When I send message to the Topic
    Now I want know why the Message Driven Bean doesn't work for those Topic
    I want create a Message Driven Bean for Topic in the same way I created for Queue
    I don't know what is problem , please advice me
    Thanks

    Could you try adding a activationconfig to the message-driven bean, for example,
    @MessageDriven(mappedName = "jndi.testTopic", activationConfig = {
            @ActivationConfigProperty(propertyName = "destinationName", propertyValue = "jndi.testTopic"),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic")
    public class aliJMS1_MessageDrivenEJBBean implements MessageListener {
        public void onMessage(Message message) {
          if(message instanceof TextMessage ){
            TextMessage txtM=(TextMessage) message;
            try{
              System.out.println(txtM.getText());
            }catch(Exception ex){
              ex.printStackTrace();
    }

  • Jndi-name in  Message Driven Bean

    Hi
    I have successfully created the ejb jar file for deployment using sun one studio . I created the message driven bean and I right clicked on the ejb and used the customize option to set the bean properties . But my problem is that the jndi-name in the <ejb> tags takes the value jms/(ejbname) instead of jms/(queuename) . I am attaching the xml file with this . Can any one tell how to set the jndi-name to queue value using studio
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 EJB 2.0//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_0-0.dtd">
    <sun-ejb-jar>
    <enterprise-beans>
    <name>ejb</name>
    <ejb>
    <ejb-name>Suneesh</ejb-name>
    <jndi-name>jms/Suneesh</jndi-name> <resource-ref>
    <res-ref-name>QueueConnectionFactory</res-ref-name>
    <jndi-name>jms/QueueConnectionFactory</jndi-name>
    </resource-ref>
    <resource-env-ref>
    <resource-env-ref-name>TestQueue</resource-env-ref-name>
    <jndi-name>jms/TestQueue</jndi-name>
    </resource-env-ref>
    <pass-by-reference>false</pass-by-reference>
    </ejb>
    <ejb>
    <ejb-name>Suneesh1</ejb-name>
    <jndi-name>jms/Suneesh1</jndi-name>
    <resource-ref>
    <res-ref-name>QueueConnectionFactory</res-ref-name>
    <jndi-name>jms/QueueConnectionFactory</jndi-name>
    </resource-ref>
    <resource-env-ref>
    <resource-env-ref-name>TestQueue1</resource-env-ref-name>
    <jndi-name>jms/TestQueue1</jndi-name>
    </resource-env-ref>
    <pass-by-reference>false</pass-by-reference>
    </ejb>
    </enterprise-beans>
    </sun-ejb-jar>

    Hi Bhagya,
    Thanks for your response. I think from EJB container we can call Local EJBs with the full JNDI name. The session facade bean which is being called is a remote bean. From the session facade bean I am calling a local stateless session bean for database access. I am getting the reference of the local EJB from my session facade bean with full JNDI name "java:comp/env/ejb/EJBJNDIName". It is working fine with out any problem. My servicelocator is able to provide me the reference of the local EJB from the session facade remote bean with Full JNDI name. I am only having this problem calling from the MDB. I am really not sure whether what is causing it?
    Thanks
    Amit

  • "Message Driven Bean" doesn't work with Sun App Server

    Hello all,
    i have a little bit problems, running a simple "Message Driven Bean" under the Sun App Server. The deployment of it works fine, but after starting the SUN App Server i get the following error message:
    An error occurred during the message-driven beancontainer initialization at runtime. The most common cause for this is that the physical resource(e.g. Queue) from which the message-driven bean is consuming either does not exist or has been configured incorrectly. Another common error is that the message-driven bean implementation class does not correctly implement the required javax.ejb.MessageBean or MessageListener interfaces.
    Has anybody a workaround for this problem?
    The queue seems to be correctly installed. A simple client programm from the Sun Tutorial (Consumer & Producer) works fine without any Errors or Exceptions.
    I am a little bit confused, because the queue seems to work with the client programms but not with a MDB running on the SUN App Server.
    Thanks for you help!
    Greetings
    Manuel

    Hello Mr Manuel!
    could you plz help me with the steps for creating a message driven bean using netbeans ver 5.0(with Sun Java� System Application Server Platform Edition 8.2 )
    I just know how to work with Session beans & Entity Bean, and am try to learn to work on Message Driven Beans too. there are no proper tutorials where i can find steps for creating these..
    I need the steps from the scratch.,like creating QueueConnection Factory & Destination etc..
    It will be gr8 if you can help me with this at the earliest .
    Thank you
    Bye

  • About message driven bean

    I use ori url to access my ejb runing on another jvm(sun app server).
    like initialcontext.lookup("corbaname:iiop:192.0.0.1:3700#Bean");
    in standalone app.
    How do I call a message driven bean on sun app server in a standalone app which will be deployed in another pc.

    Hi,
    You cannot lookup MDB using JNDI. This is because MDB do not have a home interface and remote interface. Instead when a message producer sends a message to a queue or topic the application server invokes onMessage() method of MDB.
    Please refer to following tutorial for further information.
    http://java.sun.com/developer/technicalArticles/Ecommerce/jms/
    HTH
    VJ

  • Message-driven beans Vs JMS

    Hi,
    what does the bean technology add to the JSM by using the message driven beans instead of just using the regular asynchronus JMS?

    that's my question when and why should we chose:
    1. simple asynchronous JMS
    2. message-driven beansYou presumably mean:
    1. "simple" JMS client
    2. MDB JMS client
    That'll depend first on your existing architecture.You'll go for the second option if you're already using EJB , as to leverage your existing IT investment.
    Second, the EJB container gives you a number of services, so you don't have to worry about those yourself: life cycle management, scalability, transaction support, concurrency etc..
    With a plain JMS client, you'll have to handle concurrency yourself, for example, by spawning different JMS instances.
    If you're using an EJB container, that container will instantiate multiple MDB instances to handle multiple messages simultaneously.
    OTOH, The EJB contract implies some limitations of use. For example, an MDB can be associated with only one queue or topic. So if you need a JMS client to be able to handle multiple queues ot topics, you'll need to create multiple MDB clients, or go for a simple non-MDB JMS consumer.

  • Is Message Driven Beans Supported in iAS 6.5?

    Hello Everybody,
    Admin guide of iAS 6.5 speaks about using Message driven beans (mdb). It also says that iAS 6.5 supports EJB 1.1 specification. But, EJB 1.1 specification doesnt support mdbs. Only EJB 2.0 does this. Then how come iAS 6.5 supports mdb, when it says that it is EJB 1.1 complaint and not EJB 2.0 complaint.
    Please clear this doubt for me.
    regards,
    desigan

    It is me who is posting again.
    This is what provided in the Developer guide. I have just read it.
    "iPlanet Application Server, Enterprise Edition 6.5, provides support for deploying message-driven beans. This implementation is based on the EJB 2.0 specifications,
    and is for developer use only. The message-driven bean infrastructure in this release has not been tested in a production environment."
    regards,
    desigan

  • JNDI Naming Problem accessing Session Bean from Message Driven Bean

    Hi,
         I am facing a very strange problem in JNDI look up accessing a Session Bean from a Message Driven Bean. I have a session fa�ade bean(Remote Bean) which is being called from Struts Action class getting the home reference from the ServiceLocator (I have implemented ServiceLocator pattern to obtain JNDI reference for all EJBs). When I am calling the session fa�ade EJB from the Struts Action class everything is working fine.
         But when I am trying to call the same EJB from my Message Driven Bean, I am getting a JNDI exception (NameNotFoundException - No Object bound to name �java:comp/env/ejb/EJBJNDIName�). I am trying to get the remote reference from the same ServiceLocator which is successfully providing me a reference while calling from the struts action class. But the same ServiceLocator is not able to provide me a reference while calling from the Message Driven Bean. If I use the JNDI name directly like �EJBJNDIName� in the lookup it is working fine. The lookup for the name is working fine and I am able to call the Session Fa�ade bean with that reference.
         I am really not sure what exactly the problem is. If I have any problem in the ServiceLocator, it should have given me the same error while calling from Struts Action class. But it is working fine with the full name �java:comp/env/ejb/EJBJNDIName� calling from the struts action class. I am not sure whether Message Driven Bean has something to do with it. Why I am not able to get a reference of the EJB with the full name? Please Help.
    Thanks
    Amit

    Hi Bhagya,
    Thanks for your response. I think from EJB container we can call Local EJBs with the full JNDI name. The session facade bean which is being called is a remote bean. From the session facade bean I am calling a local stateless session bean for database access. I am getting the reference of the local EJB from my session facade bean with full JNDI name "java:comp/env/ejb/EJBJNDIName". It is working fine with out any problem. My servicelocator is able to provide me the reference of the local EJB from the session facade remote bean with Full JNDI name. I am only having this problem calling from the MDB. I am really not sure whether what is causing it?
    Thanks
    Amit

Maybe you are looking for

  • How to convert document file in PDf format through workflow using sharepoint designer

     Please suggest me solution it's urgent.....please.

  • Blackberry pearl and music files

    I know there's not a way to transfer music files to a Blackberry Pearl from a Mac using Bluetooth, but I was wondering if anyone knows if there is another way to do it? Using the USB cable perhaps? I downloaded PocketMac and I'm using that to sync my

  • Writing on the Yoga 3Pro

    Hello, Recently I bought this item for writing by hand on my Yoga 3Pro.  http://www.ebay.com/itm/181410475076?_trksid=p2059​210.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT These don't work on my system.  I can write with my finger but this stylus won't

  • Quicken 2007 for mac qif files

    My MBP (original 2006) died without having a chance to transfer quicken files via quicken 2007 for mac. Now I find that I cannot run quicken 2007 on my new mbp (late 2011). I have everything backed up on time machine but no where to run the the quick

  • How to initialize SAP calendar of a date field

    Hello, I have a date field in Adobe. I need to initialize the SAP calendar(but not the field) that is shown if one chooses the calendar. The SAP calendar shows always the current month and date. Is it possible to initialize the SAP calendar with some