В настоящее время я работаю с толстым клиентским приложением, использующим самописный RMI-сервер (10 лет назад).Сервер отправляет компоненты EJB1.1 / 2.0 клиенту, который имеет полный доступ к этим удаленным объектам.После принятия транзакции все грязные компоненты сохраняются сервером.
План состоит в том, чтобы заменить сервер JBoss5 & EJB3 без (массового) изменения клиентского приложения (примерно 10000 файлов классов).Типичный фрагмент кода клиента:
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 я использую сессионный компонент без сохранения состояния для выполнения findByPrimaryKey.В этом искателе я ищу 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;
}
Любые предложения приветствуются!