那麼,我正在使用Quartz來安排我的應用程序中需要的一些工作。但是,我需要一些方法來訪問我的Job上的有狀態SessionBean。我知道我不能用@EJB注入它。誰能幫我? 謝謝。如何從Quartz Job訪問EJB
1
A
回答
4
我使用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
}
我希望能幫助別人。
1
一個簡單的解決方案是在Job實現中通過JNDI查找EJB。
final Context context = new InitialContext();
myService= (MyService) context
.lookup("java:global/my-app/myejbmodule-ejb/MyService");
我已經在我正在Glassfish 3.1上開發的當前應用程序中完成此操作。
0
只需在Job實現中通過JNDI查找EJB,就可以做到這一點。特別是,JNDI名稱將是:
mappedName#name_of_businessInterface
其中name_of_businessInterface
是這個會話bean的業務接口的全名。例如,如果指定mappedName="bank"
並且業務接口的完全限定名稱爲com.CheckingAccount
,則業務接口的JNDI爲bank#com.CheckingAccount
。
代碼示例:
Context context = new InitialContext();
MyService myService= (MyService) context.lookup("MyService#com.test.IMyService");
相關問題
- 1. 無法從Grails中的Quartz Job訪問任何bean
- 2. 找到一個石英JOB內的EJB
- 3. Quartz Job listeners線程安全
- 4. 在Quartz Job中使用PersistenceContext
- 5. 測試Quartz JDBC Job Store
- 6. 從EJB訪問ManagedBean方法
- 7. 從Spring訪問EJB類
- 8. 從EJB層訪問pushcontext
- 9. Cron Job訪問django模型
- 10. 如何從App Engine cron job訪問私人Fusion Table?
- 11. 訪問hadoop job tracker ui
- 12. 如何從Quartz作業訪問域對象?
- 13. Quartz Job Scheduler沒有觸發作業(C#)
- 14. Quartz for job scheduling的替代方案
- 15. 石英屬性不會觸發Quartz Job
- 16. 如何訪問EJB的'會話'?
- 17. 如何在使用Easyrest時訪問EJB?
- 18. 如何使用JNDI訪問EJB Weblogic
- 19. 如何在JBoss6中動態添加Quartz Job
- 20. 如何添加到我的Quartz Job DisallowConcurrenExecution中?
- 21. 使用EntityManager從EJB訪問Hibernate Session
- 22. 有沒有辦法從Linux Shell手動調用Spring Quartz Job
- 23. 內部類訪問EJB
- 24. Java EE:如何從Web模塊訪問本地EJB?
- 25. 如何從部署到Websphere 6.1的EJB訪問認證別名
- 26. 如何從Websphere 6.1中的EJB訪問User Registry
- 27. 如何從grails獨立客戶端訪問EJB服務
- 28. 無法訪問遠程EJB
- 29. Singleton EJB,JPA併發訪問
- 30. EJB遠程方法訪問
JNDI名稱來查找您的服務將在控制檯上,一旦你啓動服務器進行打印。 –