Hi i've circled the web but I just cant get this going.

I have a MDB listening from a queue, receives the message and the call the 
respective process model on a Stateless Session Bean. I'm using XDoclet and 
can't seam to get this to work.

The MDB Bean looks like this:

ackage is.scholar.orchestrator.ejb;
  | 
  | import is.scholar.orchestrator.interfaces.MainOrchestratorLocal;
  | import is.scholar.orchestrator.interfaces.MainOrchestratorUtil;
  | 
  | import javax.ejb.CreateException;
  | import javax.ejb.EJBException;
  | import javax.ejb.MessageDrivenBean;
  | import javax.ejb.MessageDrivenContext;
  | import javax.jms.JMSException;
  | import javax.jms.Message;
  | import javax.jms.MessageListener;
  | import javax.jms.TextMessage;
  | import javax.naming.InitialContext;
  | import javax.naming.NamingException;
  | 
  | /**
  |  * XDoclet-based Message Driven entity bean.
  |  * 
  |  * To generate EJB related classes using XDoclet:
  |  *
  |  *          - Add Standard EJB module to XDoclet project properties
  |  *          - Customize XDoclet configuration
  |  *          - Run XDoclet
  |  * 
  |  * Below are the xdoclet-related tags needed for this EJB.
  |  *
  |  * @ejb.bean name="UIOutboxProcessorMDB"
  |  *           display-name="UIOutboxProcessorMDB"
  |  *           description="MDB that retreives transactionaly a message from 
its outbox queue and sends it to the corresponding method en the orchestrator"
  |  *           destination-type="javax.jms.Queue"
  |  *           acknowledge-mode="Auto-acknowledge"
  |  *           transaction-type = "Container"
  |  *           subscription-durability = "Durable"
  |  * 
  |  * @jboss.destination-jndi-name name="queue/UIOutboxQueue"
  |  * 
  |  * @ejb.ejb-ref  ejb-name="MainOrchestrator" 
  |  *                          type="Session"
  |  *                          view-type="local"
  |  *                          ref-name="MainOrchestrator"
  |  *                                          
  |  * @jboss.ejb-local-ref ref-name="MainOrchestrator"
  |  *                                      jndi-name="ejb/MainOrchestrator"    
  |  */
  | public class UIOutboxProcessorMDB implements MessageDrivenBean, 
MessageListener {
  | 
  |     private static final long serialVersionUID = 4883475689156890475L;
  | 
  |     /** The MessageDrivenContext */
  |     private MessageDrivenContext context;
  | 
  |     private InitialContext initialContext;
  | 
  |     MainOrchestratorLocal orchestrator;
  | 
  |     public UIOutboxProcessorMDB() {
  |             super();
  |     }
  | 
  |     /**
  |      * Set the associated context. The container calls this method 
  |      * after the instance creation.  <br>
  |      * 
  |      * The enterprise bean instance should store the reference to the 
context 
  |      * object in an instance variable. <br>
  |      * 
  |      * This method is called with no transaction context.
  |      * 
  |      * @param newContext A MessageDrivenContext interface for the instance. 
  |      * 
  |      * @throws EJBException Thrown by the method to indicate a failure 
caused by a system-level error.
  |      * 
  |      * 
  |      * 
  |      */
  |     public void setMessageDrivenContext(MessageDrivenContext newContext) 
throws EJBException {
  |             context = newContext;
  |     }
  | 
  |     public void ejbRemove() throws EJBException {
  |             // TODO Auto-generated method stub
  | 
  |     }
  | 
  |     /**
  |      * Method that retreives a message from the message queue specified
  |      * Since container managed transaction in enabled if there is an 
exception
  |      * between the retreiving of the message and the end of the process 
specified
  |      * in the orchestrator SessionBean the transaction will be rolled back 
with
  |      * no need for user specified commit() or rollback methods()
  |      * @param msg the message from the user interface outbox
  |      */
  |     public void onMessage(Message msg) {
  |             try {
  |                     System.out.println("UIOMDB: Received Message from 
queue");
  |                     TextMessage tm = (TextMessage) msg;
  |                     String theMessage = tm.getText();
  |                     orchestrator = 
MainOrchestratorUtil.getLocalHome().create();
  |                     System.out.println("UIOMDB: Createnew StatelessSB 
Orchestrator");
  |                     orchestrator.processMessageFromUIOutbox(theMessage);
  |                     System.out.println("UIOMDB: Orchestrator returned from 
process message");
  |             } catch (CreateException e) {
  |                     e.printStackTrace();
  |             } catch (NamingException e) {
  |                     e.printStackTrace();
  |             } catch (JMSException e) {
  |                     e.printStackTrace();
  |             } catch (EJBException e) {
  |                     e.printStackTrace();
  |             } 
  |     }
  | 
  |     /**
  |      * An ejbCreate method as required by the EJB specification.
  |      * 
  |      * The container calls the instance?s <code>ejbCreate</code> method 
  |      * immediately after instantiation.
  |      * 
  |      * @ejb.create-method
  |      */
  |     public void ejbCreate() {
  | 
  |     }
  | 
  | }
  | 


The Session Bean looks like this:

package is.scholar.orchestrator.ejb;
  | 
  | import java.rmi.RemoteException;
  | 
  | import javax.ejb.CreateException;
  | import javax.ejb.EJBException;
  | import javax.ejb.SessionBean;
  | import javax.ejb.SessionContext;
  | import javax.jms.JMSException;
  | import javax.jms.Queue;
  | import javax.jms.QueueConnection;
  | import javax.jms.QueueConnectionFactory;
  | import javax.jms.QueueSender;
  | import javax.jms.QueueSession;
  | import javax.jms.Session;
  | import javax.jms.TextMessage;
  | import javax.naming.InitialContext;
  | import javax.naming.NamingException;
  | 
  | /**
  |  * XDoclet-based session bean.  The class must be declared
  |  * public according to the EJB specification.
  |  *
  |  * To generate the EJB related files to this EJB:
  |  *          - Add Standard EJB module to XDoclet project properties
  |  *          - Customize XDoclet configuration for your appserver
  |  *          - Run XDoclet
  |  *
  |  * Below are the xdoclet-related tags needed for this EJB.
  |  * 
  |  * @ejb.bean name="MainOrchestrator"
  |  *           jndi-name="ejb/MainOrchestrator"
  |  *           type="Stateless"
  |  *           view-type="local"
  |  *           
  |  */
  | public class MainOrchestratorBean implements SessionBean {
  | 
  |     private static final long serialVersionUID = -5234607840877395891L;
  |     /** The session context */
  |     private SessionContext context;
  |     private QueueConnectionFactory connectionFactory;
  | 
  |     public MainOrchestratorBean() {
  |             super();
  |             // TODO Auto-generated constructor stub
  |     }
  | 
  |     /**
  |      * Set the associated session context. The container calls this method 
  |      * after the instance creation.
  |      * 
  |      * The enterprise bean instance should store the reference to the 
context 
  |      * object in an instance variable.
  |      * 
  |      * This method is called with no transaction context. 
  |      * 
  |      * @throws EJBException Thrown if method fails due to system-level 
error.
  |      */
  |     public void setSessionContext(SessionContext newContext) throws 
EJBException {
  |             context = newContext;
  |     }
  | 
  |     public void ejbRemove() throws EJBException, RemoteException {
  |             // TODO Auto-generated method stub
  | 
  |     }
  | 
  |     public void ejbActivate() throws EJBException, RemoteException {
  |             // TODO Auto-generated method stub
  | 
  |     }
  | 
  |     public void ejbPassivate() throws EJBException, RemoteException {
  |             // TODO Auto-generated method stub
  | 
  |     }
  | 
  |     /**
  |      * An ejbCreate method as required by the EJB specification.
  |      * 
  |      * The container calls the instance?s <code>ejbCreate</code> method 
whose
  |      * signature matches the signature of the <code>create</code> method 
invoked
  |      * by the client. The input parameters sent from the client are passed 
to
  |      * the <code>ejbCreate</code> method. Each session bean class must have 
at
  |      * least one <code>ejbCreate</code> method. The number and signatures
  |      * of a session bean?s <code>create</code> methods are specific to each 
  |      * session bean class.
  |      * 
  |      * @throws CreateException Thrown if method fails due to system-level 
error.
  |      * 
  |      * @ejb.create-method
  |      * 
  |      */
  |     public void ejbCreate() throws CreateException {
  |             //Set up all the queues
  |         try {
  |                     connectionFactory = (QueueConnectionFactory) new 
InitialContext().lookup("JQCF");
  |             } catch (NamingException ex) {
  |                     ex.printStackTrace();
  |             }
  |             
  |     }
  | 
  |     /**
  |      * 
  |      * @ejb.interface-method view-type = "local"
  |      * 
  |      * @throws EJBException
  |      *             Thrown if method fails due to system-level error.
  |      * @throws NamingException 
  |      * @throws JMSException 
  |      */
  |     public void processMessageFromUIOutbox(String aMessage) throws 
EJBException, NamingException, JMSException {
  |             System.out.println("ORCH: received call to processMessageUIO");
  |             Queue queue = (Queue)new 
InitialContext().lookup("queue/ScholarXMLInboxQueue");
  |             QueueConnection connection = 
connectionFactory.createQueueConnection();
  |             QueueSession session = 
(QueueSession)connection.createQueueSession(true,Session.AUTO_ACKNOWLEDGE);
  |             QueueSender sender = (QueueSender)session.createSender(queue);
  |             TextMessage tm = session.createTextMessage();
  |             tm.setText(aMessage);
  |             System.out.println("ORCH: About to put the message in 
ScholarXMLInboxQueue");
  |             sender.send(tm);
  |             System.out.println("ORCH: Message sent returning...");
  |             return;
  |     }
  | 
  | }
  | 

the ejb-jar.xml looks like this:


  | ...
  | 
  | <!-- Session Beans -->
  |       <session >
  |          <description><![CDATA[XDoclet-based session bean.]]></description>
  | 
  |          <ejb-name>MainOrchestrator</ejb-name>
  | 
  |          
<local-home>is.scholar.orchestrator.interfaces.MainOrchestratorLocalHome</local-home>
  |          
<local>is.scholar.orchestrator.interfaces.MainOrchestratorLocal</local>
  |          
<ejb-class>is.scholar.orchestrator.ejb.MainOrchestratorSession</ejb-class>
  |          <session-type>Stateless</session-type>
  |          <transaction-type>Container</transaction-type>
  | 
  |       </session>
  | 
  | 
  | .....
  | 
  | 
  | 
  | <message-driven >
  |          <description><![CDATA[MDB that retreives transactionaly a message 
from its outbox queue and sends it to the corresponding method en the 
orchestrator]]></description>
  |          <display-name>UIOutboxProcessorMDB</display-name>
  | 
  |          <ejb-name>UIOutboxProcessorMDB</ejb-name>
  | 
  |          
<ejb-class>is.scholar.orchestrator.ejb.UIOutboxProcessorMDB</ejb-class>
  | 
  |          <transaction-type>Container</transaction-type>
  |          <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
  |          <message-driven-destination>
  |             <destination-type>javax.jms.Queue</destination-type>
  |             <subscription-durability>Durable</subscription-durability>
  |          </message-driven-destination>
  | 
  |          <ejb-local-ref >
  |             <ejb-ref-name>MainOrchestrator</ejb-ref-name>
  |             <ejb-ref-type>Session</ejb-ref-type>
  |             
<local-home>is.scholar.orchestrator.interfaces.MainOrchestratorLocalHome</local-home>
  |             
<local>is.scholar.orchestrator.interfaces.MainOrchestratorLocal</local>
  |             <ejb-link>MainOrchestrator</ejb-link>
  |          </ejb-local-ref>
  | 


and finally the jboss.xml looks like this:


  | ...
  | <session>
  |          <ejb-name>MainOrchestrator</ejb-name>
  |          <local-jndi-name>MainOrchestratorLocal</local-jndi-name>
  | 
  |         <method-attributes>
  |         </method-attributes>
  |       </session>
  | 
  | 
  | ...
  | 
  | 
  | </message-driven>
  |       <message-driven>
  |          <ejb-name>UIOutboxProcessorMDB</ejb-name>                       
  |          <destination-jndi-name>queue/UIOutboxQueue</destination-jndi-name>
  | 
  |       </message-driven>
  | 


I can't seem to get this right. Any help would be very much appreciated.

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3912006


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to