Chinaunix首页 | 论坛 | 博客
  • 博客访问: 627710
  • 博文数量: 796
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5095
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-10 09:43
文章分类

全部博文(796)

文章存档

2011年(1)

2008年(795)

我的朋友

分类:

2008-09-10 10:07:32

  Cabin实体已经就绪,我们需要创建一个session bean,作为和Cabin实体交互的接口。该session bean将承担业务流程和(实体)访问代理的职责,我们称其为TravelAgent EJB。

  TravelAgentRemote:远程接口

  创建TravelAgent EJB的第一步是定义它的远程接口。该接口规定了允许客户端调用的EJB业务方法。客户端与TravelAgent的createCaben()和findCabin()方法进行交互,以控制Cabin实体。
  package com.titan.travelagent;
  import javax.ejb.Remote;
  import com.titan.domain.Cabin;
  @Remote
  public interface TravelAgentRemote {
    public void createCabin(Cabin cabin);
    public Cabin findCabin(int id);
  }

  TravelAgent EJB的远程接口实在没有什么特别之处。除了被标以@javax.ejb.Remote外,它看起来就像一个普通的接口。该注解告诉EJB容器,这一特定接口是TravelAgent EJB的远程业务接口。还要注意的是,业务方法不必再像EJB2.1那样抛出java.rmi.RemoteException了。如果想抛的话依然还可以抛,但是这并非是必须的。
  TravelAgentBean: Bean Class
  TravelAgentBean: The Bean Class

  我们既已定义好针对TravelAgent EJB的远程接口,就要为该session bean实现包含业务逻辑的bean class了。TravelAgent EJB被定义为stateless bean。我们使用@javax.ejb.Stateless

  注解来表达此意图。尽管不是必要的,但对stateless session bean而言,实现其全部业务接口是一条不错的实践,这样,client/bean契约就能够通过编译器得到强化。在本例中,业务接口即 TravelAgentRemote。下面是TravelAgentBean的完整定义。
  package com.titan.travelagent;
  import javax.ejb.Stateless;
  import javax.persistence.EntityManager;
  import javax.persistence.PersistenceContext;
  import com.titan.domain.Cabin;
  @Stateless
  public class TravelAgentBean implements TravelAgentRemote{
  @PersistenceContext(unitName="titan") private EntityManager manager;
  public void createCabin(Cabin cabin) {
    manager.persist(cabin);
  }
  public Cabin findCabin(int pKey) {
    return manager.find(Cabin.class, pKey);
  }
  }

  在该实现中,还有若干问题需要进一步阐明。首先,TravelAgentBean类使用了@javax. persistence. PersistenceContext注解来获得对EntityManager服务的访问,以此来创建和查找Cabin实体。注解 @PersistenceContext告知EJB容器,必须用一个EntityManager实例来设置manager数据成员。EJB容器发现数据成员的类型为javax.persistence.

[1]  

【责编:Chuan】

--------------------next---------------------

阅读(418) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~