ClassCastException:weblogic.jms.client.JMSConnection无法强制转换为weblogic.jms.client.JMSXAConnection

ClassCastException:weblogic.jms.client.JMSConnection无法强制转换为weblogic.jms.client.JMSXAConnection,jms,weblogic,weblogic12c,xa,jms-topic,Jms,Weblogic,Weblogic12c,Xa,Jms Topic,我们正在将应用程序从Weblogic 10迁移到Weblogic 12。由于某些原因,我们无法连接到外部JMS主题,在开发环境中部署EAR后,我们得到的唯一信息是 ClassCastException: weblogic.jms.client.JMSConnection cannot be cast to weblogic.jms.client.JMSXAConnection 在ACC环境中,我们得到了另一个(但有点类似的例外) 两种环境都运行Weblogic 12.1.3.0.0 在从Web

我们正在将应用程序从Weblogic 10迁移到Weblogic 12。由于某些原因,我们无法连接到外部JMS主题,在开发环境中部署EAR后,我们得到的唯一信息是

ClassCastException: weblogic.jms.client.JMSConnection cannot be cast to weblogic.jms.client.JMSXAConnection
在ACC环境中,我们得到了另一个(但有点类似的例外)

两种环境都运行Weblogic 12.1.3.0.0

在从Weblogic 10(和Java6+OpenJPA1)迁移到Weblogic 12(和Java7+OpenJPA2)之前,同样的配置在Weblogic 10上工作得非常好

我们的MDB现在看起来是这样的(没有注释或任何东西,它只是一个空壳,什么都不做,甚至它也不工作)

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_0.xsd"
         version="3.0">
    <enterprise-beans>
        <message-driven>
            <ejb-name>SignalConsumerMDB</ejb-name>
            <ejb-class>a.b.c.SignalConsumerMDB</ejb-class>
            <transaction-type>Bean</transaction-type>
            <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.Topic</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>subscriptionDurability</activation-config-property-name>
                    <activation-config-property-value>Durable</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>topicMessagesDistributionMode</activation-config-property-name>
                    <activation-config-property-value>One-Copy-Per-Application</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>distributedDestinationConnection</activation-config-property-name>
                    <activation-config-property-value>LocalOnly</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>messageSelector</activation-config-property-name>
                    <activation-config-property-value>SignalType in ('a','b','c')</activation-config-property-value>
                </activation-config-property>
           </activation-config>
        </message-driven>
    </enterprise-beans>
    <assembly-descriptor>
        <security-role>
            <role-name>batchRole</role-name>
        </security-role>
    </assembly-descriptor>
</ejb-jar>
<persistence-unit name="aaa" transaction-type="JTA">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <jta-data-source>ABCDataSource</jta-data-source>
    <properties>
        <property name="connection.driver_class" value="com.ibm.db2.jcc.DB2Driver" />
        <property name="openjpa.TransactionMode" value="managed" />
        <property name="openjpa.ManagedRuntime" value="jndi(TransactionManagerName=javax.transaction.TransactionManager)" />
        <property name="openjpa.Log" value="DefaultLevel=${openjpa.log.level}, Runtime=${openjpa.log.level}, Tool=${openjpa.log.level}, SQL=${openjpa.sql.level}" />
        <property name="openjpa.Compatibility" value="CheckDatabaseForCascadePersistToDetachedEntity=true" />
        <property name="openjpa.jdbc.DBDictionary" value="db2(MaxColumnNameLength=38)"/>    
    </properties>
</persistence-unit>
JMS的weblogic调试输出为

DDMemberInformation : 
  DD Type                          = javax.jms.Topic
 DD ForwardingPolicy              = 1
  DD Config Name                   = aaa.ChangeSignal!ChangeSignalDistributed
  DD JNDI Name                     = aaa.ChangeSignal
  DD Member JNDI Name              = JMSapp4Zjavad011@aaa.ChangeSignal
  DD Member Name                   = aaa.ChangeSignal!JMSapp4Zjavad011@ChangeSignalDistributed
  DD Member Consumption Paused     = false
  DD Member Insertion Paused       = false
  DD Member Production Paused      = false
  DD Member Local JNDI Name        = null
  DD Member Server Name            = app4Zjavad011
  DD Member Cluster Name           = app1Cluster
  DD Member Migratable Target Name = null
  DD Member Domain Name            = wldev81domain
  DD Member AdvancedTopicSupported = true

####<Apr 21, 2017 10:19:56 AM CEST> <Debug> <JMSCDS> <zjavad12> <app1Zjavad121> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1492762796912> <BEA-000000> <Entry[1] = aaa.ChangeSignal!JMSapp1Zjavad011@ChangeSignalDistributed:  with destination id <4007994051863776153.25>: 
DDMemberInformation : 
  DD Type                          = javax.jms.Topic
 DD ForwardingPolicy              = 1
  DD Config Name                   = aaa.ChangeSignal!ChangeSignalDistributed
  DD JNDI Name                     = aaa.ChangeSignal
  DD Member JNDI Name              = JMSapp1Zjavad011@aaa.ChangeSignal
  DD Member Name                   = aaa.ChangeSignal!JMSapp1Zjavad011@ChangeSignalDistributed
  DD Member Consumption Paused     = false
  DD Member Insertion Paused       = false
  DD Member Production Paused      = false
  DD Member Local JNDI Name        = null
  DD Member Server Name            = app1Zjavad011
  DD Member Cluster Name           = app1Cluster
  DD Member Migratable Target Name = null
  DD Member Domain Name            = wldev81domain
  DD Member AdvancedTopicSupported = true
DDMemberInformation:
DD Type=javax.jms.Topic
DD ForwardingPolicy=1
DD Config Name=aaa.ChangeSignal!变化信号分布
DD JNDI名称=aaa.ChangeSignal
DD成员JNDI名称=JMSapp4Zjavad011@aaa.ChangeSignal
DD成员名称=aaa.ChangeSignal!JMSapp4Zjavad011@ChangeSignalDistributed
DD成员消费暂停=错误
DD成员插入暂停=错误
DD成员生产暂停=false
DD成员本地JNDI名称=null
DD成员服务器名称=app4Zjavad011
DD成员群集名称=app1Cluster
DD成员可迁移目标名称=空
DD成员域名=wldev81domain
DD成员AdvancedTopicSupported=true

####经过一个长周末,MDB自动连接到远程主题。我们仍然不知道为什么Weblogic12认为MDB是事务性的,而Weblogic10没有。这可能是因为远程主题被短暂地配置了XA连接工厂,但我们现在将永远不会看到它。weblogic也可能缓存连接,因此总是返回XA连接,即使我们不需要或不想要。清理所有缓存并重新启动两端可能会解决周末问题(否则等待另一个长周末=)。长周末过后,MDB会自动连接到远程主题。我们仍然不知道为什么Weblogic12认为MDB是事务性的,而Weblogic10没有。这可能是因为远程主题被短暂地配置了XA连接工厂,但我们现在将永远不会看到它。weblogic也可能缓存连接,因此总是返回XA连接,即使我们不需要或不想要。清理所有缓存并重新启动两端可能会解决周末问题(否则等待另一个长周末=)
<weblogic-enterprise-bean>
     <ejb-name>SignalConsumerMDB</ejb-name>
     <message-driven-descriptor>
         <destination-jndi-name>foreign.aaa.ChangeSignal</destination-jndi-name>
         <connection-factory-jndi-name>foreign.aaa.ChangeSignalConnectionFactory</connection-factory-jndi-name>
     </message-driven-descriptor>
 </weblogic-enterprise-bean>
<persistence-unit name="aaa" transaction-type="JTA">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <jta-data-source>ABCDataSource</jta-data-source>
    <properties>
        <property name="connection.driver_class" value="com.ibm.db2.jcc.DB2Driver" />
        <property name="openjpa.TransactionMode" value="managed" />
        <property name="openjpa.ManagedRuntime" value="jndi(TransactionManagerName=javax.transaction.TransactionManager)" />
        <property name="openjpa.Log" value="DefaultLevel=${openjpa.log.level}, Runtime=${openjpa.log.level}, Tool=${openjpa.log.level}, SQL=${openjpa.sql.level}" />
        <property name="openjpa.Compatibility" value="CheckDatabaseForCascadePersistToDetachedEntity=true" />
        <property name="openjpa.jdbc.DBDictionary" value="db2(MaxColumnNameLength=38)"/>    
    </properties>
</persistence-unit>
DDMemberInformation : 
  DD Type                          = javax.jms.Topic
 DD ForwardingPolicy              = 1
  DD Config Name                   = aaa.ChangeSignal!ChangeSignalDistributed
  DD JNDI Name                     = aaa.ChangeSignal
  DD Member JNDI Name              = JMSapp4Zjavad011@aaa.ChangeSignal
  DD Member Name                   = aaa.ChangeSignal!JMSapp4Zjavad011@ChangeSignalDistributed
  DD Member Consumption Paused     = false
  DD Member Insertion Paused       = false
  DD Member Production Paused      = false
  DD Member Local JNDI Name        = null
  DD Member Server Name            = app4Zjavad011
  DD Member Cluster Name           = app1Cluster
  DD Member Migratable Target Name = null
  DD Member Domain Name            = wldev81domain
  DD Member AdvancedTopicSupported = true

####<Apr 21, 2017 10:19:56 AM CEST> <Debug> <JMSCDS> <zjavad12> <app1Zjavad121> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1492762796912> <BEA-000000> <Entry[1] = aaa.ChangeSignal!JMSapp1Zjavad011@ChangeSignalDistributed:  with destination id <4007994051863776153.25>: 
DDMemberInformation : 
  DD Type                          = javax.jms.Topic
 DD ForwardingPolicy              = 1
  DD Config Name                   = aaa.ChangeSignal!ChangeSignalDistributed
  DD JNDI Name                     = aaa.ChangeSignal
  DD Member JNDI Name              = JMSapp1Zjavad011@aaa.ChangeSignal
  DD Member Name                   = aaa.ChangeSignal!JMSapp1Zjavad011@ChangeSignalDistributed
  DD Member Consumption Paused     = false
  DD Member Insertion Paused       = false
  DD Member Production Paused      = false
  DD Member Local JNDI Name        = null
  DD Member Server Name            = app1Zjavad011
  DD Member Cluster Name           = app1Cluster
  DD Member Migratable Target Name = null
  DD Member Domain Name            = wldev81domain
  DD Member AdvancedTopicSupported = true