ジョブスケジューラテンプレートの作成
Liferayセルフホスト Liferay PaaS
ジョブ スケジューラ タスクは、 DispatchTaskExecutor インターフェイスを実装することによって作成されます。 Liferay DXP では、独自の例として、すぐに使用できるエグゼキュータを複数提供しています。 作成してデプロイしたら、ジョブ スケジューラ タスクを Liferay インスタンスに追加できます。
次の手順に従って、DispatchTaskExecutorインターフェースの独自の実装を作成します。
-
OSGi コンポーネント:
@Componentアノテーションを使用して、モジュールを OSGi フレームワーク内のコンポーネントとして宣言します。 -
サービス:モジュールを
@Componentアノテーション内のDispatchTaskExecutor.classサービスとして識別します。 -
OSGi プロパティ: 次のプロパティを
@Componentアノテーションに追加します。-
dispatch.task.executor.name: ジョブ スケジューラ UI で実行者の名前に使用される文字列を定義します。注ジョブ スケジューラ タスクでローカライズされた名前を使用する場合は、モジュールの
resources/content/Language.propertiesファイルに、dispatch.task.executor.nameプロパティの言語キー値を追加します。 -
dispatch.task.executor.type: 適切なジョブ スケジューラ タスク エグゼキュータとジョブ スケジューラ トリガーに一致する一意のtype値を定義します。注正しいエグゼキュータが一致するように、値は一意である必要があります。 値が一意でない場合、ログには起動時にエラーが表示され、同じプロパティ値を持つエグゼキュータが示されます。
-
-
DispatchTaskExecutor:DispatchTaskExecutorインターフェイスを実装するか、その実装を拡張します (例:BaseDispatchTaskExecutor)。重要DispatchTaskExecutorインターフェースの実装では、フレームワークがタスクの同時実行を制御するためにこれらのログに依存しているため、ジョブ スケジューラ タスクのステータス ログを処理する必要があります。ユーザーの便宜を図るため、Liferay では、ジョブ スケジューラ タスクのステータスを
IN PROGRESS、SUCCESSFUL、またはFAILEDとして記録するBaseDispatchTaskExecutor抽象 クラス を提供しています。 -
メソッド:
DispatchTaskExecutorインターフェースを直接実装している場合は、execute()メソッドをオーバーライドしてカスタムロジックを実装します。 代わりに、BaseDispatchTaskExecutor抽象クラスを拡張する場合は、そのdoExecute()メソッドをオーバーライドします。注getName()メソッドは非推奨となり、dispatch.task.executor.nameプロパティに置き換えられました。ヒントdispatchTrigger.getDispatchTaskSettings()メソッドを使用して、ジョブ スケジューラ タスクの設定エディターで設定されたプロパティを取得できます。
次のサンプル モジュールは、カスタム ジョブ スケジューラ タスク エグゼキュータを作成して Liferay インスタンスにデプロイする方法を示しています。
サンプルジョブスケジューラタスクエグゼキュータのデプロイ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、次の手順に従って、サンプルのジョブ スケジューラ タスク エグゼキュータをダウンロード、ビルドし、新しい Docker コンテナにデプロイします。
-
サンプルモジュールをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-s7a3.zip -Ounzip liferay-s7a3.zip -
gradlewコマンドを実行してJARファイルをビルドし、それを新しいDockerコンテナにデプロイします。cd liferay-s7a3./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)JARは、
build/libsフォルダ(つまり、s7a3-impl/build/libs/com.acme.s7a3.impl-1.0.0)に生成されます。 -
モジュールが正常にデプロイされ、コンテナコンソールを介して開始されたことを確認します。
Processing com.acme.s7a3.impl-1.0.0.jar STARTED com.acme.s7a3.impl-1.0.0 [1656] -
モジュールが動作していることを確認するには、それを使用して Liferay インスタンスに新しいジョブ スケジューラ タスク を追加します。

タスクを作成したら、[Run Now]をクリックします。
![新しいジョブ スケジューラ タスクの [今すぐ実行] をクリックします。](https://resources.learn.liferay.com/images/dxp/latest/en/development/traditional-java-based-development/core-frameworks/job-scheduler-framework/creating-job-scheduler-templates/images/02.png)
実行すると、次のメッセージがコンソールに出力されます。
INFO [liferay/dispatch/executor-2][S7A3DispatchTaskExecutor:30] Invoking #doExecute(DispatchTrigger, DispatchTaskExecutorOutput)タスクをクリックして ログ タブに移動し、以前の実行の一覧を表示することもできます。

サンプルジョブスケジューラタスクエグゼキュータのコード
@Component(
property = {
"dispatch.task.executor.name=s7a3", "dispatch.task.executor.type=s7a3"
},
service = DispatchTaskExecutor.class
)
public class S7A3DispatchTaskExecutor extends BaseDispatchTaskExecutor {
@Override
public void doExecute(
DispatchTrigger dispatchTrigger,
DispatchTaskExecutorOutput dispatchTaskExecutorOutput)
throws IOException, PortalException {
if (_log.isInfoEnabled()) {
_log.info(
"Invoking #doExecute(DispatchTrigger, " +
"DispatchTaskExecutorOutput)");
}
}
@Override
public String getName() {
return "s7a3";
}
private static final Log _log = LogFactoryUtil.getLog(
S7A3DispatchTaskExecutor.class);
}
モジュールはOSGi @Componentとして宣言され、dispatch.task.executor.nameとdispatch.task.executor.typeの2つのプロパティを定義します。 その後、モジュールをDispatchTaskExecutor.classサービスとして識別します。
@Componentアノテーションに続いて、モジュールはBaseDispatchTaskExecutor抽象クラスを拡張し、doExecuteメソッドをオーバーライドします。 このメソッドは、LogFactoryUtilを使用して、コンソールのログに通知メッセージを表示します。