关于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,怎么划分逻辑??最好简单写写!拜托!小弟实在不解.......

BO一般指带事务机制的Object,那么在EJB中是SLSB实际就是一个BO。

>如果在SessionBean的方法中调用pojo,pojo加上逻辑方法,这些方法中调用DAO对象,DAO对象方法内再调用操作CMP.这样可以吗?

当然是可以,但是会产生粗粒度事务,直接SLSB调用CMP。
可以使用SLSB+DAO+JDBC/Hibernate调用,不涉及事务是可以的。

当然最新技术,采取SLSB+DAO+Spring事务+JDBC/Hibernate也是可以的。
DTO只有在EJB中才存在的模式,DTO是VO的现在名词,意思是值对象,用于在分布式环境实现一次性打包传送参数或数值。

在纯Web中,因为不涉及多台服务器分布计算,所以一般只有BO+DAO,当然两者都是POJO,POJO是普通旧的JavaBean对象,意思指那些不依赖继承接口或其他类,独立的JavaBeans。

搞这么多名词有什么用啊,直接说不得了,class就是class,object就是objec.搞的莫名其妙的新名词这么多,有碍交流,名字都记不过来,还交流什么.

你的疑问非常有意思,这么多名词反应Java世界的复杂,每个流派根据自己定义来发明词语。

不必要的复杂会导致java发展很慢

我以前的实现:SLSB -> BO -> DAO ->EB&HB -> DB

正是有这么多精简的名词,开发人员才可以更快捷的交流,否则,你光解释这个class object是干啥用的,就够烦的了