Java @Singleton、@Startup、@PostConstruct不';t在EJB3.1和Glassfishv3.0.1上工作
我的设置有问题,甚至无法查看日志 这是我的Java @Singleton、@Startup、@PostConstruct不';t在EJB3.1和Glassfishv3.0.1上工作,java,jakarta-ee,timer,glassfish,ejb,Java,Jakarta Ee,Timer,Glassfish,Ejb,我的设置有问题,甚至无法查看日志 这是我的@Singleton@StartupEJB: @Singleton @Startup @DependsOn("SchedulerEJB") public class SchedulerStartUp { private static Logger log = Logger.getLogger(SchedulerStartUp.class); @EJB SchedulerEJB schedEJB; @PostCon
@Singleton
@Startup
EJB:
@Singleton
@Startup
@DependsOn("SchedulerEJB")
public class SchedulerStartUp {
private static Logger log = Logger.getLogger(SchedulerStartUp.class);
@EJB
SchedulerEJB schedEJB;
@PostConstruct
public void atStartup() {
log.info("startUp")
System.out.println("startUp");
schedEJB.cancelTimer("EBlastScheduler");
schedEJB.createTimer("*/1", "*", "*");
}
}
时间表ejb
:
@Stateless
public class SchedulerEJB {
@Resource
TimerService timerService;
public cancelTimer(String timerInfo){/*...*/}
public createTimer(String sec, String min, String hour) {/*...*/}
@Timeout
public void execute(Timer timer) {/*...*/}
}
Maven pom:
//Been Using Glassfishv3.0.1 and EJB3.1 with a dependency of:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
//一直在使用Glassfishv3.0.1和EJB3.1,依赖项为:
爪哇
JavaEEAPI
6
假如
的属性中包含无效的bean类型。DependsOn用于表示两个单例会话bean之间的依赖关系,而不是单例和无状态会话bean之间的依赖关系。您应该将ScheduleEJB更改为Singleton或删除依赖项
如果您决定将ScheduleEJB更改为Singleton,则也不需要@DepensOn,因为(来自EJB3.1规范):
注意,如果一个单例只需要调用另一个单例
从它的PostConstruct方法来看,不需要显式排序元数据
必修的。在这种情况下,第一个单例将只使用ejb
调用目标单例的引用。在那里,收购
ejb引用(通过注入或查找)不存在
必然意味着相应单例的实际创建
bean实例
你能调试它吗?此外,我在使用commons日志记录时遇到问题,我最终使用了slf4j
LoggerFactory.getLogger(SchedulerStartUp.class)
logging在部署应用程序时运行良好,它似乎只在这种情况下使用:(遗憾的是,没有时间这么做:(,现在正在考虑许多事情…帮助:((请将“@EJB”受让人更改为接口(带有“@Remote”/“@Local”)而不是EJB本身。另外,如果依赖项不使用@Singleton,请删除“@DependsOn”,谢谢。但我需要它是@Stateless,有什么解决方法吗?也许我应该完全删除“@DependsOn”?但是我的“@EJB”会工作吗?:(“@EJB”不起作用,有没有办法初始化上面名为“ScheduleEJB”的bean?我还没有从singleton调用无状态bean的情况,但我假设删除@DependsOn应该起作用,假设在代码的其他部分中没有任何隐藏的需要,为什么应该在之前初始化ScheduleEJB。容器应该保证这一点您当前的代码中有一个实例可供使用,无需添加任何内容。谢谢,现在已经很清楚了!其他人正在读这篇文章:“永远不要像我所做的那样导入错误的库,我导入了com.google.inject.Singleton而不是javax.ejb.Singleton”再次感谢!我知道这是一个老问题,在Jboss 7.x上,我刚刚用@DependsOn引用了一个单例bean中的无状态bean:我认为它不符合EJB3,但它可以工作。来源:此票据: