构建另一个会话 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 }
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 }
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
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
不要忘记组织您的导入。