How to Acess JBOSS Naming Server (JNDI)/JBOSSMQ behind Firew
arunchaks Mar 30, 2005 2:45 PMI would like to send & receive mesages to JBOSSMQ (jboss 3.2.5) over internet. The server is behind NAT & Firewall plus DNS. The JNDI lookup keeps on failing. I traced out the reason being RMI protocol issue. please refer http://forum.java.sun.com/thread.jspa?threadID=289869&messageID=1242288 Also tried with HTTP tunneling enabled for JNDI. Below is the stack trace and code snippet.
Error Trace
javax.naming.NamingException: Failed to retrieve Naming interface. Root exception is java.net.UnknownHostException: arunp
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:153)
at java.net.Socket.connect(Socket.java:434)
at java.net.Socket.connect(Socket.java:384)
at sun.net.NetworkClient.doConnect(NetworkClient.java:139)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:386)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:602)
at sun.net.www.http.HttpClient.(HttpClient.java:303)
at sun.net.www.http.HttpClient.(HttpClient.java:264)
at sun.net.www.http.HttpClient.New(HttpClient.java:336)
at sun.net.www.http.HttpClient.New(HttpClient.java:317)
at sun.net.www.http.HttpClient.New(HttpClient.java:312)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:481)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:472)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:574)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:1178)
at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:475)
at java.net.URLConnection.getContentLength(URLConnection.java:370)
at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:112)
at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java:65)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.(InitialContext.java:195)
at JMSTest.doSend(JMSTest.java:28)
at com.dialup.test.JMSTest.main(JMSTest.java:53)
Test Case.
import java.util.Properties;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class JMSTest
{
public void doSend()throws Exception
{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "http://hostname/invoker/JNDIFactory");
InitialContext ctx = new InitialContext(properties);
Queue queue = (Queue) ctx.lookup("queue/TestQueue");
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
QueueConnection qc = qcf.createQueueConnection("arun","arun");
try
{
QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = qs.createSender(queue);
TextMessage message = qs.createTextMessage("testMessage @ " + System.currentTimeMillis());
sender.send(message);
}
finally
{
qc.close();
}
}
public static void main(String[] args) throws Exception
{
try
{
JMSTest sender = new JMSTest();
sender.doSend();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}