0 Replies Latest reply on Mar 19, 2005 4:28 PM by gberish

    JMS over HTTP

    gberish

      Hi,

      The EJB and JMS forums said JMS over HTTP is easy, but it still defeats me. I hope this is simple enough to fit in them beginners forum, because I need a simple beginning point.

      MessageTest below is a client that sends and retreives a JMS message that says "Success" from a Queue whose JNDI name is queue/goIn.

      The type parameter in mb.setUp (int type) in main() (Where type = [REG | HTTP]) determines whether the send and receive go over HTTP.

      type = REG works fine: See "Screen Print REG" below the code
      type = HTTP fails as shown: See "Screen Print HTTP" below that.

      Are there some deployment xml files I need to modify?

      It seems that this simple model would be useful to other new guys too, so I hope it is as simple as the more advanced foriums say..

      import java.lang.reflect.Method;
      
      import java.util.Properties;
      
      import javax.jms.JMSException;
      import javax.jms.Message;
      import javax.jms.Queue;
      import javax.jms.QueueConnection;
      import javax.jms.ConnectionFactory;
      import javax.jms.QueueConnectionFactory;
      import javax.jms.QueueReceiver;
      import javax.jms.QueueSession;
      import javax.jms.QueueSender;
      import javax.jms.Session;
      import javax.jms.TextMessage;
      
      import javax.naming.Context;
      import javax.naming.InitialContext;
      import javax.naming.NamingException;
      
      public class MessageTest {
      
       public static void main (String[] args) {
       MessageTest mb = new MessageTest ();
       /**
       * The type parameter in setUp (int type)
       * may be changed manually between
       * REG & HTTP
       **/
       mb.setUp (REG);
       }
      
       // method
       public void setUp (int type) {
       System.out.println ("Type = " + TYPE [type]);
       try {
       // get initial context
       Properties p = new Properties();
       switch (type) {
       case REG:
       p.put(Context.INITIAL_CONTEXT_FACTORY,
       "org.jnp.interfaces.NamingContextFactory");
       p.put(Context.PROVIDER_URL,
       "jnp://localhost:1099");
       p.put(Context.URL_PKG_PREFIXES,
       "org.jnp.interfaces");
       break;
       case HTTP:
       p.put(Context.INITIAL_CONTEXT_FACTORY,
       "org.jboss.naming.HttpNamingContextFactory");
       p.put(Context.PROVIDER_URL,
       "http://localHost:80/invoker/JMXInvokerServlet");
       p.put(javax.naming.Context.URL_PKG_PREFIXES,
       "org.jboss.naming:org.jnp.interfaces");
       break;
       }
      
       System.out.println ("Calling InitialContext");
       ctx = new InitialContext(p);
       System.out.println ("InitialContext Found");
      
       // lookup connection factory
       factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
       System.out.println ("Connection Factory instantiated");
      
       // lookup destination
       destination = (Queue)ctx.lookup("queue/goIn");
       System.out.println ("Destination instantiated");
      
       // create connection
       connection = factory.createQueueConnection();
       System.out.println ("Connection instantiated");
      
       // create session
       session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
       System.out.println ("Session instantiated");
      
       // create sender
       sender = session.createSender(destination);
       System.out.println ("Sender instantiated");
      
       // create receiver
       receiver = session.createReceiver(destination);
       System.out.println ("Receiver instantiated");
      
       // create message w/text & selector property
       message = session.createTextMessage("Success");
       System.out.println ("Message instantiated");
       message.setStringProperty ("Player", "one");
       System.out.println ("Message Property 'Player' set to 'one'");
      
       // starting connection
       connection.start ();
       System.out.println ("Connection Started");
      
       // send message
       sender.send(message);
       System.out.println ("Message Sent");
      
       // receive message
       message = (TextMessage) receiver.receive ();
       System.out.println ("Message Received: " + message.getText ());
      
       } catch (NamingException e) {
       System.out.println ("Naming Exception");
       e.printStackTrace ();
       } catch (JMSException e) {
       System.out.println ("JMS Execption");
       e.printStackTrace ();
       } finally {
       if (connection != null) {
       try {
       connection.stop ();
       connection.close();
       } catch (JMSException e) {
       }
       }
       }
       System.out.println("SetUp Done.");
       }
      
       // members
       static final int REG = 0;
       static final int HTTP = 1;
       static final String[] TYPE = {"REG", "HTTP"};
       int type;
       Context ctx;
       Queue destination;
       QueueConnection connection;
       QueueConnectionFactory factory;
       QueueReceiver receiver;
       QueueSession session;
       QueueSender sender;
       TextMessage message;
      }
      Screen Print REG:
      Type = REG
      Calling InitialContext
      InitialContext Found
      Connection Factory instantiated
      Destination instantiated
      Connection instantiated
      Session instantiated
      Sender instantiated
      Receiver instantiated
      Message instantiated
      Message Property 'Player' set to 'one'
      Connection Started
      Message Sent
      Message Received: Success
      SetUp Done.
      Press any key to continue . . .
      Screen Print HTTP
      Type = HTTP
      Calling InitialContext
      Naming Exception
      javax.naming.NamingException: Failed to retrieve Naming interface [Root exception is java.io.FileNot
      FoundException: http://localHost:80/invoker/JMXInvokerServlet]
       at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java
      :69)
       at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
       at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
       at javax.naming.InitialContext.init(InitialContext.java:223)
       at javax.naming.InitialContext.<init>(InitialContext.java:197)
       at MessageTest.setUp(MessageTest.java:58)
       at MessageTest.main(MessageTest.java:29)
      Caused by: java.io.FileNotFoundException: http://localHost:80/invoker/JMXInvokerServlet
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
      39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorIm
      pl.java:27)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
       at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1186)
       at java.security.AccessController.doPrivileged(Native Method)
       at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:11
      80)
       at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:877)
       at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:1
      18)
       at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java
      :65)
       ... 6 more
      Caused by: java.io.FileNotFoundException: http://localHost:80/invoker/JMXInvokerServlet
       at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1131)
       at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:1850)
       at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:573)
       at java.net.URLConnection.getContentLength(URLConnection.java:468)
       at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:1
      13)
       ... 7 more
      SetUp Done.
      Press any key to continue . . .