【问题标题】:"Destination is mandatory" when mixing annotations and deployment descritors混合注释和部署描述符时“目标是强制性的”
【发布时间】:2015-01-19 16:52:46
【问题描述】:

我正在尝试在 wildfly 8.2.0-Final 上定义一个带有注释和部署描述符的消息驱动 bean。我想用注释声明配置的静态部分,用 xml 部署描述符声明可变部分。部署以下 mdb 时,出现异常。

这是 .failed-File 的内容:

{"JBAS014671: 失败的服务" => {"jboss.deployment.unit.\"MdbWithAnnotationsAndDescritors.jar\".component.NewMessageBean.START" => "org.jboss.msc.service.StartException in service jboss. deployment.unit.\"MdbWithAnnotationsAndDescritors.jar\".component.NewMessageBean.START: java.lang.RuntimeException: javax.resource.spi.InvalidPropertyException: 目的地是强制性的 引起:java.lang.RuntimeException:javax.resource.spi.InvalidPropertyException:目的地是强制性的 引起:javax.resource.spi.InvalidPropertyException:目的地是强制性的“}}

mdb 是

package test;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSDestinationDefinition;
import javax.jms.Message;
import javax.jms.MessageListener;
@JMSDestinationDefinition(name = "testQueue", interfaceName = "javax.jms.Queue", resourceAdapter = "jmsra", destinationName = "testQueue")
@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class NewMessageBean implements MessageListener {
    public NewMessageBean() {
    }
    @Override
    public void onMessage(Message message) {
    }
}

和 jboss.xml 部署描述符:

<jboss xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                             http://www.jboss.org/j2ee/schema/jboss_5_0.xsd" version="3.0">
    <security-domain>tutorial-default</security-domain>
    <enterprise-beans>
        <message-driven>
            <ejb-name>testQueue</ejb-name>
            <destination-jndi-name>testQueue</destination-jndi-name>
        </message-driven>    
    </enterprise-beans>
</jboss>

ejb-jar.xml 为空:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        version="3.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd">

</ejb-jar>

【问题讨论】:

    标签: wildfly-8


    【解决方案1】:

    知道了,我将目标 ActivationConfigProperty 添加到 mdb 类以消除异常:

    package test;
    
    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.jms.JMSDestinationDefinition;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    
    /**
     *
     * @author rainer
     */
    @MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "willBeOverwrittenInDeploymentDescriptor")
    })
    public class NewMessageBean implements MessageListener {
    
        public NewMessageBean() {
        }
    
        @Override
        public void onMessage(Message message) {
        }
    
    }
    

    我删除了 JMSDestinationDefinition,因为它不需要,我使用管理控制台创建了队列。 为了覆盖目标 jndi 名称,我创建了以下 ejb-jar.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar version="3.0" 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">
        <enterprise-beans>
            <message-driven>
                <ejb-name>NewMessageBean</ejb-name>
                <ejb-class>test.NewMessageBean</ejb-class>
    
                <activation-config>
                    <activation-config-property>
                        <activation-config-property-name>destination</activation-config-property-name>
                        <activation-config-property-value>/jms/testClientQueue</activation-config-property-value>
                    </activation-config-property>
                </activation-config>
            </message-driven>
        </enterprise-beans>
    </ejb-jar>
    

    现在 mdb 被部署并监听队列 jms/testClientQueue

    【讨论】:

      【解决方案2】:

      你需要在 ejb-jar.xml 而不是 jboss.xml 中定义

      但是,您可能更喜欢使用注释替换,其中值是从系统属性或 jboss.properties 中提取的,在较新版本的 wildfly 或 EAP 6.4 中

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 2013-01-16
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多