Как кварц запустил EJB-компонент без сохранения состояния? - PullRequest
0 голосов
/ 02 февраля 2011

Я использую Jboss5.1.x, EJB3.0

Я занимаюсь этим вопросом уже пару дней. Я слышал, что это должно быть легко, но кажется, что это или отсутствие документов, или мне было трудно что-то получить.

Мой сценарий состоит в том, чтобы иметь запланированное задание, которое будет запускаться при первом развертывании моего проекта сервера приложений в jboss, а затем я хочу, чтобы мой процесс перезапускался каждый раз X.

Мне наконец-то удалось добавить кварцевую мангу в jboss-service.xml

но:

  1. как автоматически запустить его после развертывания сервера? Я видел, что я должен сделать это через сервлет? так как я буду запускать сервлет при развертывании проекта? я не могу запустить его без сервлета и сделать это прямо на EJB-бине?

  2. после его запуска я хочу вызвать из метода триггера EJB-компонент без сохранения состояния.

Я бы хотел, чтобы сценарий был примерно таким:

(развертывание приложения -> Кварц -> EJB-компонент -> ..) вместо (развертывание приложения -> Кварц -> сервлет -> EJB-компонент)

как бы я это сделал? это код, который я нашел:

        InitialContext ctx = new InitialContext();
        StdScheduler scheduler = (StdScheduler) ctx.lookup("Quartz");

        JobDetail jd = new JobDetail("myjob", scheduler.DEFAULT_GROUP, NewJob.class);
        CronTrigger ct = new CronTrigger("cronTrigger", "group2", "0 0/5 * * * ?");
        scheduler.scheduleJob(jd, ct);

похоже, что этот код запускает только POJO ("NewJob.class"). и я хочу вызвать EJB-компонент без состояния.

у кого-нибудь есть ответы? пожалуйста .. в худшем случае я переключусь с Кварца на что-то другое.

спасибо, лучей.

1 Ответ

1 голос
/ 02 февраля 2011

Я не совсем понимаю ваш вопрос - или, скорее, я предполагаю, что здесь есть более одного вопроса, но я не совсем понимаю его язык, так как вы, кажется, используете слово «триггер» ( кварцевый термин) несколькими способами.

Во всяком случае, есть один из ваших вопросов, на который я могу ясно понять и ответить, а именно, как заставить кварц вызывать метод в вашем EJB. Просто напишите класс Job, содержащий код в своем методе execute (), который знает, как искать и вызывать этот EJB. Затем планировщик и экземпляр этого задания, и всякий раз, когда он запускается, он вызывает EJB. Кварц на самом деле поставляется с EJBInvokerJob, который делает именно это, так что вы можете использовать его без изменений или захотеть использовать его исходный код в качестве отправной точки. (Обратите внимание, что кварц Job поставляется с компонентами EJB v.2. Однако существует класс, доступный для вызова компонентов EJB3, который можно скачать здесь: http://jira.opensymphony.com/browse/QUARTZ-732)

Ваш другой вопрос о мане и сервлете, который вам нужно переформулировать, так как меня смущает, почему вы используете оба механизма.

...