### EJB工作原理学习笔记 #### RMI工作原理 RMI(Remote Method Invocation)是一种用于在不同的Java虚拟机(JVMs)之间进行远程过程调用的技术。它允许开发者创建分布式应用程序,这些应用程序可以在网络的不同部分运行,从而实现跨平台、跨网络的分布式计算。 ##### 基本概念 RMI的基本组成部分包括: 1. **接口**: 定义了客户端能够调用的服务的方法签名。这些接口必须实现`java.rmi.Remote`接口。 2. **服务器端实现**: 实现了上述接口中的方法。通常称为服务提供者或远程对象。 3. **客户端存根(Stub)**: 在客户端,存根代表远程对象。它是一个本地代理,负责与远程对象通信。 4. **服务器端骨架(Skeleton)**: 在服务器端,骨架负责处理来自客户端的请求,并将请求转发给实际的服务实现。 ##### 工作流程 1. **客户端**: - 创建一个存根实例。 - 调用存根中的方法。 - 存根将方法调用转换为网络消息并通过Socket发送给服务器端。 2. **服务器端**: - 骨架接收到网络消息。 - 骨架解析消息并找到对应的方法实现。 - 执行方法并将结果封装回网络消息。 - 将结果发送回客户端。 3. **客户端**: - 接收服务器端返回的结果。 - 存根将结果传递给原始的调用方。 ##### 示例代码分析 1. **定义接口**: ```java public interface Person { public int getAge() throws Throwable; public String getName() throws Throwable; } ``` 2. **实现接口**: ```java public class PersonServer implements Person { private int age; private String name; public PersonServer(String name, int age) { this.age = age; this.name = name; } @Override public int getAge() { return age; } @Override public String getName() { return name; } } ``` 3. **客户端存根**: ```java import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.net.Socket; public class Person_Stub implements Person { private Socket socket; public Person_Stub() throws Throwable { // Connect to skeleton socket = new Socket("server_host", 9000); } @Override public int getAge() throws Throwable { ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeObject("age"); outStream.flush(); ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream()); return inStream.readInt(); } @Override public String getName() throws Throwable { ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeObject("name"); outStream.flush(); ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream()); return (String) inStream.readObject(); } } ``` 4. **服务器端骨架**: ```java import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; public class Person_Skeleton { private ServerSocket serverSocket; private PersonServer personServer; public Person_Skeleton(int port, PersonServer personServer) throws Throwable { this.serverSocket = new ServerSocket(port); this.personServer = personServer; } public void start() throws Throwable { while (true) { Socket clientSocket = serverSocket.accept(); ObjectInputStream inStream = new ObjectInputStream(clientSocket.getInputStream()); String methodName = (String) inStream.readObject(); if ("age".equals(methodName)) { int result = personServer.getAge(); ObjectOutputStream outStream = new ObjectOutputStream(clientSocket.getOutputStream()); outStream.writeInt(result); } else if ("name".equals(methodName)) { String result = personServer.getName(); ObjectOutputStream outStream = new ObjectOutputStream(clientSocket.getOutputStream()); outStream.writeObject(result); } clientSocket.close(); } } } ``` #### WebSphere实现 WebSphere Application Server 是IBM开发的一款企业级应用服务器,支持EJB标准。在WebSphere中部署EJB涉及以下步骤: 1. **创建EJB项目**: - 使用IDE(如Eclipse)创建一个新的EJB项目。 - 定义业务逻辑接口和实现类。 2. **配置部署描述符**: - 修改`ejb-jar.xml`文件,指定EJB的属性和依赖。 3. **打包部署**: - 将EJB项目打包成`.jar`文件。 - 将`.jar`文件部署到WebSphere服务器上。 4. **客户端访问**: - 通过RMI/IIOP协议调用远程EJB。 #### WebLogic实现 Oracle WebLogic Server 是一款高性能的企业应用服务器,同样支持EJB技术。WebLogic的EJB部署和管理过程类似于WebSphere,但具有一些独特的特性和配置选项。 1. **创建EJB项目**: - 使用WebLogic开发工具(如NetBeans)创建新的EJB项目。 2. **配置部署描述符**: - 修改`ejb-jar.xml`和其他配置文件。 3. **打包部署**: - 打包成`.jar`文件,并使用WebLogic控制台进行部署。 4. **客户端访问**: - 使用RMI/IIOP协议访问远程EJB。 #### 理解体会 学习EJB的工作原理有助于深入理解分布式Java应用程序的构建方式。通过掌握RMI的工作机制,我们可以更好地设计和实现基于EJB的应用系统。此外,了解WebSphere和WebLogic这两种流行的应用服务器对EJB的支持方式也有助于选择最适合项目需求的技术栈。在实际开发过程中,合理利用这些技术和工具可以提高系统的稳定性和性能。
剩余23页未读,继续阅读
- 粉丝: 768
- 资源: 47
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助