### EJB Cookbook 知识点解析 #### 一、EJB简介与背景 EJB (Enterprise JavaBeans) 是 Java EE 标准中的一个重要组成部分,它主要用于构建可移植、健壮且可扩展的企业级应用程序。EJB 提供了服务器端组件模型,支持事务处理、安全性和生命周期管理等功能,使开发人员能够专注于业务逻辑而无需关注底层实现细节。 《EJB Cookbook》是一本实用的指南书籍,由 Benjamin G. Sullins 和 Mark B. Whipple 合著,Manning Publications 出版。本书通过一系列实际案例和代码示例来帮助开发者更好地理解和掌握 EJB 的使用技巧。 #### 二、关键知识点详解 ##### 1.1 调用本地 EJB 从另一个 EJB **知识点:** 在 EJB 应用程序内部,可以通过直接调用本地接口(Local Interface)的方式来访问同一容器内的其他 EJB 组件。这种方式不需要进行远程调用,因此效率更高。 **应用场景:** 当一个 EJB 需要调用同一容器内的另一个 EJB 的方法时,可以使用本地接口来进行调用。 **代码示例:** ```java public class LocalEJB implements LocalHome { public LocalBean create() throws CreateException, RemoteException { return new LocalBeanImpl(); } } public interface LocalBean { void doSomething(); } public class AnotherEJB { private LocalBean localBean; public void setLocalBean(LocalBean localBean) { this.localBean = localBean; } public void invokeLocalEJB() { localBean.doSomething(); } } ``` ##### 1.2 调用远程 EJB 从另一个 EJB **知识点:** 对于不在同一个容器内的 EJB 或者需要跨越网络进行通信的情况,需要使用远程接口(Remote Interface)来调用其他 EJB。这种方式通常涉及 JNDI 查找以及远程调用的开销。 **应用场景:** 当需要跨容器或跨网络调用 EJB 时,使用远程接口进行调用。 **代码示例:** ```java public class RemoteEJB implements RemoteHome { public RemoteBean create() throws CreateException, RemoteException { return new RemoteBeanImpl(); } } public interface RemoteBean { void doSomething() throws RemoteException; } public class AnotherEJB { private RemoteBean remoteBean; public void setRemoteBean(RemoteBean remoteBean) { this.remoteBean = remoteBean; } public void invokeRemoteEJB() throws NamingException, RemoteException { Context context = new InitialContext(); remoteBean = (RemoteBean) context.lookup("java:comp/env/ejb/RemoteEJB"); remoteBean.doSomething(); } } ``` ##### 1.3 从 Servlet 访问 EJB **知识点:** 在 Web 层,可以通过 JNDI 查找的方式从 Servlet 访问 EJB,这种方式使得 Web 应用程序可以利用 EJB 提供的业务逻辑和服务。 **应用场景:** 当 Web 层需要调用 EJB 层的服务时。 **代码示例:** ```java public class MyServlet extends HttpServlet { private EJBLocalBean ejbLocalBean; public void init() throws ServletException { try { Context context = new InitialContext(); ejbLocalBean = (EJBLocalBean) context.lookup("java:comp/env/ejb/EJBLocal"); } catch (NamingException e) { throw new ServletException(e); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ejbLocalBean.doSomething(); } } ``` ##### 1.4 从 JavaServer Pages 调用 EJB **知识点:** JavaServer Pages (JSP) 可以通过 EL 表达式或 JSP 标签库来访问 EJB。这使得 JSP 页面可以动态地呈现 EJB 处理后的数据。 **应用场景:** 当需要在 JSP 页面中展示 EJB 处理的数据结果时。 **代码示例:** ```jsp <%@ page import="javax.naming.*" %> <%@ page import="com.example.EJBLocalBean" %> <jsp:useBean id="ejbBean" class="com.example.EJBLocalBean" scope="page"> <jsp:setProperty name="ejbBean" property="*" /> </jsp:useBean> <jsp:getProperty name="ejbBean" property="result" /> <% Context context = new InitialContext(); EJBLocalBean ejbBean = (EJBLocalBean) context.lookup("java:comp/env/ejb/EJBLocal"); String result = ejbBean.doSomething(); %> <p>Result: <%= result %></p> ``` ##### 1.5 从 JMS 系统调用 EJB 业务逻辑 **知识点:** JMS (Java Message Service) 是 Java 平台中的消息中间件标准,用于异步通信。可以通过 JMS 将消息发送到 EJB,从而触发相应的业务逻辑处理。 **应用场景:** 当需要实现异步处理或分布式系统的消息传递时。 **代码示例:** ```java public class JMSSender { private ConnectionFactory connectionFactory; private Destination destination; public void setConnectionFactory(ConnectionFactory connectionFactory) { this.connectionFactory = connectionFactory; } public void setDestination(Destination destination) { this.destination = destination; } public void sendMessage(String message) throws JMSException { Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(destination); TextMessage textMessage = session.createTextMessage(message); producer.send(textMessage); connection.close(); } } ``` **接收端 EJB 示例:** ```java @MessageDriven(mappedName = "java:jboss/exported/jms/queue/EJBQueue") public class JMSEJB implements MessageListener { @Override public void onMessage(Message message) { if (message instanceof TextMessage) { try { String text = ((TextMessage) message).getText(); // 处理消息 System.out.println("Received message: " + text); } catch (JMSException e) { e.printStackTrace(); } } } } ``` #### 三、总结 以上介绍了一些《EJB Cookbook》中的核心知识点及其应用场景。通过这些知识点的学习,开发者可以更好地理解如何在企业级应用中使用 EJB,并能够根据具体需求选择合适的调用方式。此外,《EJB Cookbook》还涵盖了更多的主题,如代码生成工具 XDoclet 的使用等,这些都能进一步提高开发效率和代码质量。 《EJB Cookbook》是一本非常适合想要深入了解 EJB 技术并将其应用于实际项目中的开发者的参考书籍。
- jason_zhang_1232013-03-22主要讲解EJB2.0,但对以后EJB的开发有借鉴意义.
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助