【发布时间】:2014-08-04 14:20:37
【问题描述】:
如何在此代码中强制创建或注入我的 EJB(使用 JPA Entitymanager)?
问题是 jc.doStuff() 在@PostConstruct 中运行良好一次,因为 EJB 是 actice,但 Quartz 正在调用 execute() 并且 EJB 当然没有注入。 由于 EJB,jc.doStuff 抛出空指针异常。
我能做什么? 如何注入执行的 EJB 也可以访问它?
感谢您的帮助!
@ManagedBean
@ApplicationScoped
public class JobDatasource implements Job {
@EJB
JobContent jc;
private String TEXT = "V1";
public JobDatasource() {
System.out.println("Job Bean created");
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
jc.doStuff();
}
@PostConstruct
public void startJob() throws SchedulerException {
System.out.println("Und los gehts!");
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail jobdataSourceCheck = JobBuilder.newJob(JobDatasource.class)
.withIdentity("DataSourceCheck", "group1").build();
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(
simpleSchedule().withIntervalInSeconds(10)
.repeatForever()).build();
sched.scheduleJob(jobdataSourceCheck, trigger);
jc.doStuff();
sched.start();
}
public String getTEXT() {
return TEXT;
}
public void setTEXT(String tEXT) {
TEXT = tEXT;
}
}
@Stateless
public class JobContent {
@EJB
ITestDataDao dao;
public void doStuff() {
Set<TestData> testdata = createTestData();
for (TestData td : testdata) {
dao.saveData(td);
}
}
private Set<TestData> createTestData() {
Set<TestData> testData = new HashSet<TestData>();
for (int i = 0; i < 500; i++) {
TestData td = new TestData();
td.setRandomText("TESTDATA");
testData.add(td);
}
return testData;
}
}
【问题讨论】:
标签: java jakarta-ee jpa timer