无法在EJB2中为Glassfish 4部署具有持久订阅(主题)的MDB

时间:2014-01-07 11:35:59

标签: glassfish jms message-driven-bean ejb-2.x

我正在从OC4J迁移到glassfish,并努力在Glassfish4上部署具有持久订阅的MDB

MyObserver类实现了MessageDrivenBean和MessageListener,并在主题中注册 创建主题:

asadmin create-jms-resource --restype=javax.jms.Topic --description="Topic for EventObjectMessage(s)" --property Name=PhysicalTopic jms/EventObjectMessageTopic

创建主题工厂:

asadmin create-jms-resource --restype=javax.jms.TopicConnectionFactory --description="Topic factory" --property ClientId=EventObjectMessageTopicConnectionFactoryID EventObjectMessageTopicConnectionFactory

创建了物理目的地:

asadmin create-jmsdest --desttype topic EventObjectMessageTopic

在ejb-jar.xml中:

<message-driven>
            <ejb-name>MyObserver </ejb-name>
            <ejb-class>com.firm.MyObserver </ejb-class>
            <transaction-type>Container</transaction-type>
            <message-selector>qualifiedName = 'com.firm.EventObjectMessage' AND objectsClassName = 'com.firm.SomeObject'</message-selector>
            <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
            <message-driven-destination>
                <destination-type>javax.jms.Topic</destination-type>
                <subscription-durability>Durable</subscription-durability>
            </message-driven-destination>
... a lot of refs
</message-driven> 

和glassfish-ejb-jar.xml

<ejb>
            <ejb-name>MyObserver </ejb-name>
            <jndi-name>jms/EventObjectMessageTopic</jndi-name>
            <mdb-resource-adapter>
                <activation-config>
                    <activation-config-property>
                        <activation-config-property-name>clientId</activation-config-property-name>
                        <activation-config-property-value>EventObjectMessageTopicConnectionFactoryID</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>
                        <activation-config-property-name>subscriptionName</activation-config-property-name>
                        <activation-config-property-value>ASubscriptionName</activation-config-property-value>
                    </activation-config-property>                   
                </activation-config>
            </mdb-resource-adapter>
        </ejb>

这是stacktrace的一部分:

[2014-01-07T08:44:44.308+0100] [glassfish 4.0] [SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=46 _ThreadName=admin-listener(3)] [timeMillis: 1389080684308] [levelValue: 1000] [[
  Exception during lifecycle processing
java.lang.RuntimeException: EJB Container initialization error
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:234)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:291)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:99)
...
Caused by: java.lang.Exception
    at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:216)
    at org.glassfish.ejb.mdb.MessageBeanContainer.<init>(MessageBeanContainer.java:252)
    at org.glassfish.ejb.mdb.MessageBeanContainerFactory.createContainer(MessageBeanContainerFactory.java:63)
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:221)
    ... 68 more
Caused by: javax.resource.NotSupportedException: MQRA:EC:Error creating Direct Message Consumer:
createConsumer on JMSService:jmsdirect failed for connectionId:8664718337762585088 and sessionId:8664718337762587904 due to [B4135]: Cannot add durable consumer MyObserver. No ClientID was set on connection.
    at com.sun.messaging.jms.ra.EndpointConsumer.createDirectMessageConsumer(EndpointConsumer.java:890)
    at com.sun.messaging.jms.ra.EndpointConsumer._init(EndpointConsumer.java:345)

我不确定clientId是否应该只在connectionfactory上设置,并且不能像我那样设置为mdb-resource-adapter。 有没有人有提示或可以指出我想念的。

最好的问候Geir

0 个答案:

没有答案
相关问题