0 Replies Latest reply on Oct 22, 2007 5:01 PM by ozorhan

    JMS Queue works on localhost, but not remote server

    ozorhan

      Hello,

      I have a JMS queue, which I've defined as follows:

      in jbossmq-destinations-service.xml

      <mbean code="org.jboss.mq.server.jmx.Queue"
       name="jboss.mq.destination:service=Queue,name=myQueue">
       <depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager</depends>
       <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>
       <attribute name="MessageCounterHistoryDayLimit">-1</attribute>
       <attribute name="SecurityConf">
       <security>
       <role name="guest" read="true" write="true"/>
       <role name="publisher" read="true" write="true" create="false"/>
       <role name="noacc" read="false" write="false" create="false"/>
       </security>
       </attribute>
       </mbean>


      in jms-ds.xml
      <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
       name="jboss.mq:service=JMSProviderLoader,name=JMSProvider">
       <attribute name="ProviderName">DefaultJMSProvider</attribute>
       <attribute name="ProviderAdapterClass">
       org.jboss.jms.jndi.JNDIProviderAdapter
       </attribute>
       <!-- The combined connection factory -->
       <attribute name="FactoryRef">java:/XAConnectionFactory</attribute>
       <!-- The queue connection factory -->
       <attribute name="QueueFactoryRef">java:/XAConnectionFactory</attribute>
       <!-- The topic factory -->
       <attribute name="TopicFactoryRef">java:/XAConnectionFactory</attribute>
       <!-- Uncomment to use HAJNDI to access JMS
       <attribute name="Properties">
       java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
       java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
       java.naming.provider.url=localhost:1100
       </attribute>
       -->
       </mbean>
      


      and in the server side java file


      // Create the queue properties
      Properties properties = new Properties();
      
      // Set the context properties
      properties = new Properties();
      properties.put(Context.INITIAL_CONTEXT_FACTORY,
       "org.jnp.interfaces.NamingContextFactory");
      properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
      properties.put(Context.PROVIDER_URL, "localhost");
      
      // STEP I - Create Regular Queue
      // Initialize the context
      incomingContext = new InitialContext(properties);
      
      // Obtain the JMS queue
      incomingQueue = (Queue) incomingContext.lookup("queue/myQueue");
      // Create the connection factory connection and the connection session
      incomingConnectionFactory = (QueueConnectionFactory) incomingContext.lookup("UIL2ConnectionFactory");
      
      incomingQueueConnection = incomingConnectionFactory.createQueueConnection();
      
      incomingQueueConnection.start();
      
      incomingQueueSession = incomingQueueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      
      // Create the JMS Sender
      incomingQueueReceiver = incomingQueueSession.createReceiver(incomingQueue);


      I use the following code in the client to connect to the server's JMS queue:
      // Create the queue properties
      properties = new Properties();
      
      // Set the context properties
      properties = new Properties();
      properties.put(Context.INITIAL_CONTEXT_FACTORY,
      "org.jnp.interfaces.NamingContextFactory");
      properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
      properties.put(Context.PROVIDER_URL, "SERVER_IP_ADDRESS");
      
      // STEP I - Create Regular Queue
      // Initialize the context
      incomingContext = new InitialContext(properties);
      
      // Obtain the JMS queue
      outgoingQueue = (Queue) outgoingContext
      .lookup("queue/myQueue");
      
      // Create the connection factory connection and the connection
      // session
      incomingConnectionFactory = (QueueConnectionFactory) incomingContext
      .lookup("UIL2ConnectionFactory");
      incomingQueueConnection = incomingConnectionFactory
      .createQueueConnection();
      
      incomingQueueConnection.start();
      
      incomingQueueSession = incomingQueueConnection.createQueueSession(
      false, Session.AUTO_ACKNOWLEDGE);


      Now this works when both the client and the server are on localhost. It also works when using my two development machines at home (they are both connected to the same router at home). But, when I try to connect to my productive server (which is at a remote location and not at home :), I get the following error when I try to connect to the queue from my client (I get this error at the client machine):

      javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
       java.net.ConnectException: Connection refused: connect]
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
       at javax.naming.InitialContext.lookup(InitialContext.java:351)
       at com.myProject.manager.ServerManagerJMSProducer.initialize(ServerManagerJMSProducer.java:124)
       at com.myProject.manager.ServerManagerJMSProducer.getInstance(ServerManagerJMSProducer.java:168)
       at com.myProject.manager.myProjectServerManager.run(myProjectServerManager.java:50)
       at java.lang.Thread.run(Thread.java:595)
      Caused by: java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
       java.net.ConnectException: Connection refused: connect
       at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
       at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
       at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
       at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
       at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
       ... 6 more
      Caused by: java.net.ConnectException: Connection refused: connect
       at java.net.PlainSocketImpl.socketConnect(Native Method)
       at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
       at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
       at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
       at java.net.Socket.connect(Socket.java:519)
       at java.net.Socket.connect(Socket.java:469)
       at java.net.Socket.<init>(Socket.java:366)
       at java.net.Socket.<init>(Socket.java:179)
       at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
       at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
       at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
       ... 11 more
      java.lang.NullPointerException
       at com.myProject.manager.ServerManagerJMSProducer.clearQueueMessages(ServerManagerJMSProducer.java:93)
       at com.myProject.manager.myProjectServerManager.run(myProjectServerManager.java:63)
       at java.lang.Thread.run(Thread.java:595)
      Exception in thread "myProject Server Manager" java.lang.NullPointerException
       at com.myProject.manager.ServerManagerJMSProducer.sendServerQuery(ServerManagerJMSProducer.java:82)
       at com.myProject.manager.myProjectServerManager.run(myProjectServerManager.java:65)
       at java.lang.Thread.run(Thread.java:595)


      Any ideas?

      Thanks in advance,
      Onur