Hi guy,

I start to be a bit confuse with the dependency injection. I really want to 
understand how this works. 
I try several thinkg and sometime it is working sometimes not.
Basicaly I have an application (i.e. MM) which consists of a set of Message 
driven beans, beans, and entities that I want to used in another application 
(i.e. CMS) as a kind of sub-component.
So I do include MM in CMS (the ejb-jar.xml, and persistence.xml file are used 
to "configurate" MM). 
For some reason MM need to know the application (e.g. CMS) that is using it so 
I used the ejb-jar.xml file and a <env-entry> specification in each of my 
message driven and other beans to specify this information. 
Each bean (message driven or others) in MM has a property (i.e. 
applicationName) annotated with @Resource and a get and set method to access it.
It seems that the injection of the resource my approach is working only for 
message-driven bean but not the other beans and I do not understand why.

MM is deploy within CMS on JBOSS with a .ear file which as this structure:



  | CMS.EAR
  |     |--META-INF
  |     |     |--application.xml
  |     |--CMC.jar (message driven and persitence beans)
  |     |       |--META-INF
  |     |               |--ejb-jar.xml
  |     |--CMejb.jar (entities classes)
  |     |       |--META-INF
  |     |               |--persistence.xml
  |     |--MMejb.jar (MM message driven beans)
  |     |--MSMejb.jar (MM entity classes and persistence beans)
  |     |--CMSweb.war (CMS servlet...)
  |     |--MMweb.war (MM Servlet ...)
  | 

the application.xml in CMS.ear is:


  | <application>
  |   <display-name>CMS</display-name>
  |   <module>
  |     <ejb>lib/cmsconfiguratorclient.jar</ejb>
  |   </module>
  |   <module>
  |     <ejb>CMC.jar</ejb>
  |   </module>
  |   <module>
  |     <ejb>CMejb.jar</ejb>
  |   </module>
  |   <module>
  |     <web>
  |       <web-uri>CMSweb.war</web-uri>
  |       <context-root>CARDWeb</context-root>
  |     </web>
  |   </module>
  | 
  | <!-- MM -->
  |  
  |   <module>
  |     <ejb>MMweb.war</ejb>
  |   </module>
  |   <module>
  |     <ejb>MMejb.jar</ejb>
  |   </module>
  |   <module>
  |     <ejb>MSMejb.jar</ejb>
  |   </module>
  | 
  | </application>
  | 

the ejb-jar.xml in CMC is 


  | <?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";>
  |     
  |     <display-name>CMS</display-name>
  |     <enterprise-beans>
  | 
  |             <message-driven >
  |                     <display-name>MessagerReceiver</display-name>
  |                     <ejb-name>MessageReceiver</ejb-name>
  |                     
<ejb-class>com.messaging.messagemanager.receiving.MessageReceiver</ejb-class>
  |                     <transaction-type>Container</transaction-type>
  |                     <activation-config>
  |                             <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-property>
  |                                     
<activation-config-property-name>destination</activation-config-property-name>
  |                                     
<activation-config-property-value>queue/CMS</activation-config-property-value>
  |                             </activation-config-property>
  |                     </activation-config>
  |                     <env-entry>
  |                     <description>The name of the application</description>
  |                     
<env-entry-name>com.messaging.messagemanager.receiving.MessageReceiver/applicationName</env-entry-name>
  |                     <env-entry-type>java.lang.String</env-entry-type>
  |                     <env-entry-value>CMS</env-entry-value>
  |                     </env-entry>                    
  |             </message-driven>
  |             
  |             <session>
  |                     <ejb-name>IncomingMessageHandler</ejb-name>
  |                     
<ejb-class>com.ecebs.multefile.messaging.messagemanager.receiving.IncomingMessageHandler</ejb-class>
  |                     <env-entry>
  |                     <description>The name of the application</description>
  |                     
<env-entry-name>com.messaging.messagemanager.receiving.IncomingMessageHandler/applicationName</env-entry-name>
  |                     <env-entry-type>java.lang.String</env-entry-type>
  |                     <env-entry-value>CMS</env-entry-value>
  |                     </env-entry>
  |             </session>
  |             
  |             <session>
  |                     <ejb-name>MessageStoreManagerBean</ejb-name>
  |                     
<ejb-class>com.messaging.messagestoremanager.MessageStoreManagerBean</ejb-class>
  |                     <env-entry>
  |                     <description>The name of the application</description>
  |                     
<env-entry-name>com.messaging.messagestoremanager.MessageStoreManagerBean/applicationName</env-entry-name>
  |                     <env-entry-type>java.lang.String</env-entry-type>
  |                     <env-entry-value>CMS</env-entry-value>
  |                     </env-entry>
  |                     <persistence-context-ref>
  |                             
<persistence-context-ref-name>messagemanager_em</persistence-context-ref-name>
  |                             
<persistence-unit-name>messagemanager</persistence-unit-name>
  |                     </persistence-context-ref>
  |             </session>
  | 
  |             
  |     </enterprise-beans>
  | 
  | </ejb-jar>
  | 

all beans from MM are defined here with the same <env-entry>. here I put only 
few of them to make it short.
when I debug my application and send a mock message to the "MessagerReceiver" 
the "applicationName" is set with CMS so the dependency injection did work.
When i simulate I use the IncomingMessageHandler bean, the applicationName is 
not set with the value specified in the ejb-jar.xml (i.e. CMS).

here the code of the incomingMessageHandler bean and MessageReceiver message 
driven bean:

  | @Stateless
  | public class IncomingMessageHandler implements IIncomingMessageHandler{
  |     
  |     //...
  |   
  |     @Resource
  |     private String applicationName;
  |     
  |     public String getApplicationName() {
  |             return applicationName;
  |     }
  |     
  |     public void setApplicationName(String applicationName) {
  |             this.applicationName = applicationName;
  |     }
  | 
  |     //...
  | }
  | 
  | public class MessageReceiver implements MessageListener{
  |     //...
  |     
  |     @Resource
  |     private String applicationName;
  |     
  |     public String getApplicationName() {
  |             return applicationName;
  |     }
  |     
  |     public void setApplicationName(String applicationName) {
  |             this.applicationName = applicationName;
  |     }
  | 
  |     public void onMessage(Message message) {
  |             //...
  |     }
  |     //...
  | 

a little help and explaination will be appreciated to understand what is wrong 
in my code/approach.
Any good references/internet link that could help me to understand the 
structure of an ear file or how to use ejb-jar.xml and persistence.xml in ear 
are also welcome.

Thanks a lot


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4242124#4242124

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4242124
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to