16.4. リソースアダプターの設定

16.4.1. リソースアダプターのデプロイ

リソースアダプターは管理 CLI または管理コンソールを使用して他のデプロイメントと同様にデプロイできます。また、スタンドアロンサーバー実行時にアーカイブをデプロイメントディレクトリーにコピーして、デプロイメントスキャナーによって検出されるようにすることもできます。

管理 CLI を使用したリソースアダプターのデプロイ

リソースアダプターをスタンドアロンサーバーへデプロイするには、以下の管理 CLI コマンドを実行します。

deploy /path/to/resource-adapter.rar

リソースアダプターを管理対象ドメインのすべてのサーバーグループにデプロイするには、以下の管理 CLI コマンド を入力します。

deploy /path/to/resource-adapter.rar --all-server-groups
管理コンソールを使用したリソースアダプターのデプロイ
  1. 管理コンソールにログインし、Deployments タブをクリックします。
  2. 追加 (+) ボタンをクリックします。管理対象ドメインでは最初に Content Repository を選択する必要があります。
  3. デプロイメントのアップロード オプションを選択します。
  4. リソースアダプターアーカイブを閲覧し、次へ をクリックします。
  5. アップロードを確認してから 完了をクリックします。
  6. 管理対象ドメインでは、デプロイメントを該当するサーバーグループにデプロイし、デプロイメントを有効にします。
デプロイメントスキャナーを使用したリソースアダプターのデプロイ

リソースアダプターを手作業でスタンドアロンサーバーにデプロイするには、リソースアダプターアーカイブをサーバーデプロイメントディレクトリー (例: EAP_HOME/standalone/deployments/) にコピーします。これにより、デプロイメントスキャナーによって検出され、デプロイされます。

注記

このオプションは管理対象ドメインでは使用できません。管理コンソールまたは管理 CLI を使用してリソースアダプターをサーバーグループにデプロイする必要があります。

16.4.2. リソースアダプターの設定

管理インターフェイスを使用してリソースアダプターを設定できます。以下の例は、管理 CLI を使用してリソースアダプターを設定する方法を示しています。サポートされるプロパティーやその他の重要な情報は、リソースアダプターベンダーのマニュアルを参照してください。

リソースアダプター設定の追加

リソースアダプター設定を追加します。

/subsystem=resource-adapters/resource-adapter=eis.rar:add(archive=eis.rar, transaction-support=XATransaction)
リソースアダプターの設定

必要に応じて以下を設定します。

  • config-properties を設定します。

    server 設定プロパティーを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=server:add(value=localhost)

    port 設定プロパティーを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=port:add(value=9000)
  • admin-objects を設定します。

    管理オブジェクトを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName:add(class-name=com.acme.eis.ra.EISAdminObjectImpl, jndi-name=java:/eis/AcmeAdminObject)

    管理オブジェクト設定プロパティーを設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName/config-properties=threshold:add(value=10)
  • connection-definitions を設定します。

    管理接続ファクトリーの接続定義を追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:add(class-name=com.acme.eis.ra.EISManagedConnectionFactory, jndi-name=java:/eis/AcmeConnectionFactory)

    管理接続ファクトリーの設定プロパティーを設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName/config-properties=name:add(value=Acme Inc)

    エンリストメントトレースを記録するかどうかを設定します。エンリストメントトレースの記録を有効にするには、enlistment-trace 属性を true に設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:write-attribute(name=enlistment-trace,value=true)
    警告

    エンリストメントトレースを有効にすると、トランザクションエンリストメント中のエラーを容易に追跡できますが、パフォーマンスに影響します。

リソースアダプターの利用可能なすべてのオプションについては、リソースアダプターの属性 を参照してください。

リソースアダプターのアクティベート

リソースアダプターをアクティベートします。

/subsystem=resource-adapters/resource-adapter=eis.rar:activate
注記

リソースアダプターのキャパシティーポリシーを定義することも可能です。詳細は キャパシティーポリシー の項を参照してください。

16.4.3. Elytron サブシステムを使用するようリソースアダプターを設定

IronJacamar では、サーバーとリソースアダプターの間で 2 種類の通信が発生します。

その通信の 1 つは、サーバーがリソースアダプター接続を開いた場合に発生します。仕様によって定義されたとおり、コンテナー管理のサインオンでセキュアにすることができます。これには、接続を開いたときにプリンシパルと認証情報で JAAS サブジェクトをリソースアダプターへ伝搬する必要があります。このサインオンは、Elytron に託せます。

IronJacamar はセキュリティーインフローをサポートします。このメカニズムは、ワークをワークマネージャーに提出するときや、同じ JBoss EAP インスタンスにあるエンドポイントにメッセージを配信するときに、リソースアダプターがセキュリティー情報を確立できるようにします。

コンテナー管理のサインオン

Elytron でコンテナー管理のサインオンを実現するには、elytron-enabled 属性を true に設定する必要があります。これにより、リソースアダプターへのすべての接続が Elytron によってセキュア化されます。

/subsystem=resource-adapters/resource-adapter=RAR_NAME/connection-definitions=FACTORY_NAME:write-attribute(name=elytron-enabled,value=true)

resource-adapters サブシステムの elytron-enabled 属性を true に設定すると、管理 CLI を使用して elytron-enabled 属性を設定できます。デフォルトではこの属性は false に設定されています。

authentication-context 属性は、サインオンの実行に使用される Elytron 認証コンテキストの名前を定義します。

Elytron の authentication-context 属性には 1 つ以上の authentication-configuration 要素を含めることができ、使用を希望する認証情報が含まれます。

authentication-context 属性が設定されていない場合、JBoss EAP は現在の authentication-context を使用します。 これは、接続を開く呼び出し元コードによって使用される authentication-context です。

例: authentication-configuration の作成

/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})

例: 上記設定を使用した authentication-context の作成

/subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])

セキュリティーインフロー

また、ワークマネージャーによって実行される予定のワークを提出するときに、リソースマネージャーはセキュリティー認証情報を流入 (インフロー) することもできます。セキュリティーインフローは、実行前にワークがワーク自体を認証できるようにします。認証に成功すると、提出されたワークは結果となる認証コンテキスト下で実行されます。認証に失敗すると、ワークの実行は拒否されます。

Elytron セキュリティーインフローを有効にするには、リソースアダプターのワークマネージャーを設定するときに wm-elytron-security-domain 属性を設定します。Elytron は指定のドメインを元に認証を実行します。

注記

リソースアダプターのワークマネージャーが Elytron セキュリティードメイン wm-elytron-security-domain を使用するよう設定された場合、参照されたワークマネージャーの elytron-enabled 属性を true に設定する必要があります。

/subsystem=jca/workmanager=customWM:add(name=customWM, elytron-enabled=true)
注記

wm-elytron-security-domain の代わりに wm-security-domain 属性が使用された場合、セキュリティーインフローはレガシーの security サブシステムによって実行されます。

以下の jca サブシステムの設定例では、ra-with-elytron-security-domain というリソースアダプターの設定を確認できます。このリソースアダプターは、Elytron セキュリティードメインの wm-realm を使用するようワークマネージャーセキュリティーを設定します。

<subsystem xmlns="urn:jboss:domain:jca:5.0">
    <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
    <bean-validation enabled="true"/>
    <default-workmanager>
        <short-running-threads>
            <core-threads count="50"/>
            <queue-length count="50"/>
            <max-threads count="50"/>
            <keepalive-time time="10" unit="seconds"/>
        </short-running-threads>
        <long-running-threads>
            <core-threads count="50"/>
            <queue-length count="50"/>
            <max-threads count="50"/>
            <keepalive-time time="10" unit="seconds"/>
        </long-running-threads>
    </default-workmanager>
    <workmanager name="customWM">
        <elytron-enabled>true</elytron-enabled>
        <short-running-threads>
            <core-threads count="20"/>
            <queue-length count="20"/>
            <max-threads count="20"/>
        </short-running-threads>
    </workmanager>
    <bootstrap-contexts>
        <bootstrap-context name="customContext" workmanager="customWM"/>
    </bootstrap-contexts>
    <cached-connection-manager/>
</subsystem>

その後、ワークマネージャーは resource-adapter サブシステムからブートストラップコンテキストを使用して参照されます。

<subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
    <resource-adapters>
        <resource-adapter id="ra-with-elytron-security-domain">
            <archive>
                ra-with-elytron-security-domain.rar
            </archive>
            <bootstrap-context>customContext</bootstrap-context>
            <transaction-support>NoTransaction</transaction-support>
            <workmanager>
                <security>
                    <elytron-security-domain>wm-realm</elytron-security-domain>
                    <default-principal>wm-default-principal</default-principal>
                    <default-groups>
                        <group>
                            wm-default-group
                        </group>
                    </default-groups>
                </security>
            </workmanager>
        </resource-adapter>
    </resource-adapters>
</subsystem>

例: セキュリティードメインの設定

/subsystem=elytron/properties-realm=wm-properties-realm:add(users-properties={path=/security-dir/users.properties, plain-text=true}, groups-properties={path=/security-dir/groups.properties})

/subsystem=elytron/simple-role-decoder=wm-role-decoder:add(attribute=groups)

/subsystem=elytron/constant-permission-mapper=wm-permission-mapper:add(permissions=[{class-name="org.wildfly.security.auth.permission.LoginPermission"}])

/subsystem=elytron/security-domain=wm-realm:add(default-realm=wm-properties-realm, permission-mapper=wm-permission-mapper, realms=[{role-decoder=wm-role-decoder, realm=wm-properties-realm}])

Work クラスは、指定のドメイン下で Elytron の認証の認証情報を提供するロールがあります。これには javax.resource.spi.work.WorkContextProvider を実装する必要があります。

public interface WorkContextProvider {
   /**
    * Gets an instance of <code>WorkContexts</code> that needs to be used
    * by the <code>WorkManager</code> to set up the execution context while
    * executing a <code>Work</code> instance.
    *
    * @return an <code>List</code> of <code>WorkContext</code> instances.
    */
   List<WorkContext> getWorkContexts();
}

このインターフェイスは、Work クラスが WorkContext を使用して、ワークが実行されるコンテキストの一部の機能を設定できるようにします。その機能の 1 つがセキュリティーインフローです。これについては、List<WorkContext> getWorkContexts メソッドは javax.resource.spi.work.SecurityContext を提供する必要があります。このコンテキストは、JSR-196 仕様 で定義されている通りに javax.security.auth.callback.Callback オブジェクトを使用して認証情報を提供します。コンテナーのサービスプロバイダーインターフェイスの認証の Jakarta は Jakarta Authentication です。

例: コンテキストを使用したコールバックの作成

public class ExampleWork implements Work, WorkContextProvider {

    private final String username;
    private final String role;

    public MyWork(TestBean bean, String username, String role) {
        this.principals = null;
        this.roles = null;
        this.bean = bean;
        this.username = username;
        this.role = role;
    }

    public List<WorkContext> getWorkContexts() {
        List<WorkContext> l = new ArrayList<>(1);
        l.add(new MySecurityContext(username, role));
        return l;
    }

    public void run() {
        ...
    }

    public void release() {
        ...
    }

    public class ExampleSecurityContext extends SecurityContext {

        public void setupSecurityContext(CallbackHandler handler, Subject executionSubject, Subject serviceSubject) {
            try {
                List<javax.security.auth.callback.Callback> cbs = new ArrayList<>();
                cbs.add(new CallerPrincipalCallback(executionSubject, new SimplePrincipal(username)));
                cbs.add(new GroupPrincipalCallback(executionSubject, new String[]{role}));
                handler.handle(cbs.toArray(new javax.security.auth.callback.Callback[cbs.size()]));
            } catch (Throwable t) {
                throw new RuntimeException(t);
            }
        }
    }

上記の例では、ExampleWorkWorkContextProvider インターフェイスを実装し、ExampleSecurityContext を提供します。そのコンテキストは、ワークの実行時に Elytron によって認証されるセキュリティー情報の提供に必要なコールバックを作成します。

16.4.4. IBM MQ リソースアダプターのデプロイおよび設定

JBoss EAP の Configuring Messaging には、IBM MQ リソースアダプターのデプロイメント の手順が記載されています。

16.4.5. 汎用 JMS リソースアダプターのデプロイおよび設定

JBoss EAP の Configuring Messaging には、汎用 JMS リソースアダプターの設定 の手順が記載されています。