2009-05-21 2 views
6

Являются ли сеансовые бобы (сессионные компоненты без состояния, сессионные компоненты с состоянием) Синхронизированы?EJB и синхронизация

+1

синхронизирован с чем? –

+1

кто-то задал мне этот вопрос, какой должен быть правильный ответ? Я не видел синхронизированных методов внутри EJB, я бы сказал, что EJB не синхронизирован. Как обычно люди спрашивали: «Синхронизирован ли Hashtable?» –

+0

Технически ваш вопрос непонятен. Вы имеете в виду: нужны ли сеансовые компоненты для потоковой безопасности? или Являются сессионными компонентами потокобезопасными? –

ответ

6

Только одна нить за раз будет получать доступ к вашим бобам. Это зависит от сервера приложений. Поэтому вы не должны использовать синхронизацию из своих компонентов. Вот почему не-потоковый, такой как EntityManager, может быть значением экземпляра и не иметь проблем с синхронизацией.

+0

Да, это прекрасно, но кто-то задал этот вопрос в интервью, и я ответил так же, но он не был удовлетворен моим ответом. –

+3

Всегда возможно, что у них не было подсказки. –

+1

Точно. Кроме того, новая аннотация @AccessTimeout позволяет вам настроить переносимым образом, как долго вы хотите, чтобы вызывающий поток дождался появления экземпляра. Также обратите внимание, что новый bean-компонент @Singleton может быть настроен так, чтобы разрешить многопоточный доступ, но по умолчанию это не так. Это решение было принято в целях сохранения последовательности правил по умолчанию для всех сессионных компонентов (@Stateless, @Stateful, @Singleton) –

-1

Очень правдоподобная вещь о компонентах EJB заключается в том, что как только вы создали EJB 3.0 beans, тогда методы EJB по умолчанию синхронизируются.

например.

@Statelss Класс EJBclass {

аннулируются SomeMethod() {}

}

теперь, если вы сделаете это SomeMethod Синхронизировать он будет показывать ошибку, как это не может быть Синхронизировать в этот уровень, поскольку он синхронизирован.

EJB 3.0 Бобы умны, а производительность хорошая.

-1

Предприятие java beans не синхронизировано. Поскольку сеансовые компоненты поддерживаются контейнером ejb, вам необходимо реализовать логику синхронизации на уровне приложения.

+0

Уверены ли вы в этом? Я думаю, что стандарт JEE очень ясен, и только Entity Beans позволяют настроить текущий доступ к их методам. Пожалуйста, поправьте меня, если я ошибаюсь. – icordoba

1

Session bean означает, что зарегистрированный пользователь. Если пользователь дважды щелкает мышью по действию пользовательского интерфейса, два HTTP-запроса создаются в двух отдельных потоках.

  • Бланки без гражданства НЕ СИНХРОНИЗИРОВАНЫ. Каждый поток получит другой экземпляр, и оба выполняются логически. Оба могут получить доступ к тем же ресурсам!
  • Statefull beans синхронизируется контейнером. Оба потока получат один и тот же экземпляр ejb. Второй поток ждет завершения первого. Нет проблем.
1

Головные сеансы без учета состояния/состояния являются потокобезопасными. Поскольку каждый запрос получит выделенный экземпляр компонента и поэтому его не нужно синхронизировать.

Отдельные сеансовые сеансы Singleton совместно используются и должны быть синхронизированы либо контейнером (Контейнер Управляемый параллелизм - CMC), либо пользователем (Bean Managed Concurrency - BMC).

Смежные вопросы