我曾在我需要一个豆(ReportManager)在应用程序启动时加载的情景,所以它可以安排执行(由数据存储豆从数据库调查)报告。
周围的Googling我发现@Singleton,@Startup和@DependsOn注释,我已经用这样的:
@Singleton
@Startup
@DependsOn("DataStore")
public class ReportManager {
@EJB
DataStore dataStore;
@PostConstruct
public void scheduleReports() {
logger.log("INITIALIZED");
List<Report> reports = dataStore.getReports();
....
}
}
@Singleton
@RolesAllowed("user") //I had security checks implemented like that beforehand
public class DataStore {
@PostConstruct
public void initialize() {
logger.log("INITIALIZED");
}
public List<Report> getReports() {
...
}
}
问题是,我是在部署的时候变得非常奇怪的例外:
<2012-09-27 14:04:15 CEST> <Warning> <Deployer> <BEA-149004> <Failures were detected while initiating deploy task for application "app".>
<2012-09-27 14:04:15 CEST> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: Exception starting module: EJBModule(app-ejb-1.0-SNAPSHOT.jar)
Unable to deploy EJB: ReportManager from app-ejb-1.0-SNAPSHOT.jar:
Singleton ReportManager(Application: app, EJBComponent: app-ejb-1.0-SNAPSHOT.jar) failed to initialize.
at weblogic.ejb.container.deployer.EJBModule.start(EJBModule.java:592)
.....
Caused By: weblogic.ejb.container.InternalException: Transaction marked rollback or not expected transaction status: 1
at weblogic.ejb.container.manager.SingletonSessionManager.postCallback(SingletonSessionManager.java:464)
没有真正heplful异常消息。 特别是我还没有得到任何“初始化”日志条目。 当我注释掉dataStore.getReports()调用一切工作正常和豆类按照正确的顺序构建(制作“初始化”的消息)。 包括数据存储的方法调用是导致上述错误并在某种程度上supressing所有的日志输出。
我使用的Weblogic 12C。