我正在玩 JBoss 和 EJB,我使用 jboss-eap-quickstarts
我有服务器端
类:
package org.jboss.as.quickstarts.ejb.remote.stateless;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
}
我有客户端
方法:
private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
return (RemoteCalculator) context.lookup(
"ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()
);
}
问题是:
- 服务器上部署了什么?
类
/对象
/两者?如何 客户找到类/对象了吗? ejb:/jboss-as-ejb-remote-server-side/CalculatorBean 是怎么做到的!"+ RemoteCalculator.class.getName()
帮助因此它不知道主机:端口
?- 在
server
上执行CalculatorBean
逻辑的位置或客户端
端?同样,如果它是在Server
上执行的,那么它是如何执行的呢? 两个jvm
之间的值交换有效吗?
最佳答案
客户端找到类/对象是因为客户端依赖于服务器端的接口(interface)(
pom.xml
文件)。通过文件
jboss-eap-quickstarts/ejb-remote/client/src/main/resources/jboss-ejb-client.properties
它找到了 host:port 请注意,您可以将服务器配置为在不同的端口上公开您的服务。CalculatorBean
逻辑将在服务器端执行。
对于我没有回答的所有问题,(什么部署在哪里,jvm 之间的值交换以及 JNDI 地址(ejb:/...
)如何让客户端找到正确的服务),您应该阅读 JNDI 和 EJB 的工作原理。
这是一个好的开始:
关于java - 远程EJB的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37883161/