Hi Romain,

Here is the sample code:

*Resources configured in tomee.xml*
    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
     BrokerXmlConfig = broker:(tcp://localhost:61616)
                ServerUrl = tcp://localhost:61616
    </Resource>

        <Resource id="MyJmsConnectionFactory"
type="javax.jms.ConnectionFactory"
                ResourceAdapter = MyJmsResourceAdapter
        </Resource>

        <Container id="MyJmsMdbContainer" ctype="MESSAGE">
                ResourceAdapter = MyJmsResourceAdapter
        </Container>

        <Resource id="test/ejb/AnswerQueue" type="javax.jms.Queue">
            Destination test/ejb/AnswerQueue
        </Resource>
////////////////////////////////////////////////////////////////////////////


*CachedInfoMessageHandlerBean.java*
package test.ejbs.TomEE.beans;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;


public class CachedInfoMessageHandlerBean implements MessageListener
{
    
    private ConnectionFactory connectionFactory;
    private Queue answerQueue;

    @Override
    public void onMessage(Message message) {
        try {

            final TextMessage textMessage = (TextMessage) message;
            final String question = textMessage.getText();
            
            System.out.println("onMessage called");
            
            if ("Hello World!".equals(question)) 
            {
                respond("Hello, Test Case!");
            } else if ("How are you?".equals(question)) 
            {
                respond("I'm doing well.");
            } else if ("Still spinning?".equals(question)) 
            {
                respond("Once every day, as usual.");
            }
        } catch (JMSException e) {
            throw new IllegalStateException(e);
        }
    }

    
    private void respond(String text) throws JMSException 
    {
        Connection connection = null;
        Session session = null;

        try {
            connection = connectionFactory.createConnection();
            connection.start();

            // Create a Session
            session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);

            // Create a MessageProducer from the Session to the Topic or
Queue
            MessageProducer producer = session.createProducer(answerQueue);
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            // Create a message
            TextMessage message = session.createTextMessage(text);

            // Tell the producer to send the message
            producer.send(message);
        } finally 
        {
            // Clean up
            if (session != null) 
            {
                session.close();
            }
            if (connection != null) 
            {
                connection.close();
            }
        }
    }
}
// END

*ejb-jar.xml*

<?xml version="1.0" encoding="UTF-8"?>

<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"; 
         version = "3.0" 
         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>
        <session>
            <ejb-name>CalculatorBean</ejb-name>
           
<business-local>test.ejbs.TomEE.headers.CalculatorLocal</business-local>
           
<business-remote>test.ejbs.TomEE.headers.CalculatorRemote</business-remote>
            <ejb-class>test.ejbs.TomEE.beans.CalculatorBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
        </session>
        <message-driven>

      <ejb-name>CachedInfoMessageHandlerBean</ejb-name>
     
<ejb-class>test.ejbs.TomEE.beans.CachedInfoMessageHandlerBean</ejb-class>
      <messaging-type>javax.jms.MessageListener</messaging-type>
      <message-destination-type>javax.jms.Queue</message-destination-type>
      <activation-config>
        <activation-config-property>
         
<activation-config-property-name>destination</activation-config-property-name>
         
<activation-config-property-value>CachedInfoMessageHandlerBean</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-property>
         
<activation-config-property-name>acknowledgeMode</activation-config-property-name>
         
<activation-config-property-value>Auto-acknowledge</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
         
<activation-config-property-name>messageSelector</activation-config-property-name>
         
<activation-config-property-value>state=1</activation-config-property-value>
        </activation-config-property>
      </activation-config>
        
      <resource-ref>
       
<res-ref-name>java:comp/env/test.ejbs.TomEE.beans.CachedInfoMessageHandlerBean/connectionFactory</res-ref-name>
        <res-type>javax.jms.ConnectionFactory</res-type>
        <injection-target>
         
<injection-target-class>test.ejbs.TomEE.beans.CachedInfoMessageHandlerBean</injection-target-class>
          <injection-target-name>connectionFactory</injection-target-name>
        </injection-target>
      </resource-ref>

      <resource-env-ref>
       
<resource-env-ref-name>java:test/ejb/AnswerQueue</resource-env-ref-name>
        <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
        <mapped-name>AnswerQueue</mapped-name>
        <injection-target>
         
<injection-target-class>test.ejbs.TomEE.beans.CachedInfoMessageHandlerBean</injection-target-class>
          <injection-target-name>answerQueue</injection-target-name>
        </injection-target>
      </resource-env-ref>

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

*// TomEEAppClient.java*
package tomeeappclient;

import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

public class TomEEAppClient 
{
   
    // @Resource(mappedName = "AnswerQueue")
    private Queue queue;
    
    // @Resource(mappedName = "MyJmsConnectionFactory")
    private ConnectionFactory connectionFactory;
    
    static
    {
        System.out.println("Loading System properties");
        System.setProperty("MyJmsConnectionFactory",
"connectionfactory:org.apache.activemq.ActiveMQConnectionFactory:tcp://localhost:61616");
        // System.setProperty("java:test/ejb/AnswerQueue",
"queue:org.apache.activemq.command.ActiveMQQueue:LISTENER");
    }
    public static void main(String[] args) throws Exception
    {
        TomEEAppClient client = new TomEEAppClient();
        client.process();
    }
    private void process() throws Exception
    {
        Properties p = new Properties();
        p.put("java.naming.factory.initial",
"org.apache.openejb.client.RemoteInitialContextFactory");
        p.put("java.naming.provider.url",
"http://127.0.0.1:8080/tomee/ejb";);
        InitialContext ctx = new InitialContext(p);
        
        String factory = "java:MyJmsConnectionFactory";
        javax.jms.ConnectionFactory cf = (ConnectionFactory)
ctx.lookup(factory);
        Connection connection = null;
        
        try 
        {
         connection = cf.createConnection();
         queue = (Queue)ctx.lookup("java:test/ejb/AnswerQueue");
         connection.start();
         Session session =
connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
         MessageProducer messageProducer = session.createProducer(queue);
 
         TextMessage msg = session.createTextMessage();
         msg.setText("Hello World!");
         msg.setStringProperty("name", "TomEERemoteClient");
 
         messageProducer.send(msg);
         
     } catch (JMSException e) 
     {
         throw new RuntimeException(e);
     } finally 
     {
         try 
         {
             if (connection != null) 
             {
                 connection.close();
             }
         }catch (JMSException e) { }//ignore  
     }
        
        
    }
    
    
}
//END



--
View this message in context: 
http://openejb.979440.n4.nabble.com/Can-not-connect-to-Message-Bean-from-remote-client-Null-pointer-tp4662203p4662332.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Reply via email to