liferay
liferayにクォーツスケジューラを作成する
サーチ…
備考
スケジューラは、一定の定義された間隔でバックグラウンドタスクを実行するように機能する。
<! - scheduler-entry要素には、スケジューラの宣言的なデータが含まれています。 - >
!ELEMENTスケジューラエントリ(スケジューラ記述?、スケジューライベントリスナクラス、トリガ)
<! - スケジューラ記述値は、スケジューラを記述する。 - >
!ELEMENTスケジューラ記述(#PCDATA)
<! - scheduler-event-listener-classの値は、com.liferay.portal.kernel.messaging.MessageListenerを実装するクラスでなければなりません。このクラスは、トリガー要素によって指定された規則的な間隔でメッセージを受信します。 - >
!ELEMENTスケジューラー・イベント・リスナー・クラス(#PCDATA)
<! - trigger要素には、scheduler-event-listener-classで指定されたクラスをトリガするタイミングを示すコンフィグレーションデータが含まれています。 - >
!ELEMENTトリガー(cron |シンプル)
いくつかの情報を表示する石英スケジューラを作成する
スケジューラを作成するには、
liferay-portlet.xml
スケジューラトリガのタイミングのスケジューラクラスとトリガ値を証明する
<portlet-name>GetSetGo</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-description>This scheduler logs User count from portal</scheduler-description>
<scheduler-event-listener-class>com.example.scheduler.SchedulerSample</scheduler-event-listener-class>
<trigger>
<simple>
<simple-trigger-value>
5
</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
</trigger>
</scheduler-entry>
与えられたエントリは、
スケジューラの説明
MessageListenerクラスを実装するクラス名
トリガー:スケジューラーのトリガーポイントを定義するための間隔を提供します。
- クロムの使用
- シンプルなトリガー値を使用する
この例では、5分ごとにスケジューラが起動します。
次はスケジューラクラスを作成する必要があります
package com.example.scheduler;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
import com.liferay.portal.service.UserLocalServiceUtil;
public class SchedulerSample implements MessageListener {
@Override
public void receive(Message arg0) throws MessageListenerException {
Log log=LogFactoryUtil.getLog(SchedulerSample.class);
try {
log.info("User Count for portal:"+UserLocalServiceUtil.getUsersCount());
} catch (SystemException e) {
log.info("User count is currently unavailable");
}
}
}
このスケジューラーは、サーバー・コンソールに対して、トリガー間隔ごとに出力ポータル・ユーザー数を単純に表示します。
プログラムで動的石英スケジューラを作成する
スケジューラを起動するときのユーザ入力に基づいて、Quartzスケジューラを作成する必要のある特定のシナリオがあります。ただし、事前に定義された特定の機能があります。ユーザーの行動を特定の期間で示します。
この例ではscheduler.Hereトリガするために、トリガタイミングにユーザ入力を受け取るScheduledJobListenerクラスimlements MessageListener使用してスケジュールされscheduler.Theジョブトリガー上で実行されるビジネスロジックを含む、 SchedulerEngineHelperUtil必要のparamsを設定した後、ジョブをトリガするクラス:
- トリガー(cronテキスト文字列とジョブ名を使用)
- Message(MessageListenerクラスとportletIdの実装を使用)
- スケジューラのストレージタイプ(デフォルトではMEMORY_CLUSTERED、DBに格納するにはPERSISTEDとして設定できます)
- 使用するメッセージバスの宛先を決定するDestinationNames(LiferayではSCHEDULER_DISPATCH)
以下のスニペットは、ユーザーと対話するポートレットのアクション・フェーズの一部であり、クォーツ・ジョブを作成およびスケジュールします。
//Dynamic scheduling
String portletId= (String)req.getAttribute(WebKeys.PORTLET_ID);
String jobName= ScheduledJobListener.class.getName();
Calendar startCalendar = new GregorianCalendar(year , month, day, hh, mm, ss);
String jobCronPattern = SchedulerEngineHelperUtil.getCronText(startCalendar, false);
//Calendar object & flag for time zone sensitive calendar
Trigger trigger=new CronTrigger(ScheduledJobListener.class.getName(),ScheduledJobListener.class.getName(), jobCronPattern);
Message message=new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME,jobName);
message.put(SchedulerEngine.PORTLET_ID, portletId);
try {
SchedulerEngineHelperUtil.schedule(
trigger,StorageType.PERSISTED,"Message_Desc",DestinationNames.SCHEDULER_DISPATCH,
message,0);
} catch (SchedulerException e)
{
e.printStackTrace();
}
ここでは、cronテキストを作成するために、ユーザー入力からparamsを取得します。cronテキストの場合、cronパターンを作成するために、指定された参照を使用することもできます
1. Seconds
2. Minutes
3. Hours
4. Day-of-Month
5. Month
6. Day-of-Week
7. Year (optional field)
**Expression** **Meaning**
0 0 12 * * ? Fire at 12pm (noon) every day
0 15 10 ? * * Fire at 10:15am every day
0 15 10 * * ? Fire at 10:15am every day
0 15 10 * * ? * Fire at 10:15am every day
0 15 10 * * ? 2005 Fire at 10:15am every day during the year 2005
0 * 14 * * ? Fire every minute starting at 2pm and ending at 2:59pm, every day
0 0/5 14 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
0 0/5 14,18 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
0 0-5 14 * * ? Fire every minute starting at 2pm and ending at 2:05pm, every day
0 10,44 14 ? 3 WED Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRI Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
0 15 10 15 * ? Fire at 10:15am on the 15th day of every month
0 15 10 L * ? Fire at 10:15am on the last day of every month
0 15 10 L-2 * ? Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005 Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3 Fire at 10:15am on the third Friday of every month
0 0 12 1/5 * ? Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ? Fire every November 11th at 11:11am.
ユーザー入力に基づいて使用されるcrontext文字列を直接作成する
String jobCronPattern="0 */5 * * * ?";
ここでは、5分ごとに起動します。
参考文献: