我想要做以下事情,我不太確定是否不浪費時間:我試圖在weblogic servlet內部運行ActiveMQ嵌入式代理。這個想法是,客戶端將能夠通過http連接到JMS,並且嵌入式代理將爲請求提供服務。我知道這是一個瘋狂的想法,但它是一個遺留應用程序,很多客戶端代碼依賴於JMS。這個想法只是切換連接字符串並將庫添加到客戶端。 當我創建的TCP連接,它工作正常,但我不知道怎麼一個servlet映射到內部經紀人可通過Weblogic servlet訪問的ActiveMQ嵌入式代理
的限制是這些:
- 在WebLogic配置沒有變化(如數據源,橋樑,JMS等)
- 沒有春天
- HTTP只
這是web.xml中的servlet定義:
的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>
重要部件:
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
}
問題是我不知道怎麼做小服務程序的服務的方法和內部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
我不知道你想達到什麼。經紀人可能需要「靜態」才能工作。無論如何,AFAIK Weblogic包含一個「真正的」JMS。對不起,我認爲這是一個黑客。 – Beryllium
是的,這是一個黑客,因爲我無法改變一些政治。我想將現有的JMS提供程序更改爲可以通過http使用的嵌入式提供程序。我只有我的耳朵,不能修改其他任何東西。 – NeplatnyUdaj
你在深水裏我的朋友。 –