【问题标题】:JBoss Wildfly 10: xnio ClassCastException when calling EJB3.1 on JBoss 7JBoss Wildfly 10:在 JBoss 7 上调用 EJB3.1 时出现 xnio ClassCastException
【发布时间】:2017-05-17 07:26:25
【问题描述】:

我正在尝试通过 JNDI 从 Wildfly 10 远程调用 JBoss 7 上的 EJB3.1 应用程序。

从独立的 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>

查找看起来很标准:

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

有什么想法吗?

【问题讨论】:

  • 如果你完全删除 jboss-as-ejb-client-bom 依赖会发生什么?
  • 标准“没有可用的 EJBReceiver 错误消息”:/
  • 您在这里所做的与EJB invocations from a remote server instance 中的文档描述的完全不同
  • 是的,这是正确的。我正在尝试调用部署在不同服务器上的服务,并且我必须能够指定应该调用该服务的确切服务器(不,用例不是自我实现的负载平衡;)),哪个,据我所知,在遵循链接实现时是不可能的。

标签: java jboss wildfly jndi rmi


【解决方案1】:

将包含以下内容的 jboss-deployment-structure.xml 添加到 WAR 的顶层:

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

【讨论】:

  • 感谢您的回复。 xnio 依赖项是 jboss-as-ejb-client-bom 的一部分。我检查了版本,wildfly使用xnio的3.4.0.Final,ejb客户端bom在3.0.7.Final中使用它们。我现在尝试了以下事情:1)像你建议的那样将jboss-deployment-structure.xml添加到我的war文件的WEB-INF中。没有效果。阅读有关部署结构的一些内容,2)尝试将模块添加为部署结构中的排除项(我想 Wildfly 使用它的本地版本的 xnio 而不是打包的?),也没有工作。
  • 3) 我还做了什么:从依赖项中完全排除 xnio:在进行服务调用时获取经典的“没有可用的 EJB 接收器”错误消息。 4) 排除了 xnio,但随后在 wildfly 使用的同一版本中明确添加了它:再次,ClassCastException。
  • 我想你使用的是 AS7。在这种情况下,您必须设置对“org.xno 模块”的依赖关系。见Class Loading in AS7
  • 客户端应用部署在wildfly 10上,服务器应用部署在JBoss 7上,是的。在我的客户端应用程序的 jboss-deployment-structure.xml 中添加了 org.jboss.xnio 模块作为依赖项,仍然收到 ClassCastException。
  • 你能检查一下这个 WAR 没有任何其他版本的 xnio 库。它们不应该冲突,但是如果您在 WAR 中包含 API 库,这可能会导致类加载问题。参考链接描述JBoss类加载Class Loading in AS7
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 2018-01-29
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2017-06-24
    相关资源
    最近更新 更多