关于J2ee标准SB+CMP以及SB+DAO的疑惑
因为平时做的都是基于开源的hibernate,struts的Web App
所以,用jsp->Struts(MVC)->bo(po加上逻辑方法)->DAO->po->DB
很舒服的设计开发.
可是最近小弟受了点刺激,去sun面试,被问知EJB开发,无语.所以最近研究使用EJB的开发模式.
如果在SessionBean的方法中调用pojo,pojo加上逻辑方法,这些方法中调用DAO对象,DAO对象方法内再调用操作CMP.这样可以吗?
好象通用的方法是SessionBean直接在它方法内部操作CMP.不过,我个人讨厌这样,因为这样一个逻辑对象就失去了它自己的逻辑操作.(下面例子)
逻辑对象:Student类
public class Student{
private String name=null;
String getName();
void setName(String name);
}
如果不只是当成传值对象,那么可以这样.
public class StudentBO extend Student{
void invalideName();
}
以前应用中(hibernate),其中invalideName()可以调用StudentDAO的操作.
如:
void invalideName(){
this.setName(null);
StudentDAO.save(this);
}
public class StudentDAO{
//do something hibernate do for us
}
但是现在(EJB),Student只能当成一个传值对象,那么StudentBo的相关操作应该写在那里??难道做一个stateless SB? StudentSB,里面方法都是invalideName(Student)???
我个人认为,stateless sb只是用来封装如StudentBO这种对象的逻辑操作的.一个方法是一个事务.不应该是来封装Student.invalideName()这种和对象紧密相关的逻辑操作的.
如:
StudentEJB{
void leaveSchool(Student s,Teacher t){//退学
s.knowThat();
t.invalidName();
}
哪个大哥来给小弟说说j2ee(EJB)开发中普通开发怎么来分层实现的,特别是逻辑层,如果不用DAO,只有SB\CMP,怎么划分逻辑??最好简单写写!拜托!小弟实在不解.......