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