我目前正在使用自寫的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