添加拦截器
您需要修改该客户端以调用该新功能:
本文中提供了您所需要的代码,但是这些代码被注释掉了。取消下面以粗体显示的 OrderTask 声明的注释。
1 public class EJBClientServlet extends javax.servlet.http.HttpServlet implements
2 javax.servlet.Servlet {
3 /* (non-Java-doc)
4 * @see javax.servlet.http.HttpServlet#HttpServlet()
5 */
6
7 @EJB
8 private CustomerTask customerTask = null;
9
10 @EJB
11 private OrderTask orderTask = null;
12
13 public EJBClientServlet() {
14 super();
15 }
16
17 @Override
18 public void init() throws ServletException {
19 super.init();
20 }
2 javax.servlet.Servlet {
3 /* (non-Java-doc)
4 * @see javax.servlet.http.HttpServlet#HttpServlet()
5 */
6
7 @EJB
8 private CustomerTask customerTask = null;
9
10 @EJB
11 private OrderTask orderTask = null;
12
13 public EJBClientServlet() {
14 super();
15 }
16
17 @Override
18 public void init() throws ServletException {
19 super.init();
20 }
取消以下粗体代码的注释。注意,您可以通过 LineItems 访问订单和遍历功能。由于您设置了强获取规则,所以将填写 LineItems。
1 private void displayCustomerAndOrder(int customerId, PrintWriter out) throws
2 CustomerDoesNotExist {
3 Customer customer = customerTask.findCustomer(customerId);
4 out.println("<br>Customer ID => " + customer.getCustomerId());
5 out.println("<br>Customer Name => " + customer.getName());
6
7 Order order = orderTask.getCurrentOrder(customerId);
8 if(order != null)
9 {
10 out.println("<br>order id => " + order.getOrderId());
11 out.println("<br>status => " + order.getStatus());
12 out.println("<br>Total => " + order.getTotal());
13 Collection<Lineitem> lineItems = order.getLineitemCollection();
14 for(Lineitem lineItem: lineItems)
15 {
16 out.println("<br>****");
17 out.println("<br>Line Item Id => " + lineItem.getLiId());
18 out.println("<br>Quantity => " + lineItem.getQuantity());
19 out.println("<br>Total => " + lineItem.getAmount());
20 }
21
22 }
23 else
24 {
25 out.println("<br>Customer has no open order...");
26 }
27
28 }
2 CustomerDoesNotExist {
3 Customer customer = customerTask.findCustomer(customerId);
4 out.println("<br>Customer ID => " + customer.getCustomerId());
5 out.println("<br>Customer Name => " + customer.getName());
6
7 Order order = orderTask.getCurrentOrder(customerId);
8 if(order != null)
9 {
10 out.println("<br>order id => " + order.getOrderId());
11 out.println("<br>status => " + order.getStatus());
12 out.println("<br>Total => " + order.getTotal());
13 Collection<Lineitem> lineItems = order.getLineitemCollection();
14 for(Lineitem lineItem: lineItems)
15 {
16 out.println("<br>****");
17 out.println("<br>Line Item Id => " + lineItem.getLiId());
18 out.println("<br>Quantity => " + lineItem.getQuantity());
19 out.println("<br>Total => " + lineItem.getAmount());
20 }
21
22 }
23 else
24 {
25 out.println("<br>Customer has no open order...");
26 }
27
28 }
如前所述,将该项目添加到服务器中(图 75)。
图 75. 再次添加项目
运行 Servlet(图 76)。
图 76. 在服务器上运行
浏览器应显示该客户、当前的订单和所有的行项目(图 77)。
图 77. 检查结果
最后,检查该控制台以查看该拦截器的打印语句(图 78)。您会注意到,findCustomer 任务被调用了两次,一次是从客户端,另一次是从订单任务,而 getCurrentOrder 任务被调用了一次。
图 78. 检查拦截器结果
结束语
EJB 3.0 是简化企业中的应用程序开发的主要发展方向。本文向您介绍了如何使用简化的编程模型、新的 Java Persistence API 和拦截器为 WebSphere Application Server V6.1 构建 EJB 3.0 应用程序。通过使用 EJB 3.0 Feature Pack for WebSphere Application Server,您可受益于简化的开发体验、新的持久性模型和一些新功能(如拦截器),同时仍可以将其部署到强健的 WebSphere 平台。