技术开发 频道

如何构建 EJB 3.0 应用程序

  构建另一个会话 Bean

  在此,您将构建另一个会话 Bean,以了解如何将另一个会话 Bean 注入其中。

  与前面一样,创建一个接口:

  在会话数据包中,选择 New => Interface(图 71)并命名 Interface OrderTask。单击 Finish。

  图 71. 新建接口

  如下所示,将该类注释为 Local,并添加 getCurrentOrder 方法。

1 package com.ibm.ejb3.order.session;
2
3 import com.ibm.ejb3.order.entities.Order;
4
5 @Local
6 public interface OrderTask {
7     public Order getCurrentOrder(int customerId) throws CustomerDoesNotExist;
8 }

  创建新的无状态会话 Bean。

  右键单击 session 的数据包并选择 New => Class(图 72)。

  图 72. 新建类

  确保该类实现了您刚创建的 OrderTask 接口(图 73)。

  图 73. OrderTaskImpl

  将该 Bean 注释为无状态。添加下面以粗体显示的代码。注意,您可以将 CustomerTask 注入到 OrderTask 中。这避免了 JNDI 查找代码,因此极大地简化了操作。另外,还将像前面那样注入一个实体管理器。

1 package com.ibm.ejb3.order.session;
2
3 import javax.ejb.EJB;
4 import javax.ejb.Stateless;
5
6 import com.ibm.ejb3.order.entities.Order;
7
8 @Stateless
9 public class OrderTaskImpl implements OrderTask {
10     
11     @EJB(beanName = "CustomerTaskImpl")
12     CustomerTask customerTask;
13
14 @PersistenceContext(name="OrderDB")
15     EntityManager em;
16
17 public Order getCurrentOrder(int customerId) throws CustomerDoesNotExist {
18         // TODO Auto-generated method stub
19         return null;
20     }
21
22 }

  最后,将下面的粗体代码添加到 getCurrentOrder 方法中。您会注意到访问查询有多么方便。另外请注意,订单方法将与 Customer 对象交互。因为两个类都在使用 @PersistenceContext,所以它们可以正确传播 Entity Manager,了解这一点非常重要。

1 public Order getCurrentOrder(int customerId) throws CustomerDoesNotExist {
2
3   Query query = em.createNamedQuery("getCurrentOrder");
4
5   query.setParameter(1, customerId);
6
7   Order currentOrder = (Order)query.getSingleResult();
8
9   if(currentOrder != null)
10
11   {
12
13   Customer customer = customerTask.findCustomer(customerId);
14
15   Order alreadySet = customer.getCurrentOrder();
16
17   if(alreadySet == null)
18
19   {
20
21   customer.setCurrentOrder(currentOrder);
22
23   }
24
25   }
26
27   return currentOrder;
28
29   }
30
31

  不要忘记组织您的导入。

 

0
相关文章