Миграция IBM StartupBean EJB1.1 в @Startup EJB3.1 - PullRequest
0 голосов
/ 24 октября 2018

Мы переносим бин 1.1 StartUp, который ранее использовал интерфейсы IBM:

<session id="StartUp">
    <ejb-name>StartUp</ejb-name>
    <home>com.ibm.websphere.startupservice.AppStartUpHome</home>
    <remote>com.ibm.websphere.startupservice.AppStartUp</remote>
    <ejb-class>org.bean.StartUpBean</ejb-class>
    <session-type>Stateful</session-type>
    <transaction-type>Container</transaction-type>
</session>

в стандарт EJB 3.1.До сих пор мы писали код для bean-компонента без использования собственной реализации IBM:

@Startup
@Singleton
public class StartUpBean{

@PostConstruct
    public void start() {
       ...
       helper.runHelper(); // in new class
     }
   }

Сначала у нас были проблемы с порядком развертывания, потому что StartupBean запускался сразу после модуля.Мы решили это, используя другой порядок в application.xml.Однако одна проблема все еще остается.

В вспомогательном методе, вызываемом из метода start этого компонента, у нас есть некоторый код, который ищет компонент 1.1 без сохранения состояния с использованием имени JNDI.Этот компонент создает новый объектный компонент (1.1), вызывая метод create в новой транзакции (используя reguires_new в xml-дескрипторе).Затем он должен зафиксировать эту транзакцию, чтобы сохранить эту сущность, и вызвать функцию поиска, которая ищет эту запись в базе данных.Это выглядит так:

void runHelper(){
   ... 
   oldRemote = Server.lookup(OldBean.JNDI, OldBean.class);
   oldBean.prepareApp(); //prepareApp has requires new transaction attribute
   findThatNewEntity(key); // FinderException (not in database)
}

И в старом bean-компоненте без сохранения состояния 1.1

void prepareApp(){
 entityHome = Server.lookup(JNDI_NAME, Data.class);
 entityHome.create(key, value, value2);
}

Я на 100% уверен, что в предыдущей версии bean-компонента StartUp, который использовал интерфейсы IBM, был создан объекти хранится.Теперь это не так.Я боюсь, что транзакции в какой-то степени не поддерживаются в момент запуска приложения.Это так?Или есть какой-нибудь способ заставить использовать транзакции или какой-то обходной путь?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...