Fórum

Quartz Scheduler

Hidekazu Yamaji, modificado 11 Anos atrás.

Quartz Scheduler

New Member Postagens: 2 Data de Entrada: 16/05/12 Postagens Recentes
週次で自動でemailを送信するポートレットを作成しています。
liferay-portlet.xmlに
<scheduler-entry>
  <scheduler-event-listener-class>com.lms.slayer.util.AutoEmailSender</scheduler-event-listener-class>
    <trigger>
<cron>
<cron-trigger-value>0 55 01 ? * FRI</cron-trigger-value>
      </cron>
</trigger>
</scheduler-entry>
ユーザーが送信する日時を変更できるようにするためcron-trigger-valueの値をポートレットのconfigrationから編集するようにしましたが、これだとliferay-portlet.xmlを変更するたびにオートデプロイしていまいます。
そこで
Trigger trigger = new CronTrigger(jobName, groupName, schedulerStartDate, schedulerEndDate, cronText);
SchedulerEngineUtil.schedule(trigger, StorageType.MEMORY, null, DestinationNames.SCHEDULER_DISPATCH, "actual_required_message", 10);
SchedulerEngineUtil.start();
のようにしてliferay-portlet.xmlを使わずに自動起動させたいと思っておりますがうまく動きません。
同じような要件で解決策をご存知の方がいらっしゃいましたらご教授願います。
thumbnail
Daniel Kiyotomo Ozeki, modificado 11 Anos atrás.

RE: Quartz Scheduler

New Member Postagens: 15 Data de Entrada: 02/03/12 Postagens Recentes
ヤマギさん、

コードにSchedulerEventのオブジェクトを追加することで動くはずです。

TriggerとSchedulerEngineUtil.Scheduleのコードラインがありますがこの二つの間にSchedulerEventのオブジェクトを入れてください。SchedulerEventにTrigger を入れ、さらにSchedulerEngineUtil.scheduleの「trigger」を消しその変わりにSchedulerEventを入れてください。

下記にコードをコピーし入れる場所をハイライトしました。(注意:大文字にされているものは実際に入れる文字ではありません。ただどこに何を入力するかを示しております。)

Trigger trigger = new CronTrigger(jobName, groupName, schedulerStartDate, schedulerEndDate, cronText);
ここにSchedulerEventのオブジェクトを追加する ( そしてここに上記のTriggerを入力する )
SchedulerEngineUtil.schedule(ここにSchedulerEventを入力する,StorageType.MEMORY, null, DestinationNames.SCHEDULER_DISPATCH, "actual_required_message", 10);
SchedulerEngineUtil.start();

いかがでしょうか?
thumbnail
Hitoshi Ozawa, modificado 11 Anos atrás.

RE: Quartz Scheduler

Liferay Legend Postagens: 7942 Data de Entrada: 24/03/10 Postagens Recentes
小沢です。

「。。。うまく動きません。」では曖昧過ぎて意味が不明です。ジョブが実行されないのでしょうか?実行中にエラーになるのでしょうか?
それともコンパイル中にエラーになるのでしょうか?

分からないことがあった場合はLiferayのソースコードを参照するのが一番早いと思います。

SchedulerEngineUtilは掲示板で使われています:

\portal-impl\src\com\liferay\portlet\messageboards\service\impl\MBMailingListLocalServiceImpl.java

行#197: protected void scheduleMailingList(MBMailingList mailingList)

String groupName = getSchedulerGroupName(mailingList);

Calendar startDate = CalendarFactoryUtil.getCalendar();

CronText cronText = new CronText(
startDate, CronText.MINUTELY_FREQUENCY,
mailingList.getInReadInterval());

Trigger trigger = new CronTrigger(
groupName, groupName, startDate.getTime(), null,
cronText.toString());

MailingListRequest mailingListRequest = new MailingListRequest();

mailingListRequest.setCompanyId(mailingList.getCompanyId());
mailingListRequest.setUserId(mailingList.getUserId());
mailingListRequest.setGroupId(mailingList.getGroupId());
mailingListRequest.setCategoryId(mailingList.getCategoryId());
mailingListRequest.setInProtocol(mailingList.getInProtocol());
mailingListRequest.setInServerName(mailingList.getInServerName());
mailingListRequest.setInServerPort(mailingList.getInServerPort());
mailingListRequest.setInUseSSL(mailingList.getInUseSSL());
mailingListRequest.setInUserName(mailingList.getInUserName());
mailingListRequest.setInPassword(mailingList.getInPassword());
mailingListRequest.setAllowAnonymous(mailingList.getAllowAnonymous());

SchedulerEngineUtil.schedule(
trigger, StorageType.MEMORY_CLUSTERED, null,
DestinationNames.MESSAGE_BOARDS_MAILING_LIST, mailingListRequest,
0);
thumbnail
Hitoshi Ozawa, modificado 11 Anos atrás.

RE: Quartz Scheduler

Liferay Legend Postagens: 7942 Data de Entrada: 24/03/10 Postagens Recentes
山地様、

動きましたでしょうか?

SchedulerEngineUtil.schedule(ここにSchedulerEventを入力する,StorageType.MEMORY, null, DestinationNames.SCHEDULER_DISPATCH, "actual_required_message", 10);

JavaDoc
http://docs.liferay.com/portal/6.1/javadocs-all/com/liferay/portal/kernel/scheduler/SchedulerEngineUtil.html

SchedulerEntryを利用する場合は以下のメソッドを利用します:
static void schedule(SchedulerEntry schedulerEntry, StorageType storageType, String portletId, int exceptionsMaxSize)

ただし、今回は実行日時を動的に指定していた言うことなので、山地様も使われていた以下のメソッドを使います:
schedule(Trigger trigger, StorageType storageType, String description, String destinationName, Message message, int exceptionsMaxSize)
Hidekazu Yamaji, modificado 11 Anos atrás.

RE: Quartz Scheduler

New Member Postagens: 2 Data de Entrada: 16/05/12 Postagens Recentes
大関様、小沢様

ご回答を頂きありがとうございました。
下記のようにコードを修正して自動起動できました。

Trigger trigger = new CronTrigger(jobName, groupName, schedulerStartDate, schedulerEndDate, cronText);
SchedulerEntry entry = new SchedulerEntryImpl();
entry.setEventListenerClass("com.lms.slayer.util.AutoModerationRequest");
entry.setTriggerValue(cronText);
entry.setTriggerType(TriggerType.CRON);
SchedulerEngineUtil.schedule(entry, StorageType.MEMORY, this.getClass().getClassLoader(), 0);