从servlet向HornetQ队列添加项目

时间:2015-06-09 01:13:12

标签: java jboss hornetq jboss-eap-6

我有一个项目,它被构建为war文件并部署到JBOSS服务器。 JBOSS服务器的standalone-full-ha.xml文件配置为创建多个队列。 war文件使用Spring注册一个类来监听这些队列,并处理它获得的消息。通常将消息放入队列的应用程序由另一个供应商编写;我不知道代码是什么样的。但是,我需要能够在我的开发环境中将消息添加到队列中以进行测试。

我写了一个小servlet并将其添加到战争中以尝试此测试。但是,当我调用servlet时,我得到一个异常:

13:54:12,211 ERROR [stderr] (http-/0.0.0.0:8080-1) javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeExcept
ion: Operation failed with status WAITING]
13:54:12,211 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36)
13:54:12,211 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:121
)
13:54:12,211 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.naming.InitialContext.init(InitialContext.java:242)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.naming.InitialContext.<init>(InitialContext.java:216)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at com.me.me.servlets.SingleFileImportServlet.doGet(SingleFileImportServlet.java:75)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
13:54:12,226 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.modcluster.container.jbossweb.JBossWebContext$RequestListenerValve.event(JBossWebContext.ja
va:67)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.modcluster.container.jbossweb.JBossWebContext$RequestListenerValve.invoke(JBossWebContext.j
ava:48)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java
:169)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
13:54:12,242 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at java.lang.Thread.run(Thread.java:745)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1) Caused by: java.lang.RuntimeException: Operation failed with status WAITING
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.protocol.IoFutureHelper.get(IoFutureHelper.java:89)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.NamingStoreCache.getRemoteNamingStore(NamingStoreCache.java:56)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateCachedNamingStore(InitialContextFacto
ry.java:166)
13:54:12,257 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateNamingStore(InitialContextFactory.jav
a:139)
13:54:12,273 ERROR [stderr] (http-/0.0.0.0:8080-1)      at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:104
)
13:54:12,273 ERROR [stderr] (http-/0.0.0.0:8080-1)      ... 22 more

这是第75行之前和之前的代码(在堆栈跟踪中引用)。它是从以前的测试中借来的,所以我有理由相信它应该有用。

Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");

properties.put(Context.PROVIDER_URL, "remote://127.0.0.1:4447");
properties.put(Context.SECURITY_PRINCIPAL, "user");
properties.put(Context.SECURITY_CREDENTIALS, "pwd");

ConnectionFactory connectionFactory = null;
Destination destination = null;

try {
    Context context = new InitialContext(properties);

所以有几个问题: 1)在这个servlet中你能看到我需要做些什么来连接队列吗? 2)我有“remote://”的有效其他值的文档吗? 3)据说我有4447需要匹配JBOSS配置中的东西的端口 - 是否有相关的文档?

由于

1 个答案:

答案 0 :(得分:1)

只有在从服务器外部执行JNDI查找时,才需要传递给InitialContext的工厂,URL和安全原则。

如果包含测试servlet的war正在配置了队列的同一服务器内部署,那么您应该能够实例化一个没有任何属性的新InitialContext()来执行对本地JDNI实例的查找。

try {
    Context context = new InitialContext();