与 EJB 的远程连接在本地主机上工作但在 127.0.0.1 和另一台服务器上失败
Remote Connection to EJB working on localhost but fails on 127.0.0.1 and another server
我刚刚在 wildfly 12 服务器上学习远程 ejb。当使用 localhost 访问同一 JVM 时,我已使用 jboss-ejb-client.properties 在同一台计算机上成功连接到 ejb(工作示例):
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
当我尝试使用 127.0.0.1 访问与 localhost 相同的 ejb 时,它等待了很长时间,并且没有显示任何错误而没有任何反应。这是 jboss-ejb-client.properties 在与 127.0.0.1 相同的 JVM 上访问服务器时(失败示例):
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=8080
我也将相同的 ejb 服务部署到另一台 IP 为 192.168.1.101 的计算机,并更改了主机并相应地设置了密码凭据并尝试访问,但同样无休止的等待再次发生。这是访问 192.168.1.101 的另一台服务器时的 jboss-ejb-client.properties(失败示例):
remote.connections=default
remote.connection.default.host=192.168.1.101
remote.connection.default.port=8080
remote.connection.default.username=username
remote.connection.default.password=**password
remote.connection.default.connect.timeout=3000
build.gradle 是:
// https://mvnrepository.com/artifact/org.jboss.spec.javax.transaction/jboss-transaction-api_1.2_spec
api group: 'org.jboss.spec.javax.transaction', name: 'jboss-transaction-api_1.2_spec', version: '1.1.1.Final'
// https://mvnrepository.com/artifact/org.jboss.spec.javax.ejb/jboss-ejb-api_3.2_spec
api group: 'org.jboss.spec.javax.ejb', name: 'jboss-ejb-api_3.2_spec', version: '1.0.1.Final'
// https://mvnrepository.com/artifact/org.jboss/jboss-ejb-client
api group: 'org.jboss', name: 'jboss-ejb-client', version: '4.0.10.Final'
// https://mvnrepository.com/artifact/org.jboss.xnio/xnio-api
api group: 'org.jboss.xnio', name: 'xnio-api', version: '3.6.3.Final'
// https://mvnrepository.com/artifact/org.jboss.xnio/xnio-nio
api group: 'org.jboss.xnio', name: 'xnio-nio', version: '3.6.3.Final'
// https://mvnrepository.com/artifact/org.jboss.remoting/jboss-remoting
api group: 'org.jboss.remoting', name: 'jboss-remoting', version: '5.0.7.Final'
// https://mvnrepository.com/artifact/org.jboss.sasl/jboss-sasl
api group: 'org.jboss.sasl', name: 'jboss-sasl', version: '1.0.5.Final'
// https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling-river
api group: 'org.jboss.marshalling', name: 'jboss-marshalling-river', version: '2.0.5.Final'
上下文查找程序:
Properties props = new Properties();
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext ic = new InitialContext(props);
Calculator calc = (Calculator) ic.lookup("ejb:/ejbtest-service-1.0/CalculatorService!com.testejb.model.Calculator");
是不是少了什么东西?
我建议遵循这个示例项目
https://github.com/wildfly/quickstart/tree/12.x/ejb-remote
默认模式我们使用本地身份验证(适用于文件权限),而 HTTP 示例使用真正的身份验证
此示例还展示了如何使用身份验证
https://github.com/wildfly/quickstart/blob/12.x/ejb-security/src/main/resources/wildfly-config.xml
第一个示例 (https://github.com/wildfly/quickstart/blob/12.x/ejb-remote/client/src/main/resources/META-INF/wildfly-config.xml) 使用的是
<property key="wildfly.sasl.local-user.quiet-auth" value="true" />
我刚刚在 wildfly 12 服务器上学习远程 ejb。当使用 localhost 访问同一 JVM 时,我已使用 jboss-ejb-client.properties 在同一台计算机上成功连接到 ejb(工作示例):
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
当我尝试使用 127.0.0.1 访问与 localhost 相同的 ejb 时,它等待了很长时间,并且没有显示任何错误而没有任何反应。这是 jboss-ejb-client.properties 在与 127.0.0.1 相同的 JVM 上访问服务器时(失败示例):
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=8080
我也将相同的 ejb 服务部署到另一台 IP 为 192.168.1.101 的计算机,并更改了主机并相应地设置了密码凭据并尝试访问,但同样无休止的等待再次发生。这是访问 192.168.1.101 的另一台服务器时的 jboss-ejb-client.properties(失败示例):
remote.connections=default
remote.connection.default.host=192.168.1.101
remote.connection.default.port=8080
remote.connection.default.username=username
remote.connection.default.password=**password
remote.connection.default.connect.timeout=3000
build.gradle 是:
// https://mvnrepository.com/artifact/org.jboss.spec.javax.transaction/jboss-transaction-api_1.2_spec
api group: 'org.jboss.spec.javax.transaction', name: 'jboss-transaction-api_1.2_spec', version: '1.1.1.Final'
// https://mvnrepository.com/artifact/org.jboss.spec.javax.ejb/jboss-ejb-api_3.2_spec
api group: 'org.jboss.spec.javax.ejb', name: 'jboss-ejb-api_3.2_spec', version: '1.0.1.Final'
// https://mvnrepository.com/artifact/org.jboss/jboss-ejb-client
api group: 'org.jboss', name: 'jboss-ejb-client', version: '4.0.10.Final'
// https://mvnrepository.com/artifact/org.jboss.xnio/xnio-api
api group: 'org.jboss.xnio', name: 'xnio-api', version: '3.6.3.Final'
// https://mvnrepository.com/artifact/org.jboss.xnio/xnio-nio
api group: 'org.jboss.xnio', name: 'xnio-nio', version: '3.6.3.Final'
// https://mvnrepository.com/artifact/org.jboss.remoting/jboss-remoting
api group: 'org.jboss.remoting', name: 'jboss-remoting', version: '5.0.7.Final'
// https://mvnrepository.com/artifact/org.jboss.sasl/jboss-sasl
api group: 'org.jboss.sasl', name: 'jboss-sasl', version: '1.0.5.Final'
// https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling-river
api group: 'org.jboss.marshalling', name: 'jboss-marshalling-river', version: '2.0.5.Final'
上下文查找程序:
Properties props = new Properties();
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext ic = new InitialContext(props);
Calculator calc = (Calculator) ic.lookup("ejb:/ejbtest-service-1.0/CalculatorService!com.testejb.model.Calculator");
是不是少了什么东西?
我建议遵循这个示例项目
https://github.com/wildfly/quickstart/tree/12.x/ejb-remote
默认模式我们使用本地身份验证(适用于文件权限),而 HTTP 示例使用真正的身份验证
此示例还展示了如何使用身份验证
https://github.com/wildfly/quickstart/blob/12.x/ejb-security/src/main/resources/wildfly-config.xml
第一个示例 (https://github.com/wildfly/quickstart/blob/12.x/ejb-remote/client/src/main/resources/META-INF/wildfly-config.xml) 使用的是
<property key="wildfly.sasl.local-user.quiet-auth" value="true" />