Apache Geronimo > Discussion Forums  User List | Dev List | Wiki | Issue Tracker  

[Geronimo 2.1] add a Queue JNDI ref in ejb-jar.xml? sending JMS from an EJB/MDB

View: New views
3 Messages — Rating Filter:   Alert me  

[Geronimo 2.1] add a Queue JNDI ref in ejb-jar.xml? sending JMS from an EJB/MDB

by easyl :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The same post on stackoverflow but with better code layout
http://stackoverflow.com/questions/1612960/geronimo-2-1-add-a-queue-jndi-ref-in-ejb-jar-xml-sending-jms-msg-in-a-ejb-mdb

----

hi,

I have an EAR application which contains an MDB and a WAR.

In this EAR application I would send a message into an another Queue from other EAR application. Say jms/anotherQueue

If the message sending happens in web context, it works. I have such setup in web.xml

<message-destination-ref>
 <message-destination-ref-name>jms/anotherQueue</message-destination-ref-name>
 <message-destination-type>javax.jms.Queue</message-destination-type>
 <message-destination-usage>Produces</message-destination-usage>
 <message-destination-link>jms/anotherQueue</message-destination-link>
</message-destination-ref>

But if the message sending occurs in EJB (MDB here) context, I will get a JNDI name lookup failure.

javax.naming.NameNotFoundException: anotherQueue

my ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">

 <enterprise-beans>

  <message-driven>
   <ejb-name>jms/myMDB</ejb-name>
   <ejb-class>com.my.MDBImplement</ejb-class>
   <messaging-type>javax.jms.MessageListener</messaging-type>
   <transaction-type>Container</transaction-type>
   <activation-config>
    <activation-config-property>
     <activation-config-property-name>destination</activation-config-property-name>
     <activation-config-property-value>jms/myQueue</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
     <activation-config-property-name>destinationType</activation-config-property-name>
     <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
    </activation-config-property>
   </activation-config>
   <resource-ref>
    <res-ref-name>jms/myCF</res-ref-name>
    <res-type>javax.jms.QueueConnectionFactory</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
   </resource-ref>
  </message-driven>
 </enterprise-beans>

 <assembly-descriptor>
  <container-transaction>
   <method>
    <ejb-name>jms/myMDB</ejb-name>
    <method-name>onMessage</method-name>
    <method-params>
     <method-param>javax.jms.Message</method-param>
    </method-params>
   </method>
   <trans-attribute>NotSupported</trans-attribute>
  </container-transaction>
 </assembly-descriptor>


</ejb-jar>

the openejb.jar is

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ejb:openejb-jar
 xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
 xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
 xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
 xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
 xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pers="http://java.sun.com/xml/ns/persistence"
 xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
 xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
 <dep:environment>
  <dep:moduleId>
   <dep:groupId>myGroup</dep:groupId>
   <dep:artifactId>imyMDB</dep:artifactId>
   <dep:version>1.0</dep:version>
   <dep:type>ejb</dep:type>
  </dep:moduleId>
  <dep:dependencies>
   <dep:dependency>
    <dep:groupId>org.apache.geronimo.configs</dep:groupId>
    <dep:artifactId>activemq-broker</dep:artifactId>
    <dep:type>car</dep:type>
   </dep:dependency>
  </dep:dependencies>
 </dep:environment>
 <ejb:enterprise-beans>
  <ejb:message-driven>
   <ejb:ejb-name>jms/myMDB</ejb:ejb-name>
   <ejb:resource-adapter>
    <ejb:resource-link>myJmsResource</ejb:resource-link>
   </ejb:resource-adapter>
  </ejb:message-driven>
 </ejb:enterprise-beans>
</ejb:openejb-jar>

I define myJmsResource in geronimo-application.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<app:application
 xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
 xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
 xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
 xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
 xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pers="http://java.sun.com/xml/ns/persistence"
 xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
 xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
 <dep:environment>
  <dep:moduleId>
   <dep:groupId>myGroup</dep:groupId>
   <dep:artifactId>myEAR</dep:artifactId>
   <dep:version>1.0</dep:version>
   <dep:type>ear</dep:type>
  </dep:moduleId>
 </dep:environment>
 <app:module>
  <app:connector>geronimo-activemq-ra-2.1.4.rar</app:connector>
  <conn:connector>
   <dep:environment>
    <dep:moduleId>
     <dep:groupId>myGroup</dep:groupId>
     <dep:artifactId>myJmsResource</dep:artifactId>
     <dep:version>1.0</dep:version>
     <dep:type>rar</dep:type>
    </dep:moduleId>
    <dep:dependencies>
     <dep:dependency>
    <dep:groupId>org.apache.geronimo.configs</dep:groupId>
      <dep:artifactId>activemq-broker</dep:artifactId>
      <dep:type>car</dep:type>
     </dep:dependency>
    </dep:dependencies>
   </dep:environment>
   <conn:resourceadapter>
    <conn:resourceadapter-instance>

     <conn:resourceadapter-name>myJmsResource</conn:resourceadapter-name>
     <nam:workmanager>
      <nam:gbean-link>DefaultWorkManager</nam:gbean-link>
     </nam:workmanager>
    </conn:resourceadapter-instance>
    <conn:outbound-resourceadapter>
     <conn:connection-definition>
      <conn:connectionfactory-interface>javax.jms.ConnectionFactory</conn:connectionfactory-interface>
      <conn:connectiondefinition-instance>
       <conn:name>jms/myCF</conn:name>
       <conn:implemented-interface>javax.jms.QueueConnectionFactory</conn:implemented-interface>
       <conn:implemented-interface>javax.jms.TopicConnectionFactory</conn:implemented-interface>
       <conn:connectionmanager>
        <conn:xa-transaction>
         <conn:transaction-caching />
        </conn:xa-transaction>
        <conn:single-pool>
         <conn:match-all />
        </conn:single-pool>
       </conn:connectionmanager>
      </conn:connectiondefinition-instance>
     </conn:connection-definition>
    </conn:outbound-resourceadapter>
   </conn:resourceadapter>
   <conn:adminobject>
    <conn:adminobject-interface>javax.jms.Queue</conn:adminobject-interface>
    <conn:adminobject-class>org.apache.activemq.command.ActiveMQQueue</conn:adminobject-class>
   <conn:adminobject-instance>    
     <conn:message-destination-name>jms/myQueue</conn:message-destination-name>
     <conn:config-property-setting name="PhysicalName">jms/myQueue</conn:config-property-setting>
    </conn:adminobject-instance>
    <!-- ******************************************************************** -->
    <!-- define referred message destination ??? -->
    <conn:adminobject-instance>
     <conn:message-destination-name>jms/anotherQueue</conn:message-destination-name>
     <conn:config-property-setting name="PhysicalName">jms/anotherQueue</conn:config-property-setting>
    </conn:adminobject-instance>
   </conn:adminobject>
   <conn:adminobject>
    <conn:adminobject-interface>javax.jms.Topic</conn:adminobject-interface>
    <conn:adminobject-class>org.apache.activemq.command.ActiveMQTopic</conn:adminobject-class>
   </conn:adminobject>
  </conn:connector>
 </app:module>

</app:application>

It seems that myMDB cannot understand what jms/anotherQueue is!!! How can I fix it?

Re: [Geronimo 2.1] add a Queue JNDI ref in ejb-jar.xml? sending JMS from an EJB/MDB

by easyl :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

OK, I found a quick fix....

in ejb-jar.xml

<enterprise-beans>

        <message-driven>
                <ejb-name>jms/myMDB</ejb-name>
                .....      
                <!--  referred queue -->
                <resource-env-ref>
                        <resource-env-ref-name>jms/anotherQueue</resource-env-ref-name>
                        <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
                </resource-env-ref>

        </message-driven>
</enterprise-beans>

I must admit, I still don't understand how to write a correct deployment plan. I just goggle, copy, paste.....and mix up those deployment plans.

Re: [Geronimo 2.1] add a Queue JNDI ref in ejb-jar.xml? sending JMS from an EJB/MDB

by Ellen Tang-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

You can refer to the Geronimo documentation for instructions about all kinds of deployment plans in Geronimo. This is the link of relevant topics in the G doc: http://cwiki.apache.org/GMOxDOC22/creating-deployment-plans.html.

Hope it helps.

Ellen

2009/10/23 easyl <easy.lin@...>

OK, I found a quick fix....

in ejb-jar.xml

<enterprise-beans>

       <message-driven>
               <ejb-name>jms/myMDB</ejb-name>
               .....
               <!--  referred queue -->
               <resource-env-ref>

<resource-env-ref-name>jms/anotherQueue</resource-env-ref-name>

<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
               </resource-env-ref>

       </message-driven>
</enterprise-beans>

I must admit, I still don't understand how to write a correct deployment
plan. I just goggle, copy, paste.....and mix up those deployment plans.

--
View this message in context: http://www.nabble.com/-Geronimo-2.1--add-a-Queue-JNDI-ref-in-ejb-jar.xml--sending-JMS-from-an-EJB-MDB-tp26025166s134p26026848.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.