Jakarta ee 如何在Wildfly 10中配置JMS?在subsystem下找不到JMS菜单
目前,我正在编写一个运行在Wildfly 10上的JMS示例应用程序。但我看不到在wildfly 10的管理控制台子系统中创建JMS队列的菜单。请帮助我找到Wildfly 10管理控制台中的JMS菜单 我执行了上述操作,但在启动wildfly 10服务器时出现了一些异常。以下是异常:Jakarta ee 如何在Wildfly 10中配置JMS?在subsystem下找不到JMS菜单,jakarta-ee,jms,wildfly-10,Jakarta Ee,Jms,Wildfly 10,目前,我正在编写一个运行在Wildfly 10上的JMS示例应用程序。但我看不到在wildfly 10的管理控制台子系统中创建JMS队列的菜单。请帮助我找到Wildfly 10管理控制台中的JMS菜单 我执行了上述操作,但在启动wildfly 10服务器时出现了一些异常。以下是异常: Failed to process phase INSTALL of subdeployment "JMS1-war.war" of deployment "dfc.ear" Caused by: org
Failed to process phase INSTALL of subdeployment "JMS1-war.war" of deployment "dfc.ear"
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEE0092: No message destination with name JMS1-ejb.jar#jms/testingQ for binding java:module/env/jms/testingQ"},
"WFLYCTL0180: Services with missing/unavailable dependencies" => [
"jboss.deployment.unit."dfc.ear".deploymentCompleteService is missing [jboss.deployment.subunit."dfc.ear"."JMS1-ejb.jar".deploymentCompleteService, jboss.deployment.subunit."dfc.ear"."JMS1-war.war".deploymentCompleteService]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.HandleDelegate is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.ValidatorFactory is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.InstanceName is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]",
"jboss.deployment.subunit."dfc.ear"."JMS1-ejb.jar".INSTALL is missing [jboss.deployment.subunit."dfc.ear"."JMS1-war.war".deploymentCompleteService]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.InAppClientContainer is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.ORB is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]",
"jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean.Validator is missing [jboss.naming.context.java.comp.dfc.JMS1-ejb.MDBBean]"
我的wildfly standalone-full.xml配置如下:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<server name="default">
<security-setting name="#">
<role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
</security-setting>
<address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
<http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
<http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<jms-queue name="testingQ">
<entry name="jms/testingQ"/>
<entry name="java:jboss/exported/jms/testingQ"/>
</jms-queue>
<connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory"/>
<connection-factory name="RemoteConnectionFactory" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/>
<connection-factory name="testingQFactory" connectors="http-connector" entries="java:jboss/exported/jms/testingQFactory"/>
<pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
</server>
</subsystem>
private Message createJMSMessageForjmsTestingQ(Session session, Object
messageData) throws JMSException {
// TODO create and populate message to send
TextMessage tm = session.createTextMessage();
tm.setText(messageData.toString());
return tm;
}
private void sendJMSMessageToTestingQ(Object messageData) throws
NamingException, JMSException {
Context c = new InitialContext();
ConnectionFactory cf = (ConnectionFactory)
c.lookup("java:comp/env/jms/testingQFactory");
Connection conn = null;
Session s = null;
try {
conn = cf.createConnection();
s = conn.createSession(false, s.AUTO_ACKNOWLEDGE);
Destination destination = (Destination)
c.lookup("java:comp/env/jms/testingQ");
MessageProducer mp = s.createProducer(destination);
mp.send(createJMSMessageForjmsTestingQ(s, messageData));
} finally {
if (s != null) {
try {
s.close();
} catch (JMSException e) {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close
session", e);
}
}
if (conn != null) {
conn.close();
}
}
}
我的消息驱动Bean如下所述:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dfc.jms;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import javax.jms.MessageListener;
/**
*
* @author croushan
*/
public class MDBBean implements MessageDrivenBean, MessageListener {
private MessageDrivenContext context;
// <editor-fold defaultstate="collapsed" desc="EJB infrastructure methods. Click on the + sign on the left to edit the code.">
/**
* @see javax.ejb.MessageDrivenBean#setMessageDrivenContext(javax.ejb.MessageDrivenContext)
*/
public void setMessageDrivenContext(MessageDrivenContext aContext) {
context = aContext;
}
/**
* See section 15.4.4 of the EJB 2.0 specification
* See section 15.7.3 of the EJB 2.1 specification
*/
public void ejbCreate() {
// TODO Add code to acquire and use other enterprise resources (DataSource, JMS, enterprise bean, Web services)
}
/**
* @see javax.ejb.MessageDrivenBean#ejbRemove()
*/
public void ejbRemove() {
// TODO release any resource acquired in ejbCreate.
// The code here should handle the possibility of not getting invoked
// See section 15.7.3 of the EJB 2.1 specification
}
// </editor-fold>
public void onMessage(Message aMessage) {
System.out.println("Message is :"+aMessage.toString());
}
}
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
包dfc.jms;
导入javax.ejb.MessageDrivenBean;
导入javax.ejb.MessageDrivenContext;
导入javax.jms.Message;
导入javax.jms.MessageListener;
/**
*
*@作者裘珊
*/
公共类MDBBean实现MessageDrivenBean、MessageListener{
私有消息驱动上下文;
//
/**
*@see javax.ejb.MessageDrivenBean#setMessageDrivenContext(javax.ejb.MessageDrivenContext)
*/
public void setMessageDrivenContext(MessageDrivenContext aContext){
上下文=文本;
}
/**
*请参阅EJB2.0规范的第15.4.4节
*参见EJB2.1规范的第15.7.3节
*/
public void ejbCreate(){
//TODO添加代码以获取和使用其他企业资源(数据源、JMS、企业bean、Web服务)
}
/**
*@see javax.ejb.MessageDrivenBean#ejbRemove()
*/
公共void ejbRemove(){
//TODO释放在ejbCreate中获取的任何资源。
//这里的代码应该处理不被调用的可能性
//参见EJB2.1规范的第15.7.3节
}
//
消息上的公共无效(消息A消息){
System.out.println(“消息是:+aMessage.toString());
}
}
下面是ejb-jar.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<enterprise-beans>
<message-driven>
<display-name>MDBBeanMDB</display-name>
<ejb-name>MDBBean</ejb-name>
<ejb-class>dfc.jms.MDBBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-link>jms/testingQ</message-destination-link>
<activation-config>
<activation-config-property>
<activation-config-property-name>acknowledgeMode</activation-config-property-name>
<activation-config-property-value>Auto-acknowledge</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>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>MDBBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<message-destination>
<display-name>Destination for MDBBeanMDB</display-name>
<message-destination-name>jms/testingQ</message-destination-name>
</message-destination>
</assembly-descriptor>
</ejb-jar>
MDBBeanMDB
MDBBean
dfc.jms.MDBBean
容器
javax.jms.Queue
jms/testingQ
致谢方式
自动确认
目的型
javax.jms.Queue
MDBBean
*
要求的
MDBBeanMDB的目标
jms/testingQ
谢谢,
Chandan消息传送不包括在wildfly 10的默认独立配置文件中。您可以切换到
standalone full
或standalone full ha
配置文件,或手动启用相应的子系统messaging activemq
。为此,您需要添加扩展名:
然后是子模块配置:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<server name="default">
<security-setting name="#">
<role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
</security-setting>
<address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
<http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
<http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
<connection-factory name="RemoteConnectionFactory" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
</server>
</subsystem>
在域模式下,配置文件
full
和full ha
默认启用了消息传递功能。我已经编辑了我的问题,包括了我的代码和收到的错误。请查看并帮助我。您是否使用standalone full.xml
启动服务器?您是否使用standalone.sh-c standalone full.xml
?您的servlet不使用任何消息,但从堆栈跟踪来看,您的servlet似乎有一个名为MDBBean
的MDB。它看起来像什么?为什么要使用java:comp/env/jms/testingQFactory
查找连接工厂,而不是使用standalone.xmljava:jboss/exported/jms/testingQFactory
中指定的条目?队列也一样-它应该有jms条目名java:/jms/queue/testingQ
谢谢您的快速回复@yntelectual。是的,我使用standalone.sh-c standalone full.xml。我将MDBBean作为消息驱动bean。我在问题中包含了代码。