第37章 リモートタスクの実行
37.1. リモートタスクの実行
タスクまたはビジネスロジックを直接 JBoss Data Grid サーバーで実行すると、このロジックをデータの近くで実行でき、クラスターのノードすべてのリソースを使用します。これらのタスクは、サーバーインスタンスにデプロイされる Java 実行可能ファイルでバンドルでき、デプロイされるとタスクはプログラムから実行されます。
37.2. リモートタスクの作成
リモート実行のタスクを作成するには、org.infinispan.tasks.ServerTask
を実装するクラスが含まれる .jar ファイルを作成する必要があります。このインターフェースには、実装する必要のある以下のメソッドが含まれます。
-
void setTaskContext(TaskContext taskContext)
: タスクコンテキストを設定します。必要なキャッシュや他のリソースへアクセスするために使用する必要があります。 -
String getName()
: タスクに一意名を提供します。この名前は、TaskManager
による実行に使用されます。
上記の他にも以下を実装することができますが、これらは実行には必要ありません。
-
TaskExecutionMethod getExecutionMode()
: タスクが 1 つのノード (TaskExecutionMode.ONE_NODE
) またはすべてのノード (TaskExecutionMode.ALL_NODES
) で実行されるかを決定します。デフォルトでは、1 つのノードでの実行が有効になっています。 -
Optional<String> getAllowedRole()
: このタスクを実行できるロールを設定します。デフォルトでは指定のロールはないため、実行に必要な追加のロールはありません。タスクの実行に関する詳細情報は リモートタスクの実行 を参照してください。 -
Set<String> getParameters()
- タスクと使用する名前付きパラメーターのコレクション。
37.3. リモートタスクのインストール
リモートタスクが作成され、jar にバンドルされたら、以下のいずれかの方法でサーバーにデプロイできます。
オプション 1: デプロイメントディレクトリーの使用
以下の例のように、デプロイメントを JBoss Data Grid サーバーの deployments/ ディレクトリーにコピーします。
$] cp /path/to/sample_task.jar $JDG_HOME/standalone/deployments/
オプション 2: CLI の使用
以下のコマンドを実行して JDG サーバーに接続します。
[$JDG_HOME] $ bin/cli.sh --connect --controller=$IP:$PORT
以下のコマンドを実行して .jar ファイルをデプロイします。
deploy /path/to/sample_task.jar
JBoss Data Grid がドメインモードで使用される場合、--all-server-groups
または --server-groups
パラメーターを使用してサーバーグループを指定する必要があります。
37.4. リモートタスクの削除
JBoss Data Grid の CLI を使用するとリモートタスクを実行中のインスタンスから削除することができます。以下の手順にしたがってリモートタスクを削除します。
以下のコマンドを実行して JDG サーバーに接続します。
[$JDG_HOME] $ bin/cli.sh --connect --controller=$IP:$PORT
以下のように
undeploy
コマンドを使用して .jar ファイルを削除します。undeploy /path/to/sample_task.jar
注記JBoss Data Grid がドメインモードで使用される場合、
--all-relevant-server-groups
または--server-groups
パラメーターを使用してサーバーグループを指定する必要があります。
37.5. リモートタスクの実行
サーバー側で承認が無効になっている場合、リモートタスクがインストールされると誰でも実行することができます。その他の場合では、EXEC
パーミッションを持つユーザーのみがインストール済みのタスクを実行することができます。getAllowedRole
メソッド経由で、リモートタスクに追加のユーザーが指定されている場合、ユーザーがスクリプトを実行するにはこのロールに属する必要があります。
デプロイ済みのタスクを実行するには、希望のキャッシュで execute(String taskName, Map parameters)
を呼び出します。以下の例は、sampleTask
という名前のタスクを実行します。
import org.infinispan.client.hotrod.*; import java.util.*; [...] String TASK_NAME = "sampleTask"; RemoteCacheManager rcm = new RemoteCacheManager(); RemoteCache remoteCache = rcm.getCache(); // Assume the task takes a single parameter, and will return a result Map<String, String> params = new HashMap<>(); params.put("name", "value"); String result = (String) remoteCache.execute(TASK_NAME, params);