You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by easyl <ea...@gmail.com> on 2009/10/23 14:10:15 UTC

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

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?

-- 
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-tp26025166s134p26025166.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


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

Posted by Ellen Tang <lt...@gmail.com>.
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 <ea...@gmail.com>

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

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

Posted by easyl <ea...@gmail.com>.
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.