JBoss Wildfly 10:xnio在JBoss 7上调用EJB3.1时的ClassCastException

问题描述:

我试图通过JNDI从Wildfly 10远程调用JBoss 7上的EJB3.1应用程序。JBoss Wildfly 10:xnio在JBoss 7上调用EJB3.1时的ClassCastException

从一个独立的Java客户端执行的代码工作得很好,部署在Wildfly,我收到一个ClassCastException:

java.lang.ClassCastException: org.xnio.SingleOption cannot be cast to org.xnio.Option 

下面是属性我使用:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=true 
remote.connectionprovider.create.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.connections=default 
remote.connection.default.host=some.server 
remote.connection.default.port=4647 
remote.connection.default.connect.options.org.xnio.Options.SSL_ENABLED=true 
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.clusters=ejbremote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.cluster.ejb.connect.options.org.xnio.Options.SSL_ENABLED=true 
remote.connection.default.username=user 
remote.connection.default.password=password 
org.jboss.ejb.client.scoped.context=true 
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming 

项目有jboss-as-ejb-client-bom依赖项:

<dependency> 
    <groupId>org.jboss.as</groupId> 
    <artifactId>jboss-as-ejb-client-bom</artifactId> 
    <version>7.2.0.Final</version> 
    <type>pom</type> 
</dependency> 

Lookup looks s标准:

Context ctx = new InitialContext(properties); 
Service service = (Service) ctx.lookup(Service.JNDI_PATH); 

任何想法?

+0

会发生什么,如果你完全删除了'的jboss-AS-EJB-客户bom'依赖? –

+0

标准的“没有EJBReceiver可用的错误信息”:/ – Kaessrin

+0

你在这里做的与文档描述的内容看起来不一样[从远程服务器实例的EJB调用](https://docs.jboss.org/author/display/WFLY10/EJB + invocations + from + a + remote + server + instance) –

检查如何打包应用程序,我想你会在部署的归档中包含org.xnio库。 在这种情况下,它将由导致此错误的不同类加载器加载。

包含以下内容添加jboss的部署,structure.xml到你的战争的顶层:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
    <deployment> 
    <dependencies> 
     <module name="org.jboss.xnio"></module> 
    </dependencies> 
    </deployment> 
</jboss-deployment-structure> 
+0

感谢您的回复。 xnio依赖关系是jboss-as-ejb-client-bom的一部分。我检查了这些版本,并且野蝇使用了xnio的3.4.0.Final,ejb客户端bom在3.0.7.Final中使用它们。我现在尝试了以下几件事:1)像我建议的那样,将jboss-deployment-structure.xml添加到我的war文件的WEB-INF中。没有效果。阅读关于部署结构的一些内容,2)尝试将该模块作为排除模块添加到部署结构中(我猜野蛮人使用的是本地版本的xnio而不是打包的版本?),但是也没有工作。 – Kaessrin

+0

3)我还做了什么:完全从依赖关系中排除xnio:进行服务调用时,获取经典的“No EJB Receiver available”错误消息。 4)排除了xnio,而是在相同版本中明确添加了wildfly使用:同样,ClassCastException。 – Kaessrin

+0

我想你使用AS7。 在这种情况下,您必须将依赖项设置为“org.xno模块”。 请参见[AS7中的类加载](https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7) –