gpt4 book ai didi

quartz-scheduler - 如何从 Quartz 作业访问 EJB

转载 作者:行者123 更新时间:2023-12-02 15:24:13 26 4
gpt4 key购买 nike

嗯,我正在使用 Quartz 来安排我的应用程序中需要的一些作业。但是,我需要某种方法来访问我的作业中的 Stateful SessionBean。我知道我不能用@EJB 注入(inject)它。谁能帮我?谢谢。

最佳答案

我使用 EJB3InvokerJob 来调用 EJB 的方法。然后我创建了扩展 EJB3InvokerJob 的作业,输入它应该调用的 EJB 和方法的参数,然后调用 super.execute()。

EJB3InvokerJob 可以在这里找到:http://jira.opensymphony.com/secure/attachment/13356/EJB3InvokerJob.java

我的工作是这样的:

public class BuscaSistecJob extends EJB3InvokerJob implements Job{

private final Logger logger = Logger.getLogger(this.getClass());

@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap dataMap = jobExecutionContext.getMergedJobDataMap();
dataMap.put(EJB_JNDI_NAME_KEY, "java:app/JobService");
dataMap.put(EJB_INTERFACE_NAME_KEY, "br.org.cni.pronatec.controller.service.JobServiceLocal");
dataMap.put(EJB_METHOD_KEY, "buscaSistec");
Object[] arguments = new Object[1];
arguments[0] = jobExecutionContext.getTrigger().getStartTime();
dataMap.put(EJB_ARGS_KEY, arguments);
Class[] argumentTypes = new Class[1];
argumentTypes[0] = Date.class;
dataMap.put(EJB_ARG_TYPES_KEY, argumentTypes);

super.execute(jobExecutionContext);
}

}

我的EJB是这样的:

@Stateless
@EJB(name="java:app/JobService", beanInterface=JobServiceLocal.class)
public class JobService implements JobServiceLocal {

@PersistenceContext
private EntityManager entityManager;

@Resource
private UserTransaction userTransaction;

@Override
public void buscaSistec(Date dataAgendamento) {
// Do something
}

我希望能帮助别人。

关于quartz-scheduler - 如何从 Quartz 作业访问 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com