|
持久层设计
创建Ejb3.0项目
首先使用Jboss IDE,创建一个EJB3.0项目,选择new->project->EJB3.0 project,

选择Next按钮,在project name中输入项目名称:feedback,点击next,

接着选择JBoss4.0.3 Server作为项目默认的服务器。单击完成按钮,这样就生成了一个EJB3.0的项目,其根目录下的jndi.property文件指明了JBoss服务器名称服务的一些配置。
数据持久层
使用EJB3.0的实体Bean来实现系统的数据持久层.EJB3.0的实体bean也是一个加了注释的简单Java对象(POJO)。一旦它被EntityManager访问它就成为了一个持久化对象,并且成为了持久化上下文(context)的一部分。一个持久化上下文与一个事务上下文是松耦合的;严格的讲,它隐含的与一个事务会话共存。 在EJB3.0中开发实体Bean非常简单,可以像开发一般的java bean一样编程,只需做少量的注释来定义实体关系,O/R映射等,而在EJB2.1中这些都要通过开发人员自己的设计模式或者其它技术来完成的(比如,自增长主键策略)。如下定义了一个Item实体bean表示客户发起的一个主题: //声明该类为一个实体Bean对象,表示客户发起的一个主题
public class Item implements Serializable{
private static final long serialVersionUID = -3318132295818643572L;
private int itemId;
private Collection feedBacks;
private User user;
……
//此处定义了实体Bean的一对一关系
(optional = false)
(name = "userId", unique = false, nullable = false)
public User getUser() {
return user;
}
//声明实体Bean的主键及增长策略
(generate=GeneratorType.AUTO)
(name="itemId")
public int getItemId() {
return itemId;
}
//声明主题实体与反馈实体之间的的一对多关系,并且制定级联及获取方式等
(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="item")
(name="itemId")
public Collection getFeedBacks() {
return feedBacks;
}
public void setFeedBacks(Collection feedBacks) {
this.feedBacks = feedBacks;
}
……
}
上例中,蓝色部分便是JDK1.5的元数据注解功能,如 便指名该类是一个EJB3.0 实体Bean,这样在编译后便产生了EJB3.0 的实体Bean,在部署时,Jboss的EJB3.0容器能够识别EJB3.0的实体Bean,并将其映射到对应的数据库表中。具体请参考EJB3.0相关技术文档。
业务逻辑层
在客户反馈系统中使用无状态会话Bean来实现系统的业务逻辑层,在EJB3.0规范中,写一个无状态回话bean(SLSB)只需要一个简单的Java文件并在类层加上注释就可以了。这个bean可以扩展javax.ejb.SessionBean接口,但这些不是必须的。一个SLSB不再需要home接口,没有哪类EJB再需要它了。Bean类可以实现业务接口也可以不实现它。如果没有实现任何业务接口,业务接口会由任意public的方法产生。如果只有几个业务方法会被暴露在业务接口中,这些方法可以使用注释。缺省情况下所有产生的接口都是local(本地)接口,你也可以使用注释来声明这个接口为remote(远程)接口。
使用JBoss IDE创建会话Bean十分方便,选择new->others->EJB3.0->Session Bean,打开会话Bean创建向导,如图所示

Session Bean Type中选择Stateless,表明要创建一个无状态会bean。在Bean Name中输入要创建的Session Bean的名称,这里我们创建一个处理客户反馈的无状态会话Bean:FeedBacks。点击finish按钮后,分别产生了会话Bean的接口文件和实现文件:FeedBacks,无状态会话Bean的业务接口:
public interface FeedBacks{
public FeedBack addFeedBack(int itemId,String title,String content,int userId,Collection feedBackFiles);
public void deleteFeedBack(int feedBackId);
……
}
在会话Bean的业务接口中,添加会话Bean的接口。其中声明该Bean实现会话Bean的Remote接口
无状态会话Bean的实现:
public class FeedBacksBean implements FeedBacks {
public FeedBack addFeedBack(int itemId,String title,String content,int userId,Collection feedBackFiles)
{
//此处添加实现代码
……
}
……
}
在实现中完成。 在实现中完成所有的业务逻辑编码。其中声明该Bean是一个无状态会话Bean。
|