Wildfly10 - EJB-Remote Client - 无响应

时间:2017-03-30 14:31:15

标签: java wildfly wildfly-10

我目前正在将代码从Jboss7迁移到Wildfly10 服务器本身启动完全正常。 当我们试图将我们的客户端与用于ejb-remote调用的新的wildfly10服务器连接起来时,它只是无法正常工作。
我唯一能使用的是以下错误:

  

org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceivers   警告:无法注册EJB接收器以连接到remote-ip:8080   java.lang.RuntimeException:操作失败,状态为WAITING at   org.jboss.ejb.client.remoting.IoFutureHelper.get(IoFutureHelper.java:94)     在   org.jboss.ejb.client.remoting.ConnectionPool.getConnection(ConnectionPool.java:80)     在   org.jboss.ejb.client.remoting.RemotingConnectionManager.getConnection(RemotingConnectionManager.java:51)     在   org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.setupEJBReceivers(ConfigBasedEJBClientContextSelector.java:161)     在   org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.getCurrent(ConfigBasedEJBClientContextSelector.java:118)     在   org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.getCurrent(ConfigBasedEJBClientContextSelector.java:47)     在   org.jboss.ejb.client.EJBClientContext.getCurrent(EJBClientContext.java:281)     在   org.jboss.ejb.client.EJBClientContext.requireCurrent(EJBClientContext.java:291)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:178)     在   org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)     在com.sun.proxy。$ Proxy2.connect(未知来源)at   de.cinovo.rcp.test.RemoteEJBClient.invokeStatelessBean(RemoteEJBClient.java:39)     在de.cinovo.rcp.test.RemoteEJBClient.main(RemoteEJBClient.java:25)

     

线程中的异常" main" java.lang.IllegalStateException:   EJBCLIENT000025:没有可用于处理的EJB接收器   [APPNAME:de.cinovo.tcc.server耳,   moduleName:de-cinovo-tcc-server-ejb-6.0-SNAPSHOT,distinctName:]   调用上下文的组合   org.jboss.ejb.client.EJBClientInvocationContext@180542f at   org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798)     在   org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128)     在   org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)     在   org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)     在   org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)     在com.sun.proxy。$ Proxy2.connect(未知来源)at   de.cinovo.rcp.test.RemoteEJBClient.invokeStatelessBean(RemoteEJBClient.java:39)     在de.cinovo.rcp.test.RemoteEJBClient.main(RemoteEJBClient.java:25)

尝试连接时,服务器日志中没有任何错误,警告,信息或任何内容 在呼叫尝试期间通过tcp对端口进行一些操作。

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

相关信息:

  • Wildfly将响应端口8080上的telnet
  • Wildfly是唯一一项在8080上收听的服务
  • 我的/ etc / hosts配置正确
  • 更改端口并不能解决问题
  • Wildfly版本10.1.0.Final
  • 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-client.properties

    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-Client-Maven-Dependency:

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

那些有同样问题并且知道我做错了什么的人?

2 个答案:

答案 0 :(得分:4)

socket.binding-group standalone.xml 中看起来缺少定义:

<outbound-socket-binding name="remote-ejb">
  <local-destination socket-binding-ref="http"/>
</outbound-socket-binding>

答案 1 :(得分:2)

所以对于每个感兴趣的人,这是我的问题的解决方案: 基于comment by Steve C和朋友的帮助,我们发现问题不是基于服务器的。

似乎有一些防病毒程序,只要与Wildfly /服务器进行HTTP升级协商,就会对您的HTTP消息执行某些操作。他们似乎操纵发送/接收的包,这导致客户端的问题,因为它不再能够理解答案。 因此它永远不会反应,因为包看起来已经丢失 - 因此找不到IoFuture异常和EJB接收器。

长话短说:从我们的系统中移除防病毒程序(在我们的案例中为Bitdefender)会导致一切按预期工作......