ジョブスケジューラ タスクエクゼキュータの新規作成
各ジョブスケジューラタスクは、 DispatchTaskExecutor
インターフェースを実装することで作成され、任意のロジックを実行することができます。 Liferay DXPは、すぐに使える複数のエグゼキュータを提供しますが、独自のエグゼキュータを作成することもできます。 一度作成し、デプロイすると、ジョブスケジューラタスクをLiferayインスタンスに追加することができます。
次の手順に従って、DispatchTaskExecutor
インターフェースの独自の実装を作成します。
OSGIコンポーネント :
@Component
アノテーションを使用して、OSGiフレームワーク内でモジュールをコンポーネントとして宣言します。サービス :モジュールを
@Component
アノテーション内のDispatchTaskExecutor.class
サービスとして識別します。OSGiプロパティ :次のプロパティを
@Component
アノテーションに追加します。dispatch.task.executor.name
: ジョブスケジューラUIで実行者名に使用される文字列を定義します。noteもし、ジョブスケジューラータスクにローカライズされた名前を使いたい場合は、モジュールの
resources/content/Language.properties
ファイルにdispatch.task.executor.name
属性の言語キー値を追加してください。dispatch.task.executor.type
: 正しいジョブスケジューラタスク実行者とジョブスケジューラトリガーに一致するように、一意のtype
値を定義します。note正しいエグゼキュータが一致するように、値は一意である必要があります。 値が一意でない場合、ログには起動時にエラーが表示され、同じプロパティ値を持つエグゼキュータが示されます。
DispatchTaskExecutor
:DispatchTaskExecutor
インターフェースを実装するか、その実装を拡張します(BaseDispatchTaskExecutor
など)。importantDispatchTaskExecutor` インターフェースの実装は、Job Scheduler タスクのステータスログを処理しなければなりません。なぜなら、フレームワークはタスクの同時実行を制御するために、これらのログに依存するからです。
便宜上、Liferay は
BaseDispatchTaskExecutor
抽象 class を提供しており、ジョブスケジューラタスクの状態をIN PROGRESS
,SUCCESSFUL
, またはFAILED
としてログに記録します。メソッド :
DispatchTaskExecutor
インターフェースを直接実装している場合は、execute()
メソッドをオーバーライドしてカスタムロジックを実装します。 代わりに、BaseDispatchTaskExecutor
抽象クラスを拡張する場合は、そのdoExecute()
メソッドをオーバーライドします。notegetName()
メソッドは廃止予定となり、dispatch.task.executor.name
プロパティに置き換えられました。tipジョブスケジューラタスクのSettingsエディタに設定されているプロパティを取得するには、
dispatchTrigger.getDispatchTaskSettings()
メソッドを使用します。
次のサンプルモジュールは、カスタムジョブスケジューラータスクエクゼキュータを作成し、Liferayインスタンスにデプロイする方法を示しています。
サンプルジョブスケジューラ タスクエクゼキュータの配備
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、以下の手順でサンプルの Job Scheduler Task Executor をダウンロードし、ビルドして、新しい Docker コンテナにデプロイします。
サンプルモジュールをダウンロードして解凍します。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/job-scheduler-framework/liferay-s7a3.zip -O
unzip 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 インスタンスに新しい Job Scheduler Task を追加し、モジュールが動作していることを確認します。
タスクを作成したら、 [Run Now] をクリックします。
成功すると、実行時に次のメッセージがコンソールに出力されます。
INFO [liferay/dispatch/executor-2][S7A3DispatchTaskExecutor:30] Invoking #doExecute(DispatchTrigger, DispatchTaskExecutorOutput)
また、タスクをクリックし、 Logs タブを開くと、過去に実行されたすべてのリストが表示されます。
サンプルジョブスケジューラ タスクエクゼキュータのコード
@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
を使用して、コンソールのログに通知メッセージを表示します。