2013-06-07 3 views
0

Проект состоит из EJB 2.0 и EJB 3.0 Фасоль. Я преобразовал сеанс сеанса с EJB 2.0 в EJB 3.0, и когда я запускаю проект, он инициализирует сессионный компонент несколько раз. Сессионный компонент вызывает другие сеансовые компоненты, которые, в свою очередь, вызывают разные методы этого сеансового компонента. До тех пор, пока это был сеанс EJB 2.0, был инициализирован только один экземпляр, но теперь инициализируются несколько экземпляров.Несколько экземпляров Session Bean и метод @PostConstruct под названием

UtilitiesController Session Bean инициирует поток, который вызывает Разное Класс (Вспомогательный класс POJO), который в свою очередь вызывает ProductScheme Session Bean, который вызывает ServerGlobalValues ​​ (Вспомогательный класс POJO) и он вызывает UtilitiesController Session Bean

Ниже приведены журналы:

setSessionContext Вызывается!
setSessionContext Called!
Метод @PostConstruct называется!
Запуск инициализации
< 2013-06-07 15: 03: 53,535 - ServerSession (316201757) - EclipseLink, версия: Затмение Постоянство Услуги - 2.1.3.v20110304-r9073>
< 2013-06 -07 15: 03: 53.535 - ServerSession (316201757) - Сервер: 10.3.5.0>
setSessionContext Called!
setSessionContext Called!
Метод @PostConstruct называется!
Запуск инициализации
< 2013-06-07 15: 03: 53.691 - ServerSession (316201757) - The DatabaseSession имеет внешний контроллер транзакций, определенный нечто иное, чем ServerPlatform. EclipseLink позволит переопределить внешний контроллер транзакций, но мы рекомендуем рассмотреть альтернативу подкласса org.eclipse.persistence.platform.server.ServerPlatformBase и переопределить getExternalTransactionControllerClass().>
< 2013-06-07 15:03: 53.691 - ServerSession (316201757) - EclipseLink, версия: Eclipse Persistence Services - 2.1.3.v20110304-r9073>
< 2013-06-07 15: 03: 53.691 - ServerSession (316201757) - Server: 10.3. 5.0>
setSessionContext Called!
setSessionContext Called!
Метод @PostConstruct называется!
Запуск инициализации
< 2013-06-07 15: 03: 53.722 - ServerSession (316201757) - The DatabaseSession имеет внешний контроллер транзакций, определенный нечто иное, чем ServerPlatform.EclipseLink позволит переопределить внешний контроллер транзакций, но мы рекомендуем рассмотреть альтернативу подкласса org.eclipse.persistence.platform.server.ServerPlatformBase и переопределить getExternalTransactionControllerClass().>
< 2013-06-07 15:03: 53.722 - ServerSession (316201757) - EclipseLink, версия: Eclipse Persistence Services - 2.1.3.v20110304-r9073>
< 2013-06-07 15: 03: 53.722 - ServerSession (316201757) - Сервер: 10.3. 5.0>
setSessionContext Called!
setSessionContext Called!
Метод @PostConstruct называется!
Запуск инициализации
< 2013-06-07 15: 03: 53.847 - ServerSession (316201757) - The DatabaseSession имеет внешний контроллер транзакций, определенный нечто иное, чем ServerPlatform. EclipseLink позволит переопределить внешний контроллер транзакций, но мы рекомендуем рассмотреть альтернативу подкласса org.eclipse.persistence.platform.server.ServerPlatformBase и переопределить getExternalTransactionControllerClass().>
< 2013-06-07 15:03: 53.847 - ServerSession (316201757) - EclipseLink, версия: Eclipse Persistence Services - 2.1.3.v20110304-r9073>
< 2013-06-07 15: 03: 53.847 - ServerSession (316201757) - Server: 10.3. 5.0>
setSessionContext Called!
setSessionContext Called!
Метод @PostConstruct называется!
Запуск инициализации
< 2013-06-07 15: 03: 53.879 - ServerSession (316201757) - The DatabaseSession имеет внешний контроллер транзакций, определенный нечто иное, чем ServerPlatform. EclipseLink позволит переопределить внешний контроллер транзакций, но мы рекомендуем рассмотреть альтернативу подкласса org.eclipse.persistence.platform.server.ServerPlatformBase и переопределить getExternalTransactionControllerClass().>
< 2013-06-07 15:03: 53.879 - ServerSession (316201757) - EclipseLink, версия: Eclipse Persistence Services - 2.1.3.v20110304-r9073>
< 2013-06-07 15: 03: 53.879 - ServerSession (316201757) - Server: 10.3. 5.0>
javax.ejb.EJBTransactionRolledbackException: EJB Exception:; вложенное исключение: Exception [EclipseLink-8030] (Eclipse, Постоянство Услуги - 2.1.3.v20110304-r9073): org.eclipse.persistence.exceptions.JPQLException

Как видно из бревен, что setSessionContext называется дважды для каждого создания экземпляра и метода @PostConstruct также вызывается перед инициализацией.

Может кто-нибудь указать, что может быть причиной такого поведения. Отсутствует ли какая-либо конфигурация?

+0

Как выглядит ваш код сеанса? Каковы трассировки стека для двух вызовов setSessionContext (используя Thread.dumpStack())? –

ответ

0

Я забыл упомянуть, что классы-помощники (например, класс & ServerGlobalValues) являются одноточечными, а поведение одноэлементного класса является неожиданным. Я обнаружил, что причина для нескольких экземпляров связана с вызовом getInstance() вспомогательных классов. Если я вызову getInstance() внутри PostConstruct, я вижу несколько экземпляров как вспомогательных классов, так и контроллера, но перемещение на уровень класса разрешает проблему с несколькими экземплярами.

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