我正在尝试了解JBoss中的JMS Queue,但是我遇到了一个错误。我正在关注此页面上的教程:https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/JMS_Examples-A_Point_To_Point_Example.html
我在这一行收到错误:Object tmp = iniCtx.lookup("ConnectionFactory")
这是完整的错误:
Jul 7, 2016 3:10:23 PM com.cloudlet.jms.SendRecvClient main
INFO: Begin SendRecvClient, now = 1467918623762
Jul 7, 2016 3:10:23 PM com.cloudet.jms.SendRecvClient sendRecvAsync
INFO: Begin sendRecvAsync
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.cloudlet.jms.SendRecvClient.setupPointToPoint(SendRecvClient.java:49)
at com.cloudlet.jms.SendRecvClient.sendRecvAsync(SendRecvClient.java:67)
at com.cloudlet.jms.SendRecvClient.main(SendRecvClient.java:106)
Exception in thread "main" java.lang.NullPointerException
at com.cloudlet.jms.SendRecvClient.sendRecvAsync(SendRecvClient.java:71)
at com.cloudlet.jms.SendRecvClient.main(SendRecvClient.java:106)
我的代码与提供的链接中的代码完全相同。我查了一下,发现我在JBoss文件夹中需要一些jndi.properties
文件。不幸的是,该文件不在JBoss文件夹中。我查看了一些关于它会是什么样子的例子,但每个例子都不同。
我该如何解决这个问题?提前谢谢!
答案 0 :(得分:0)
通过手动创建具有必要键/值对的Properties
对象然后将其传递给InitialContext
构造函数来修复它。
JBoss 属性:
Properties properties = new Properties();
properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.provider.url", "jnp://localhost:1099");
properties.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext context = new InitialContext(properties);
我从开场文章中提供的链接获得相同的输出。