ну у них в документации шикарный туториал вообще то есть  да для вызова методов EJB бина там есть специальный Job класс - EjbInvokerJob, у меня с ним правда работать не получилось на Jboss все падало, поэтому я по аналогии свой написал (какая то фигня у меня была с PortableRemoteObject.narrow). а примерчик тебе чего именно нужен ? вот мой конфиг кварца: | Код | #============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = MyClusteredScheduler org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 3 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.makeThreadsDaemons = true #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = Qds org.quartz.jobStore.nonManagedTXDataSource = nmQds org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000 #set datasource jndi location org.quartz.dataSource.Qds.jndiURL=jdbc/managedQuartzDS org.quartz.dataSource.nmQds.jndiURL=jdbc/notManagedQuartzDS #============================================================================ # History plugin #============================================================================ org.quartz.plugin.triggHistory.class = \ org.quartz.plugins.history.LoggingTriggerHistoryPlugin org.quartz.plugin.triggHistory.triggerFiredMessage = \ Trigger \{1\}.\{0\} fired job \{6\}.\{5\} at: \{4, date, HH:mm:ss MM/dd/yyyy} org.quartz.plugin.triggHistory.triggerCompleteMessage = \ Trigger \{1\}.\{0\} completed firing job \{6\}.\{5\} at \{4, date, HH:mm:ss MM/dd/yyyy\}.
|
web.xml: потому что кварц нужно запускать когда сервер стартует а в спецификации ejb 3.0 нет слушателей на запуск/остановку приложения (@PostConstruct применять нельзя, эта аннотация делает несколько другое действие) | Код | <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>start-delay-seconds</param-name> <param-value>15</param-value> </context-param> <context-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </context-param> <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener> //референсы на ejb бины которые я вызываю </web-app>
|
ну и вот таким кодом я создаю задачи для quartz: | Код | /** * создать задачу для quartz * @param cronString * @param jobName название задачи * @param triggerName название триггера * @param groupName название группы * @param handlerClass класс обработчик * @param params дополнительные параметры (разделены ,) * @return */ public boolean createBillingJob(String cronString, String jobName, String triggerName, String groupName, String handlerClass, String params) { try { JobDataMap dataMap = new JobDataMap(); if (params != null && params.equals("") == false) { String[] nameValuePairs = params.split(","); for (String pair : nameValuePairs) { String[] nameValue = pair.split("="); dataMap.put(nameValue[0], nameValue[1]); LOGGER.trace("put name-value pair into jobDataMap: " + nameValue[0] + "-" + nameValue[1]); } } Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = new JobDetail(jobName, groupName, Class.forName(handlerClass), false, false, true); job.setJobDataMap(dataMap);
CronTrigger trigger = new CronTrigger(); trigger.setCronExpression(cronString); trigger.setName(triggerName); trigger.setJobGroup(job.getGroup()); trigger.setJobName(job.getName()); trigger.setGroup(job.getGroup() + "_trigger"); scheduler.scheduleJob(job, trigger); LOGGER.trace("job: " + groupName + "/" + jobName + " was succesfull scheduled with cron : " + cronString); return true; } catch (Exception ex) { LOGGER.error(ex, ex); } return false; }
|
|