>我也用不同的客户端访问测试过,也只有一个
这个测试方式是不准确的,你用使用不同客户端并发同时访问(用jmeter),不是一个客户端访问完,再用另外一个客户端访问,根据POOL原理,POOL会重用一个,也就是重用你第一个访问的EJB实例,给第二次访问,那么从感觉好像两者都是同一个。

这个问题我在以前EJB2.X关于对象池说明中解释过。
[该贴被banq于2008-10-16 14:09修改过]

谢谢BANQ大哥的细心指导,使我避免了在EJB3中的缓存问题上走弯路,
现在我已经知道怎么EJB上使用hibernate上实现缓存了
谢谢

stateless session bean是不能用extended persistence context的,首先明确容器对stateless和statefull是怎么管理的,对于EJB容器来说,采用了两种方式来管理bean,其中stateless bean,messsageDrieven bean都是采用实例池的方式,而对于我们的statefull session bean是采用激活、钝化技术来实现,每个statefull bean都有一个sessionID.

至于实体的生命周期来说,生命周期都是与persistence context(这个 其实就是一级缓存,无论是hibernate还是JPA)绑定的,那我们的persistence context又是和谁绑定的呢?对于JPA来说,事务型的persistence context是与当前的事务绑定的,而对于statefull bean的extended persistence context来说,persistence context是与当前的statefull bean的生命周期一致的,只有当statefull bean的生命周期结束的时候才会关闭扩展的持久化上下文。所以扩展的持久化上下文是不能用到无状态的会话bean里的。