文章目录
EJB
EJB(Enterprise Java Beans) ,企业Java Beans。EJB实现原理就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。
EJB 可以理解为是运行在独立服务器上的一组执行指定任务的类的集合(组件),客户端是通过网络(例如:rmi://localhost:8111/user)对EJB 对象进行调用的。
RMI
RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此,RMI 意味着需要一个 Server 端和一个 Client 端。
Server端:Server 端通常会创建一个对象,并使之可以被远程访问。这个对象被称为远程对象。Server 端需要注册这个对象可以被 Client 远程访问。
package com.wilhelm.rmi.server;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class RmiServer {
public static void main(String[] args) {
try {
UserService userService = new UserServiceImpl(); //实例化业务对象
LocateRegistry.createRegistry(8111); //注册服务端口号
Naming.rebind("rmi://localhost:8111/user",userService); //绑定server业务对象访问的uri
System.out.println("start server, port is 8111");
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果
注:
Client 端:Client 端调用可以被远程访问的对象上的方法,Client 端就可以和 Server 端进行通信并相互传递信息。
package com.wilhelm.rmi.client;
import com.wilhelm.rmi.server.User;
import com.wilhelm.rmi.server.UserService;
import java.rmi.Naming;
public class RmiClient {
public static void main(String[] args) {
// write your code here
User result;
String userId = "1";
try {
UserService access = (UserService) Naming.lookup("rmi://localhost:8111/user"); //连接server端对象
result = access.findUser(userId); //调用server端对象方法
System.out.println("query: " + userId);
System.out.println("result: " + result );
} catch (Exception ex) {
System.out.println(ex);
}
}
}
执行结果
EJB与RMI的关系
EJB的基础是RMI(Remote Method Invocation)技术。EJB通过RMI把组件创建为远程对象,客户端就能通过网络调用远程的EJB对象了。EJB 虽然用了RMI 技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI 技术中的一些细节问题屏蔽了。