Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
activemqservlet与java客户端的连接_Java_Jms_Weblogic_Activemq - Fatal编程技术网

activemqservlet与java客户端的连接

activemqservlet与java客户端的连接,java,jms,weblogic,activemq,Java,Jms,Weblogic,Activemq,我试图从Java连接到一个正在运行的ActiveMQ servlet(在Weblogic 12上),但在conn.start()上出现以下异常:: 代码如下: QueueConnectionFactory factory = new ActiveMQConnectionFactory("http://localhost:8888/myApp/amq"); Connection conn = factory.createConnection(); conn.start(); (代码基于此示例:)

我试图从Java连接到一个正在运行的ActiveMQ servlet(在Weblogic 12上),但在
conn.start()上出现以下异常:

代码如下:

QueueConnectionFactory factory = new ActiveMQConnectionFactory("http://localhost:8888/myApp/amq");
Connection conn = factory.createConnection();
conn.start();
(代码基于此示例:)

我很确定ActiveMQ代理和AjaxServlet都很好,因为我可以使用js客户端发送和接收消息

servlet在web.xml中的定义如下:

<context-param>
    <param-name>org.apache.activemq.brokerURL</param-name>
    <param-value>vm://localhost</param-value>
</context-param>
<context-param>
    <param-name>org.apache.activemq.embeddedBroker</param-name>
    <param-value>true</param-value>
</context-param>
<servlet>
    <servlet-name>AjaxServlet</servlet-name>
    <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
    <servlet-mapping>
    <servlet-name>AjaxServlet</servlet-name>
    <url-pattern>/amq/*</url-pattern>
</servlet-mapping>
...

org.apache.activemq.brokerURL
vm://localhost
org.apache.activemq.embeddedBroker
真的
AjaxServlet
org.apache.activemq.web.AjaxServlet
1.

以下是Weblogic的例外情况:

      ####<Sep 3, 2013 4:19:32 PM UTC> <Error> <Kernel> <mymachine> <myServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1378225172656> <BEA-000802> <ExecuteRequest failed
java.lang.IllegalStateException: Can NOT error at this state: AsyncCompleted.
java.lang.IllegalStateException: Can NOT error at this state: AsyncCompleted
at weblogic.servlet.internal.async.DefaultState.notifyError(AsyncStates.java:62)
 at weblogic.servlet.internal.async.AsyncContextImpl.handleError(AsyncContextImpl.java:125)
 at weblogic.servlet.internal.async.DispatchHandler.run(DispatchHandler.java:33)
 at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
 >
 ####<Sep 3, 2013 4:19:32 PM UTC> <Error> <HTTP> <mymachine> <myServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1378225172779> <BEA-101020> <[ServletContext@1154401993[app:ino-all module:ino path:null spec-version:3.0]] Servlet failed with an Exception
     java.lang.UnsupportedOperationException: A destination must be specified.
     at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:257)
     at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:224)
     at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:300)
     at org.apache.activemq.web.WebClient.send(WebClient.java:243)
     at org.apache.activemq.web.MessageListenerServlet.doPost(MessageListenerServlet.java:219)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:751)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
     at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
     at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
     at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
     at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)
     at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
     at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
     at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:45)
     at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
####

####如果要尝试使用Ajax servlet,我认为不需要在Java客户机中创建
ActiveMQConnectionFactory
。如果您查看与发行版捆绑在一起的应用程序,javascript所做的只是构造一个POST请求,将消息放入队列

如果您查看ActiveMQ Ajax文档的一节,它会解释一些幕后发生的事情。因此,我认为如果您想为Java客户机使用AjaxServlet,您需要构建一个类似于javascript创建
XMLHttpRequest
的方法

或者,如果您想遵循链接到的示例,我相信您需要这样连接:

// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();

tcp://localhost:61616
应该可以工作,因为ActiveMQ在端口61616上添加了tcp连接器。

是否有任何stacktrace打印到Weblogic控制台/标准输出日志?您得到的
响应是:HTTP/1.1500内部服务器错误
响应,这似乎表明服务器收到了请求,但在处理请求时遇到了未捕获的异常。是的,您是对的。我看错了日志文件。我把它添加到问题中。谢谢你的回答。我想我应该明确我想要完成什么。我现有的客户机是根据JMS规范和防火墙限制编码的。因此,我希望将客户端切换到ActiveMQ JMS实现,并通过http进行通信。不幸的是,我不能选择使用tcp或不使用JMS。也许我正在尝试做一些不可能的事情,但我觉得我已经接近解决方案了。
// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();