远程EJB的理解
Understanding of remote EJB
我正在玩 JBoss 和 EJB,我使用 jboss-eap-quickstarts
我有 server-side
class:
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;
}
}
我有client-side
方法:
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()
);
}
问题是:
- 服务器上部署了什么?
Class
/ Object
/ 两者?如何
客户找到 classes/objects 了吗?
ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" +
RemoteCalculator.class.getName()
是如何帮助的,所以它不知道
host:port
?
- 在
server
上执行 CalculatorBean
逻辑的位置或
client
边?同样,如果它是在 Server
处执行的,那么它是如何
两个 jvm
之间的值交换有效吗?
客户端找到classes/objects因为客户端依赖于服务器端的接口(pom.xml
文件)。
它找到了 host:port 感谢文件 jboss-eap-quickstarts/ejb-remote/client/src/main/resources/jboss-ejb-client.properties
请注意,您可以将服务器配置为在不同的端口公开您的服务。
CalculatorBean
逻辑会在服务器端执行。
对于我没有回答的所有问题,(什么部署在哪里,jvm 之间的值交换以及 JNDI 地址 (ejb:/ ...
) 如何让客户端找到正确的服务),您应该阅读关于 JNDI 和 EJB 的工作原理。
这是一个好的开始:
EJB 基于 RMI (remote method invocation) over IIOP that helps bring corba 进入 java 世界的概念。
在服务器端,分为三部分:
- EJB 实现 - 具体 class 包含实现方法。
- Home 接口 - 扩展
javax.ejb.EJBHome
的接口必须包含 create()
方法。由客户端代码用于创建 bean 实例。
- 远程接口 - 扩展
javax.ejb.EJBObject
的接口,它声明了您希望客户端代码能够访问的所有方法。
在客户端,你必须先lookup
ejb。这就是 JNDI 的用武之地。不需要 host:port
因为您必须在服务器端的 Java 命名目录中注册 bean。根据您的情况,此注册表使用名称(由 ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()
表示)创建。
这是服务端发布的,客户端通过它来访问Home界面。这反过来又使您可以访问在远程接口中声明的 bean 中所有已实现的方法。
希望这能解决您的三个问题。
我正在玩 JBoss 和 EJB,我使用 jboss-eap-quickstarts
我有 server-side
class:
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;
}
}
我有client-side
方法:
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()
);
}
问题是:
- 服务器上部署了什么?
Class
/Object
/ 两者?如何 客户找到 classes/objects 了吗? ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()
是如何帮助的,所以它不知道host:port
?- 在
server
上执行CalculatorBean
逻辑的位置或client
边?同样,如果它是在Server
处执行的,那么它是如何 两个jvm
之间的值交换有效吗?
客户端找到classes/objects因为客户端依赖于服务器端的接口(
pom.xml
文件)。它找到了 host:port 感谢文件
jboss-eap-quickstarts/ejb-remote/client/src/main/resources/jboss-ejb-client.properties
请注意,您可以将服务器配置为在不同的端口公开您的服务。CalculatorBean
逻辑会在服务器端执行。
对于我没有回答的所有问题,(什么部署在哪里,jvm 之间的值交换以及 JNDI 地址 (ejb:/ ...
) 如何让客户端找到正确的服务),您应该阅读关于 JNDI 和 EJB 的工作原理。
这是一个好的开始:
EJB 基于 RMI (remote method invocation) over IIOP that helps bring corba 进入 java 世界的概念。
在服务器端,分为三部分:
- EJB 实现 - 具体 class 包含实现方法。
- Home 接口 - 扩展
javax.ejb.EJBHome
的接口必须包含create()
方法。由客户端代码用于创建 bean 实例。 - 远程接口 - 扩展
javax.ejb.EJBObject
的接口,它声明了您希望客户端代码能够访问的所有方法。
在客户端,你必须先lookup
ejb。这就是 JNDI 的用武之地。不需要 host:port
因为您必须在服务器端的 Java 命名目录中注册 bean。根据您的情况,此注册表使用名称(由 ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()
表示)创建。
这是服务端发布的,客户端通过它来访问Home界面。这反过来又使您可以访问在远程接口中声明的 bean 中所有已实现的方法。
希望这能解决您的三个问题。