对于业务对象怎么封装的在过去Core J2EE Pattern上,把业务对象的属性都是散列开的。而且其中有个不佳实践,就是把业务对象当中的所有属性都变成一个传输对象(这个传输对象看上去有点像领域模型)。新的技术编程模型下(EJB3.0),应该让业务对象直接持有实体,而不是把每一个属性都列开,原因在于,如果把属性都列开,那么业务对象本身应该被管理,为什么呢?如果多个事务或多个现程在访问本来相同的业务对象(标识相同) 的时候,那么由于业务对象不受管,他们创建了各自的实例,彼此不相干,但是当最后提交内容的时候,就可能会导致结果很意外。这个同 容器的四种事务隔离级别的意义很类似,如果要将BO的属性都列开,那么,就应该让BO受管,相当于单独实现一个BO的容器,控制并发,控制事务。这个容器 要实现多个线程共享一个标识相同的业务对象,并控制并发访问,合适的隔离事务。也就是说要做一个容器应该做的事情。应该巧妙的利用容器提供的持久性容器来解决这个问题。将实体放到业务对象中,对业务对象的操作,实际上是业务对象的业务方法的操作,而业务方法操纵的是持久化上下文中的实体的状态,每一个被创建出来具有相同标识的业务对象,虽然是不同的实例,但是都包含对同一个实体对象的引用。这样对业务对象状态的变更,实际上是对一个实体对象状态的变更,仍然属于受管状态。但是这个时候也一定要搞清楚,业务对象包裹的这个实体的状态:新建、受管、脱管、已删除。