我目前正在使用自写的RMI服务器(10年前)的胖客户端应用程序上工作。服务器将EJB1.1/2.0 bean发送给可以完全访问这些远程对象的客户端。提交事务后,所有脏bean都被服务器持久化。EJB3 RMI客户端
该计划是在没有(大规模)更改客户端应用程序(大约10000个类文件)的情况下,通过JBoss5 & EJB3替换服务器。 一个典型的客户剪断将是
UserTransaction tx = ClientCtxManager.getUserTransaction();
tx.begin();
DummyClassHome dummyHome = (DummyClassHome)lookup(DummyClassHome.class.getName());
DummyClass dummy = dummyHome.findByPrimaryKey(1234);
dummy.setValue("Hello World");
tx.commmit();
- >虚设坚持在服务器上。
在JBoss上,我使用无状态会话bean来执行findByPrimaryKey。在这个查找器中,我查找了一个有状态会话bean的RemoteInterface,我想用它来将实体携带到客户端。由于序列化/反序列化,实体失去了对会话的连接,这对提交更改至关重要。
// DummyHome implementation
public MyClass findByPrimaryKey(BigDecimal pk)
{
Session s = HibernateUtil.getSessionFactory().getCurrentSession();
MyClassEntity temp = (MyClassEntity)s.get(MyClassEntity.class, (BigDecimal)pk);
// session.contains(temp) delivers true
MyClassRemote remote = (MyClassRemote)InitialContextFactory.getInitialContext().lookup("DemoEAR/MyClassBean/remote");
remote.setENTITY(temp); // set the member variable of the stateful session bean
//session.contains(remote.getENTITY()) delivers false
return remote;
}
任何建议,将不胜感激!
Thx为您的答案,它显示了我正确的方向。我现在在我的SFSB中注入EntityManager时使用了扩展持久化上下文(@PersistenceUnit(unitName =“xyz”,type = PersistenceContextName.EXTENDED) – websta 2010-08-17 13:55:20