Jakarta ee 如何在Wildfly 10中配置JMS?在subsystem下找不到JMS菜单

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

目前,我正在编写一个运行在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.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.xml
java:jboss/exported/jms/testingQFactory
中指定的条目?队列也一样-它应该有jms条目名
java:/jms/queue/testingQ
谢谢您的快速回复@yntelectual。是的,我使用standalone.sh-c standalone full.xml。我将MDBBean作为消息驱动bean。我在问题中包含了代码。