当前位置: 首页 > 知识库问答 >
问题:

Wildfly10-EJB远程客户端-无响应

梁鸣
2023-03-14

我目前正在将我们的代码从Jboss7迁移到Wildfly10。
服务器本身启动完全正常。当尝试将我们的客户端与正在工作的新Wildfly10服务器连接以进行ejb远程调用时,它就是不起作用。
我唯一可以处理的是以下错误:

组织。jboss。ejb。客户远程处理。ConfigBasedEJBClientContextSelector setupEJBReceivers警告:无法注册EJB接收器以连接到远程ip:8080 java。lang.RuntimeException:操作失败,状态在组织中等待。jboss。ejb。客户远程处理。IoFutureHelper。在org上获取(iofutureheloper.java:94)。jboss。ejb。客户远程处理。连接池。位于org的getConnection(ConnectionPool.java:80)。jboss。ejb。客户远程处理。远程连接管理器。位于org的getConnection(RemotingConnectionManager.java:51)。jboss。ejb。客户远程处理。ConfigBasedEJBClientContextSelector。位于org的setupEJBReceivers(ConfigBasedEJBClientContextSelector.java:161)。jboss。ejb。客户远程处理。ConfigBasedEJBClientContextSelector。位于org的getCurrent(ConfigBasedEJBClientContextSelector.java:118)。jboss。ejb。客户远程处理。ConfigBasedEJBClientContextSelector。位于org的getCurrent(ConfigBasedEJBClientContextSelector.java:47)。jboss。ejb。客户EJBClientContext。位于org的getCurrent(EJBClientContext.java:281)。jboss。ejb。客户EJBClientContext。Requirecurrental(EJBClientContext.java:291)位于org。jboss。ejb。客户EJBInvocationHandler。doInvoke(EJBInvocationHandler.java:178)位于org。jboss。ejb。客户EJBInvocationHandler。在com上调用(EJBInvocationHandler.java:146)。太阳代理$代理2。在de.cinovo连接(未知源)。rcp。测验RemoteEJBClient。位于de.cinovo的invokeStatelessBean(RemoteEJBClient.java:39)。rcp。测验RemoteEJBClient。main(RemoteEJBClient.java:25)

异常在线程"main"org.jboss.ejb.client.IllegalStateException: EJBCLIENT000025:没有EJB接收器可用于处理[appName:andler.invoke-耳,模块名称: de-cinovo-tcc-server-ejb-6.0-SNAPSHOT,差异名称:]组合调用上下文andler.java:183在andler.java:146EJBClientCcom.sun.proxy.EJBRecencer(EJBClientCroxy2.connect)在de.cinovo.rcp.test.ReceiverIlient.invoke调用(ReceiverInterceptor.java:128)在org.jboss.ejb.client.EJBClientInvocationContext.send请求(EJBClientInvocationContext.java:186)在org.jboss.ejb.client.EJBInvocationHandler.sendRequest SusPosPossibleRetries(EJBInvocationHandler.java:255)在org.jboss.ejb.client.EJBInvocationHandler.do调用(EJBInvocationHandler.java:200)在org.jboss.ejb.client.EJBInvocationHandler.do调用(EJBInvocationHorg.jboss.ejb.client.EJBClientInvocationContext@180542f)在java.lang.EJBInvocationHde.cinovo.tcc.server(EJBInvocationHorg.jboss.ejb.client.)在ontext.require$Pontext.java:798(未知来源)在org.jboss.ejb.client.Remote teEJBCnterceptor.handle

尝试连接时,服务器日志中未显示任何错误、警告、信息或任何内容
在尝试调用期间,通过tcp在端口上执行某些操作。

真正有趣的部分是:
如果我在本地机器上使用相同的野蝇设置,则完全相同的连接方法有效,但仅当使用localhost作为jboss-ejb-client.properties中的ip地址时。一旦我将ip更改为127.0.0.1或我当前的ip地址,它将失败并出现与上述相同的错误。

相关资料:

>

  • Wildfly将在端口8080上响应telnet
  • Wildfly是唯一监听8080的服务
  • 我的 /etc/hosts配置正确
  • 改变端口并不能解决问题
  • Wildfly版本10.1.0。最终
  • 来自我的standalone.xml的相关部分

    <subsystem xmlns="urn:jboss:domain:remoting:3.0">
        <endpoint/>
        <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
    </subsystem>
    [...]
    <subsystem xmlns="urn:jboss:domain:undertow:3.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        [...]
    </subsystem>
    [...]
    <interfaces>
        <interface name="public">
            <any-address/>
        </interface>
    </interfaces>
    [...]
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="http" interface="public" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
    [...]
    </socket-binding-group>
    

    我的jboss ejb客户端。属性

    endpoint.name=client-endpoint
    remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
    remote.connections=default
    remote.connection.default.host=<host-ip>
    remote.connection.default.port=8080
    remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
    remote.connection.default.username=<usernmae>
    remote.connection.default.password=<pswd>
    

    客户端-代码

    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    final Context context = new InitialContext(jndiProperties);
    [...]
    return context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
    

    EJB客户端Maven依赖项:

    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-ejb-client-bom</artifactId>
        <version>10.1.0.Final</version>
        <type>pom</type>
    </dependency>
    

    有没有人有同样的问题,知道我做错了什么?

  • 共有2个答案

    夏飞鹏
    2023-03-14

    所以对于所有感兴趣的人来说,这里是我的问题的解决方案:根据Steve C的评论和一个朋友的帮助,我们发现问题不是基于服务器的。

    似乎有一些防病毒程序,在与Wildfly/server的HTTP升级谈判完成后立即对您的HTTP消息进行处理。它们似乎操纵了发送/接收的包,这导致客户端出现问题,因为它不再能够理解答案。因此它永远不会做出反应,因为包似乎已丢失-因此找不到IoFuture异常和EJB接收器。

    长话短说:从我们的系统中删除防病毒程序(在我们的情况下是BitDefer)会导致一切按预期工作......

    华宏逸
    2023-03-14

    看起来standalone中缺少定义。套接字中的xml。绑定组:

    <outbound-socket-binding name="remote-ejb">
      <local-destination socket-binding-ref="http"/>
    </outbound-socket-binding>
    
     类似资料:
    • 问题内容: 我目前正在将代码从Jboss7迁移到Wildfly10。 服务器本身完全可以启动。当尝试将我们的客户端与正在运行的新wildfly10服务器进行ejb-remote调用连接时,它将无法正常工作。 我唯一要使用的是以下错误: org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceiver

    • 我试图使用JBoss7.1.1中的JNDI从远程客户端调用,但我得到了一个异常: 我使用的是jboss的安全机制,并且我已经通过add-user.bat添加了用户,还有带有用户名和密码的jboss-ejb-client.properties文件,但仍然会得到异常。我遵循了链接的示例集:使用JNDI从远程客户端进行EJB调用,当我不使用安全机制时也是如此,但是当我使用安全机制时,就会出现错误 你错过

    • 我有一个无状态bean 我已经在带有@remote注释的界面的glassfish上部署了这个功能 客户端代码: 错误为:java.lang.NullPointerException(位于com.sun.Enterprise.Naming.Impl.SerialContext.GetOrb(位于com.sun.Enterprise.Naming.Impl.SerialContext.GetProvi

    • 我目前正在努力让远程EJB调用在wildfly(8.x和9.x)上工作。 详细来说,它是关于使用EJB客户机API方法从独立的客户机应用程序(而不是从另一个应用程序服务器)进行远程调用。远程命名方法适合我,但不适用于我的场景,因为我需要使用客户端拦截器将上下文数据传递给服务器端拦截器进行远程调用。 但是现在,为了一个简单的示例,我尝试使用客户机API进行远程调用。因此,我尝试了用于远程ejb调用的

    • 问题内容: 根据EJB客户端应用程序上的Netbeans教程,我似乎无法调用该方法: 编译错误: 客户: ejb: 远程接口: 现在,如果接口被修改: Bean现在可以使用以下方法: 但是,有一个NPE: 如何正确调用该方法?EJB未实例化? 问题答案: 我从头开始。我能想到的唯一区别是,我没有创建EJB应用程序,而是为bean创建了EJB模块。否则,我认为是相同的。 结构体: 客户代码: 豆:

    • 我正在为运行在JBoss AS EAP6.2中的EJB编写一个远程客户端。按照“7.5.1节”中的说明。在"JBoss EAP 6.2开发指南"中使用JNDI远程调用会话Bean,如果我使用JNDI名称,我可以访问EJB上的方法