项目由EJB 2.0和EJB 3.0 Beans 组成。我将会话 bean 从 EJB 2.0 转换为EJB 3.0,当我启动项目时,它多次初始化会话 bean。会话 bean 调用其他会话 bean,后者又调用此会话 bean 的不同方法。只要是 EJB 2.0 会话 bean,就只初始化了一个实例,但现在初始化了多个实例。
UtilitiesController Session Bean 启动一个线程,该线程调用Miscellaneous Class(Helper Class POJO),后者调用ProductScheme Session Bean,后者调用ServerGlobalValues(Helper Class POJO)并调用UtilitiesController Session Bean
以下是日志:
setSessionContext 调用了!
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.535--ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.535-- ServerSession(316201757)--Server: 10.3.5.0>
setSessionContext Called!
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.691--ServerSession(316201757)--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 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.722--ServerSession(316201757)--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)--Server: 10.3.5.0>
setSessionContext Called !
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.847--ServerSession(316201757)--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 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.879--ServerSession(316201757)--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 异常:;嵌套异常是:异常 [EclipseLink-8030] (Eclipse Persistence Services - 2.1.3.v20110304-r9073): org.eclipse.persistence.exceptions.JPQLException
从日志中可以看出,每次创建实例都会调用两次setSessionContext,并且在初始化之前也会调用@PostConstruct方法。
谁能指出这种行为背后的原因。是否缺少任何配置?