使用EJB3,如何应对复杂的业务逻辑

最近要开展一个新的项目,再SSH还是EJB3中徘徊,我倾向于用EJB3开发,因为可分布式部署,这也是项目要求
但是由于我对EJB3不熟悉,所以就有几个疑问,在这里向各位讨教讨教..
第一个就是 对于一个 业务逻辑我们可以用策略模式实现 (以下代码只是个大概):
一个业务接口: (根据不同的还款方法生成每个月的还款金额)
我可以把它放在DOMAIN包:
Public interface IPaySchedule() {
Map createPaySchedule();
}
具体的实现有很多中比如等额本金,等额本息等, 我们每一个类都要实现上面的这个接口,我把放入EJB3包,其实就是接口的具体实现, 形如:
@Stateless
@Remote ({IPaySchedule.class})
Public BenJinPaySchedule() implements IPaySchedule {
Public Map createPaySchedule{
/// 具体的实现代码
}
}
@Stateless
@Remote ({IPaySchedule.class})
Public BenxiPaySchedule() implements IPaySchedule {
Public Map createPaySchedule{
/// 具体的实现代码
}
}
我的疑问是不是应该每个一具体实现类都要添加注释使一个POJO为EJB…(按逻辑来说应该是这样).
紧接着,从前台我们传一个参数,可以分辨是本金还是本息的参数,通过STRUTS调用SESSIONBEAN..在这里我是不是要写一个工厂+反射 获得具体类,或者通过lookup具体类获得实例,或者有更好的办法!
还有, 就是 SESSIONBEAN 调用具体的DAO实现类的时候,(我觉得这里应该用ENTITYBEAN调用更好,加上JPA持久,但是JPA不是很熟,这方面等我研究后再向大家请教)我可以写配置文件调用吗..不想写注释调用..这样我要是修改的话,还要动程序,能不能像SPRING那样, 我只修改配置文件就可以了…
另外一个就是我的标题的问题了,在这里潜水看大家的帖子,知道DDD分析的重要性,我尝试这个项目用DDD建模,再EJB中我如何具体的匹配PPT, MI, VO,ROLE

[该贴被tangshd于2009-05-06 19:48修改过]

EJB是一个比较出色的分布式系统解决方案。但是如果用的不好。并不能给系统带来好处。所以选择的时候要慎重考虑。
当你在决定EJB组件是否为适合你的实际情况的合适技术时,不妨先考虑几个问题。如果你对所有这些问题的回答都是肯定的话,那么 EJB 组件就是你可以采用的合适技术。反之的话,别的技术可能更适合。
1.是否需要将商务逻辑组件与面向外界的 Internet 隔离开
2.是否不止一种类型的客户端访问共享数据。
3.是否需要对共享数据同时进行读和写操作。
4.是否需要访问具备事务处理功能的多个异构数据源。
5.是否需要能与HTML文档,servlets,jsp文件,客户端登录无缝集成方法级对象安全性。
6.体系结构是否需要标准话,轻量化,组件化。
7.是否需要多个服务器来满足系统的吞吐量和有效性。

首先谢谢spikeme的回复。
你所提到的几个方面,有几个是在我们的考虑其中的。
我所在的项目组中,SSH与EJB3各持己见,主要是熟悉的问题,我虽然不熟悉EJB3,但我倾向于EJB3。
不过昨天已经达成共识,使用EJB3.

EJB Spring等框架只是DDD应用的一个套子,你可以将DDD中的服务用用无态Bean来实现,可以将DDD的实体聚合作为JPA实体Bean。

谢谢banq大神的回复..
我说一下我的理解,不正确的请指正:

"DDD中的服务用用无态Bean"; 这个服务应该是应用层,也就是传统的SERVICE层,这个层如果我再封装一层FACADE供外部调用,我想这个FACADE也应该是在这里, 因为这层是对外开放的接口,这个FACADE也要使之成为EJB才可以(通过注释或者配置文件)

"可以将DDD的实体聚合作为JPA实体Bean"; 如果多个持久化对象组成的业务,我如何控制事务,应该也是在无态Bean中, 但是我不清楚这个是不是有个命令什么的,比如
transcation.begin()
//持久(A)
//持久(B)
transcation.commit()
这样我们保证了业务的正确性.(这里我不熟悉,只是提出想法,我会查资料来验证的)

还有一点, 这样一来是不是我们就没有必要使用DAO了, 因为只要我们持久的目的都是"关系型数据库",这个JPA都是通用的.不知道理解的对不对.敬请各位指点

你的理解大概是对的,可以参考JiveJdon源码,messageService就是一个无态Bean,无态Bean缺省打开事务,但是会影响性能,我不喜欢,用Spring+JTA,缺省也会打开事务AOP,总要检查一次,也会影响性能,我也不喜欢。事务可以在自己需要的时候单独做一个类,见messageTransactionPersistence。

关于事务和服务和实体,这个DDD中也讲了,事务不要放在Repository中,放在服务也可以,但是最好单独一个事务类。