Job Scheduler Framework
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ジョブスケジューラテンプレートの作成

Liferayセルフホスト Liferay PaaS

ジョブ スケジューラ タスクは、 DispatchTaskExecutor インターフェイスを実装することによって作成されます。 Liferay DXP では、独自の例として、すぐに使用できるエグゼキュータを複数提供しています。 作成してデプロイしたら、ジョブ スケジューラ タスクを Liferay インスタンスに追加できます。

次の手順に従って、DispatchTaskExecutorインターフェースの独自の実装を作成します。

  1. OSGi コンポーネント: @Component アノテーションを使用して、モジュールを OSGi フレームワーク内のコンポーネントとして宣言します。

  2. サービス:モジュールを@Componentアノテーション内のDispatchTaskExecutor.classサービスとして識別します。

  3. OSGi プロパティ: 次のプロパティを @Component アノテーションに追加します。

    • dispatch.task.executor.name: ジョブ スケジューラ UI で実行者の名前に使用される文字列を定義します。

      ジョブ スケジューラ タスクでローカライズされた名前を使用する場合は、モジュールの resources/content/Language.properties ファイルに、 dispatch.task.executor.name プロパティの言語キー値を追加します。

    • dispatch.task.executor.type: 適切なジョブ スケジューラ タスク エグゼキュータとジョブ スケジューラ トリガーに一致する一意の type 値を定義します。

      正しいエグゼキュータが一致するように、値は一意である必要があります。 値が一意でない場合、ログには起動時にエラーが表示され、同じプロパティ値を持つエグゼキュータが示されます。

  4. DispatchTaskExecutor: DispatchTaskExecutor インターフェイスを実装するか、その実装を拡張します (例: BaseDispatchTaskExecutor)。

    重要

    DispatchTaskExecutor インターフェースの実装では、フレームワークがタスクの同時実行を制御するためにこれらのログに依存しているため、ジョブ スケジューラ タスクのステータス ログを処理する必要があります。

    ユーザーの便宜を図るため、Liferay では、ジョブ スケジューラ タスクのステータスを IN PROGRESSSUCCESSFUL、または FAILEDとして記録する BaseDispatchTaskExecutor 抽象 クラス を提供しています。

  5. メソッド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 コンテナにデプロイします。

  1. サンプルモジュールをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-s7a3.zip -O
    
    unzip liferay-s7a3.zip
    
  2. 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)に生成されます。

  3. モジュールが正常にデプロイされ、コンテナコンソールを介して開始されたことを確認します。

    Processing com.acme.s7a3.impl-1.0.0.jar
    STARTED com.acme.s7a3.impl-1.0.0 [1656]
    
  4. モジュールが動作していることを確認するには、それを使用して Liferay インスタンスに新しいジョブ スケジューラ タスク を追加します。

    新しいテンプレートを使用して新しいジョブ スケジューラ タスクを追加します。

    タスクを作成したら、[Run Now]をクリックします。

    新しいジョブ スケジューラ タスクの [今すぐ実行] をクリックします。

    実行すると、次のメッセージがコンソールに出力されます。

    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.namedispatch.task.executor.typeの2つのプロパティを定義します。 その後、モジュールをDispatchTaskExecutor.classサービスとして識別します。

@Componentアノテーションに続いて、モジュールはBaseDispatchTaskExecutor抽象クラスを拡張し、doExecuteメソッドをオーバーライドします。 このメソッドは、LogFactoryUtilを使用して、コンソールのログに通知メッセージを表示します。