可通过Weblogic servlet访问ActiveMQ嵌入式代理

时间:2013-08-28 14:38:20

标签: java servlets jms weblogic activemq

我想做以下事情并且我不确定我是不是在浪费时间:我正在尝试在weblogic servlet中运行ActiveMQ嵌入式代理。我们的想法是,客户端将能够通过http连接到JMS,嵌入式代理将为请求提供服务。我知道这是一个疯狂的想法,但它是一个遗留应用程序,很多客户端代码依赖于JMS。这个想法只是切换连接字符串并将库添加到客户端。 我在创建tcp连接时工作正常,但我不知道如何将servlet映射到内部代理

限制如下:

  • weblogic配置没有变化(如数据源,网桥,JMS等)
  • 没有春天
  • 仅限HTTP

这是web.xml中的servlet定义:

<servlet>
    <servlet-name>ActiveMQServlet</servlet-name>
    <servlet-class>com.mycompany.ActiveMQServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ActiveMQ</servlet-name>
    <url-pattern>/servlet/ActiveMQServlet</url-pattern>
</servlet-mapping>

servlet的重要部分:

public class ActiveMQServlet extends HttpServlet {
private BrokerService broker;

private static final Log log = LogFactory.getLog(new Object() {
}.getClass().getEnclosingClass());


@Override
public void init() throws ServletException {
    log.info("Load activeMQ");
    // configure the broker
    try {
        TransportConnector connector = new TransportConnector();
        connector.setUri(new URI(ACTIVE_MQ_URL));
        broker = new BrokerService();
        broker.addConnector(connector);
        broker.start();
        log.info("ActiveMQ loaded succesfully");

    } catch (Exception e) {
        log.error("Unable to load ActiveMQ!", e);
    }
}

@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    log.info("Received call.... ");
    log.info("Request: "+request);
    //todo
}

问题是我不知道如何在servlet的服务方法和内部ActiveMQ代理之间进行请求/响应映射。 另一件事是,我正在尝试解决由ActiveMQ代理使用的slf4j引起的一些类路径冲突,并且已经花费了几个小时。 但也许我只是在做一些不可能/非常愚蠢的事情。

当我尝试通过简单的客户端进行连接时,我遇到了这个异常

javax.jms.JMSException: Could not connect to broker URL: http://localhost:8888/myapp/servlet/ActiveMQServlet. Reason: java.io.IOException: Failed to perform GET on: http://localhost:8888/myapp/servlet/ActiveMQServlet as response was: Not Found
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:293)
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:191)
...
Caused by: java.io.IOException: Failed to perform GET on: http://localhost:8888/myapp/servlet/ActiveMQServlet as response was: Not Found
    at org.apache.activemq.transport.http.HttpClientTransport.doStart(HttpClientTransport.java:275)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)

执行此操作时,不会执行servlet中的代码。 servlet路径很好。如果我在浏览器中打开它,我会得到空白页面和日志消息。

我正在使用ActiveMQ 5.8.0和Weblogic 10.3.6

1 个答案:

答案 0 :(得分:0)

我尝试做类似的事情,而我发现的事情是MessageListenerServlet - 我仍在寻找设置示例(我在处理相对较新的事情时) servlets)但我认为它应该允许这种事情。虽然我认为您的主要应用程序需要在启动时设置BrokerService,并且servlet只需要引用该地址。就我而言,我们并没有使用websphere,但是&#34;通过http&#34;从外部来源与嵌入式ActiveMQ实例交谈的一般前提。是一样的。