выполнить последовательную транзакцию, используя сессионный компонент ejb2 без сохранения состояния - PullRequest
1 голос
/ 27 марта 2012

Я хочу выполнить запрос клиента, чтобы они вызывали сессионный компонент. Но иногда второй запрос успешно выполняется до первого.

Возможно ли последовательное выполнение клиентского запроса с помощью EJB2-компонента сеанса без сохранения состояния?

public generate(){
    .................
    update()
    .............
}
private update(){

  debugLog(" update query for "+id);

   //code for update query

  debugLog(" execute update query for "+id);


}

Когда я отправляю два запроса одновременно, я получаю журнал как ..

 update query for 16
 update query for 16
 execute update query for 17
 execute update query for 16

Но я хочу выполнить его последовательно, как

update query for 16
 update query for 16
 execute update query for 16
 execute update query for 17

1 Ответ

1 голос
/ 27 марта 2012

EJB-3.x Специфично:

  • Вам нужен синглтон-компонент - @Singleton, здесь вы используете компонент без сохранения состояния, который может выполняться параллельно и независимо для запросов в случайном порядке.

  • Теперь упорядочивая события по порядку, вы должны использовать механизм блокировки на уровне класса / метода в зависимости от ваших требований.

    По умолчанию bean-компоненты, отмеченные @Singleton, управляются контейнером и используют режим блокировки LockType.WRITE, явно может применяться @ConcurrencyManagement(CONTAINER). Если какой-либо метод вызывается клиентом, все остальные запросы должны будут ждать возврата предыдущего вызова.

    Вы также можете комментировать на уровне метода с помощью @Lock(LockType.WRITE). Следовательно, последовательность вызовов будет соответствовать порядку, в котором они вызываются клиентами.

EJB-2.x Специфично:

  • Вы должны создать синглтон самостоятельно, поскольку аннотации недоступны.

  • Не уверен насчет управляемого параллелизма контейнера в EJB-2.x, но синхронизация метода ввода определенно помогла бы, так как он вызывает другие методы внутри.

    Редактировать: Делегировать запросы от bean-компонентов в одноэлементный класс утилит и соответствующим образом синхронизировать метод. Поэтому это решит и проблему объединения и синхронизации с bean-компонентами без сохранения состояния.

...