我的目標是與消費從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端。它沒有達到。
「#」字符是否在您的server.xml中?要在xml中發表評論,你必須使用'<! - comment - >' –