2016-02-18 57 views
2

我的目標是與消費從ActiveMQ的在WebSphere應用服務器自由(完整的Java EE標準)的消息。不幸的是,我無法弄清楚如何配置WebSphere Liberty。使用的ActiveMQ服務器即時可用,並且我添加了一個名爲myQueue的隊列。的WebSphere自由的ActiveMQ

在我的Java EE應用程序,我想如果有一個消息隊列它獲取踢消息驅動Bean。我試圖從wasDev JMS Example上「偷」配置,就像其他人在example上做的那樣。但不幸的是配置不適合我。我研究了活動的mq資源適配器設置,並嘗試在我的server.xml中使用它們。

首先我從網上下載的ActiveMQ資源適配器RAR和包括到服務器上,並在server.xml這樣的:

<resourceAdapter id="activemq" location="/opt/ibm/wlp/usr/servers/defaultServer/resources/activemq-rar-5.13.1.rar"> 
    <properties.activemq ServerUrl="tcp://192.168.200.6:61616" /> 
</resourceAdapter> 

這應該主動的資源適配器,並告訴他在網站服務器位於。接下來我寫了我的Message Driven Bean,它只輸出MessageID。

@MessageDriven(name = "PythonDaemonMessageEJB") 

public class PythonDaemonMessageBean implements MessageListener { 
    public PythonDaemonMessageBean() { 
    } 

    @Override 
    public void onMessage(Message var1) { 
     try { 
      System.out.println(var1.getJMSMessageID()); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我想將onMessage稱爲asoon消息在隊列中。接下來我做了一個ejb-jar.xml中的條目:

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" 
    version="3.1"> 
    <enterprise-beans> 
    <session> 
     <ejb-name>TestEJB</ejb-name> 
     <ejb-class>ch.TestBean</ejb-class> 
     <session-type>Stateless</session-type> 
     <transaction-type>Container</transaction-type> 
    </session> 
    <message-driven> 
     <ejb-name>PythonDaemonMessageEJB</ejb-name> 
     <ejb-class>ch.PythonDaemonMessageBean</ejb-class> 
     <messaging-type>javax.jms.MessageListener</messaging-type> 
     <transaction-type>Container</transaction-type> 
     <message-destination-type>javax.jms.Queue</message-destination-type> 
     <activation-config> 
      <activation-config-property> 
       <activation-config-property-name>destination</activation-config-property-name> 
       <activation-config-property-value>myQueue</activation-config-property-value> 
      </activation-config-property> 
      <activation-config-property> 
       <activation-config-property-name>destinationType</activation-config-property-name> 
       <activation-config-property-value>javax.jms.Queue</activation-config-property-value> 
      </activation-config-property> 
     </activation-config> 
    </message-driven> 
</enterprise-beans> 

最後一步我 「活動」 豆在我的server.xml

<jmsActivationSpec id="cert-manager-ear/cert-manager-ejb/PythonDaemonMessageEJB" /> 

在這就是它 - 在我的理解的東西現在應該沒問題。這裏是包含我嘗試過的其他東西的完整server.xml。如果你有解決方案,請解釋我做錯了什麼。

<server description="new server"> 

    <!-- Enable features --> 
    <featureManager> 
     <feature>javaee-7.0</feature> 
    <feature>localConnector-1.0</feature> 
    </featureManager> 

    <httpEndpoint id="defaultHttpEndpoint" 
        httpPort="9080" 
        httpsPort="9443" /> 

    <!-- Automatically expand WAR files and EAR files --> 
    <applicationManager autoExpand="true"/> 

    <resourceAdapter id="activemq" location="/opt/ibm/wlp/usr/servers/defaultServer/resources/activemq-rar-5.13.1.rar"> 
     <properties.activemq ServerUrl="tcp://192.168.200.6:61616" /> 
    </resourceAdapter> 

    <jmsActivationSpec id="cert-manager-ear/cert-manager-ejb/PythonDaemonMessageEJB" /> 
    #  <properties.activemq /> #destinationRef="jndi/MDBQ" destinationType="javax.jms.Queue" /> 
    # </jmsActivationSpec> 

    # <jmsQueueConnectionFactory jndiName="jndi_JMS_BASE_QCF"> 
    #  <properties.activemq /> 
    # </jmsQueueConnectionFactory> 

    # <jmsQueue> jndiName="jndi_INPUT_Q"> 
    #  <properties.activemq PhysicalName="QUEUE1" /> 
    # </jmsQueue> 

    # <jmsQueue id="jndi/MDBREPLYQ" jndiName="jndi/MDBREPLYQ"> 
    #  <properties.activemq PhysicalName="MDBREPLYQ" /> 
    # </jmsQueue> 

    # <jmsQueue id="jndi/MDBQ" jndiName="jndi/MDBQ"> 
    #  <properties.activemq PhysicalName="myQueue" /> 
    # </jmsQueue> 
    </server> 

我使用WebSphere自由V8.5.5.8和ActiveMQ的5.13.1

日誌文件中說:

The message endpoint for the message driven bean PythonDaemonMessageEJB can not be activated because the target myQueue is not available. 

我的Python腳本可以讀取和寫入到目標沒有什麼問題。 ActiveMQ日誌文件不會說任何內容,所以我認爲問題不在ActiveMQ端。它沒有達到。

+0

「#」字符是否在您的server.xml中?要在xml中發表評論,你必須使用'<! - comment - >' –

回答

2

需要對服務器配置進行一些更新才能使其工作。

首先,你需要在激活配置屬性所指定的目標相匹配的ID的jmsQueue元素。例如,

<jmsQueue id="myQueue" jndiName="jndi/MDBQ"> 
     <properties.activemq PhysicalName="myQueue" /> 
    </jmsQueue> 

其次,jmsActivationSpec元素需要嵌套properties.activemq(即使你不希望覆蓋任何資源,並希望所有默認設置),以確定該jmsActivationSpec對應於您的ResourceAdapter配置與id activemq(與其他任何可以添加到配置中的resourceAdapter相比)。例如,

<jmsActivationSpec id="cert-manager-ear/cert-manager-ejb/PythonDaemonMessageEJB" /> 
    <properties.activemq /> 
</jmsActivationSpec> 
+0

嘿,就是這樣 - 非常感謝你!!!!!!! –

+0

@DarioLötscher如果這回答了您的問題,您應該點擊答案左邊的複選標記以接受它。這將增加回答者的聲譽,並且會提高您的接受率,這使得人們更有可能在未來回答您的問題。 –

相關問題