前へ     目次     索引     DocHome     次へ     
iPlanet Trustbase Transaction Manager 2.2.1 開発者ガイド



第 9 章   Ping の例


この章では、Identrus メッセージングの仕様で定義されている Ping DTD を使用して、前の章で説明した開発サイクルについて手順を追って説明します。サービスを配置する場合には、まず次の手順に従って、サービスを開発します。

  1. システム内に送り出すメッセージの構文構造を指定する DTD 定義を作成します。

  2. Classgen com.iplanet.trustbase.app.classgen.ClassGen を使って、DTD 定義から java クラスを生成します。

  3. Identrus API を使って、サービスの Java コードを書きます。Identrus API は、メッセージ、証明書、鍵、およびデジタル署名の Identrus による処理および確認を支援するためのものです。

  4. JDK の JAR ツールを使って、最終的な iPlanet Trustbase Transaction Manager サービスの jar ファイルを構築します。

  5. 後述の手順に従って、関連する構成オプションを選択して iPlanet Trustbase Transaction Manager 内にサービスを配置します。

  6. iPlanet Trustbase Transaction Manager にサービスを配置したら、サービスを実行することができます。


DTD 定義の作成

  • この例では、Identrus メッセージジングの仕様で定義されている「Ping DTD」を使用します。このため、ping.dtd にある DTD 定義を作成します。ping.dtd の構造と定義については、IT-TCMPD (Identrus TC Messaging Specification) を参照してください。

    <!--PUBLIC ID for this DTD is: "-//IDENTRUS//PING DTD//EN"-->

    <!ENTITY % CoreNetwork.dtd PUBLIC "-//IDENTRUS//CORE NETWORK INFRASTRUCTURE DTD//EN" "corenetworkinfrastructure.dtd">
    %CoreNetwork.dtd;

    <!ELEMENT PingRequest (NIB, Signature, CertBundle, PingData)>
    <!ATTLIST PingRequest
    id ID #REQUIRED
    >
    <!ELEMENT PingResponse (NIB, Signature, CertBundle, PingData)>
    <!ATTLIST PingResponse
    id ID #REQUIRED
    >
    <!ELEMENT PingError (NIB, Signature, CertBundle, ErrorInfo)>
    <!ATTLIST PingError
    id ID #REQUIRED
    >
    <!ELEMENT PingData (#PCDATA)>
    <!ATTLIST PingData
    id ID #REQUIRED
    >

    <!ELEMENT ErrorInfo (VendorData*)>
    <!ATTLIST ErrorInfo
    id ID #REQUIRED
    errorCode NMTOKEN #REQUIRED
    >
    <!ELEMENT VendorData (#PCDATA)>
    <!ATTLIST VendorData
    id ID #REQUIRED
    dataType CDATA #REQUIRED
    >

  • これらは、次に示す iPlanet Trustbase Transaction Manager に付属の dtd ファイルにリンクされます。

    XMLDSIG.dtd
    corenetworkinfrastucture.dtd
    Foundation.dtd



    すべての dtd ファイルは <インストールディレクトリ>/
    Trustbase/TTM/current/apidocs にあります。



次の手順に従って、ClassGen ツールの実行の準備をします。

  • ディレクトリを ../Trustbase/TTM/Scripts に変更します。

  • クラスパスを、ClassGen ツールを実行できるように設定します。このためには、標準のシェルで setcp スクリプト (../setcp) をソースします。

  • ping という名前の新規のサブディレクトリを作成し、このディレクトリに移動します。

  • この新規ディレクトリに、ping.dtd と、3 つのコア Identrus DTD をコピーします。DTD ファイルの名前が適切であることを確認します。ファイル名では大文字と小文字が区別され、DTD ファイル内で完全に同じ名前が使用されていることが必要です。<!ENTITY ....> タグの最後の属性では、DTD に含まれるローカルファイルの名前が定義されます。

  • ClassGen ツールにどのオプションを渡すかを決定します。表 9-1 に、この例で使用する各オプションを示します。

表 9-1    Classgen オプション



Ping DTD の ClassGen オプション

-d .  

現在のディレクトリにファイルを作成  

-o ping.jar  

ping.jar という名前の最終 jar ファイルを作成  

-r  

すべてのサブ DTD に対し、クラスパスに存在しないすべてのクラスの生成を繰り返す  

-root PingRequest  

DTD 内の PingRequest 要素は、XML ドキュメントの適切なルート要素  

-root PingResponse  

DTD 内の PingResponse 要素は、XML ドキュメントの適切なルート要素  

-root PingError  

DTD 内の PingError 要素は、XML ドキュメントの適切なルート要素  

-stub com.iplanet.trustbase.sample.PingService  

スタブ Identrus サービスのソースコードを、出力ディレクトリに作成。ファイルを com.iplanet.trustbase.sample にパッケージ  

"-//IDENTRUS//PING DTD//EN"  

Ping DTD のパブリック ID  

Ping.dtd  

クラス生成を開始する DTD  

これにより、次のコマンドが生成されます。

java com.iplanet.trustbase.app.classgen.ClassGen -d . -o ping.jar -r
-root PingRequest -root PingResponse -root PingError -stub com.iplanet.trustbase.sample.PingService "-//IDENTRUS//PING DTD//EN" ping.dtd

このコマンドを実行すると、次のようなことが起こります。

  • 画面に多くの警告が表示される (これらの警告は、DTD で ping.dtd から参照されている特定の要素に対し、クラスが生成されていないという内容のもの。しかし、これらのクラスは、iPlanet Trustbase Transaction Manager のクラスパスにすでに存在するため、再度生成する必要はない)

  • 現在のディレクトリに ping.jar というファイルが作成される (このjar ファイルには、コンパイルされた ping DTD のメッセージクラスが含まれる)

  • src というサブディレクトリが作成される (このサブディレクトリには、生成されたすべてのクラスファイルのソースコードが入れられる)

  • 現在のディレクトリに PingService.java というファイルが作成される (これはスタブ Identrus サービス。次のステップでメッセージ処理コードによって更新することが必要)

これで JAR ファイルとスタブサービスが生成され、サービス開発の次のステップに進むことができます。


API

Java コードを作成する前に、iPlanet Trustbase Transaction Manager に付属する Identrus メッセージ処理用のコア API の一部について理解する必要があります。

com.iplanet.trustbase.identrus

これは、Identrus メッセージ仕様にアクセスすることを可能にするパッケージです。

com.iplanet.trustbase.identrus.message

これは、Identrus メッセージ処理に必要なルーチンを提供するパッケージです。

com.iplanet.trustbase.identrus.security

これは、証明書と鍵を処理するパッケージです。

com.iplanet.trustbase.util.tree

これは、ツリーを検索するパッケージです。

com.iplanet.trustbase.xml.dsig

これは、XML デジタル署名を生成および確認するパッケージです。メッセージの署名が必須のレベル 1 署名だけである場合は、このパッケージは必要ありません。必須の署名は、iPlanet Trustbase Transaction Manager によって自動的に確認および生成されます。

uk.co.jcp.tbase.config

これは、構成オブジェクトとのインターフェイスとして機能するパッケージです。


PingService ソースコード

PingService.java (生成されたサービススタブ) は、抽象 IdentrusService の実装です。ここでは TTM プラットフォームで受信したメッセージが ProcessIdentrusMessage メソッドのパラメータになります。

メッセージの必須署名の確認と、原初ログへの記録は、メッセージが
ProcessIdentrusMessage メソッドに渡される前に行われます。

ProcessIdentrusMessage、受信したリクエストに対する応答メッセージを作成するメソッドです。付属の Identrus API を使えば、ソースコードの記述は簡単です。

package com.iplanet.trustbase.sample;
import com.iplanet.trustbase.identrus.message.IdentrusMessage;
import uk.co.jcp.tbase.service.ServiceException;
import com.iplanet.trustbase.generated.IDENTRUS.PING_DTD.*;
import com.iplanet.trustbase.generated.IDENTRUS.CORE_NETWORK_INFRA
STRUCTURE_DTD.*;

import com.iplanet.trustbase.identrus.IdentrusService;
import com.iplanet.trustbase.identrus.message.*;
import uk.co.jcp.tbaseimpl.log.error.*;
import uk.co.jcp.tbase.service.*;
/*** Stub Identrus service implementation. */
public class PingService extends IdentrusService
{
        public IdentrusMessage processIdentrusMessage( IdentrusMessage message )
        {
        if (message instanceof PingRequest)
        {
        // Handle PingRequest
        PingResponse pr = new PingResponse();
        PingData pd = new PingData();
        pd.setPCDATA( "The ping was successful" );
        pr.setPingData( pd );
        try
        {
        NIBAccessor niba = NIBAccessor.getInstance( message.getNetworkInfoBlk(), "2" );
        pr.setNetworkInfoBlk( niba );
        }
        catch (NIBAccessorException nie)
        {
        ErrorLog.log( new ErrorObject( "IDT0052", nie ));
        }
        return pr;
        }
        if (message instanceof PingResponse)
        {
        // Handle PingResponse
        }
        if (message instanceof PingError)
        {
        // Handle PingError
        }
        return message;
        }
        }

この簡単なサービスを作成したら、コンパイルして、サービス JAR に構築できます。


Identrus サービス JAR の作成

サービスを iPlanet Trustbase Transaction Manager に配置する前の最後のステップは、統合 JAR ファイルの作成です。この JAR ファイルには、すべての生成されたクラスと、手作業で開発した PingService クラスを入れます。

iPlanet Trustbase Transaction Manager サービス jar を構築する手順は次のとおりです。

  • 標準的な JDK の jar ツールを使用して、生成した jar ファイルをディレクトリに解凍します。

    mkdir DumpDirectory
    cd DumpDirectory
    jar -xvf ../ping.jar
    cd ..

  • 「DumpDirectory」に、メッセージの処理に必要なすべてのクラスをコピーします。これらのクラスすべてで、適切なパッケージ構造が維持されていることを確認します。特に、サービススタブクラスは、クラス生成ツールによって作成されたので、パッケージし直すことはできないことに注意してください。

  • 標準的な JDK の jar ツールを使って、アーカイブを再度作成します。

    jar -cvf ping.jar -C DumpDirectory DumpDirectory/*

  • これで jar ファイルを配置することができます。


iPlanet Trustbase Transaction Manager での ping.jar の配置

  • ping.jar を ..../Trustbase/TTM/current/deploy ディレクトリに入れます。

  • iPlanet Trustbase Transaction Manager に「Administrator」としてログオンします。

  • iPlanet Trustbase Transaction Manager に PingService を配置します。「サービス」-「配置」を選択します。

  • Ping.jar はビルダによって自動的に deploy ディレクトリに配置されているため、iPlanet Trustbase Transaction Manager によって関連するすべての情報が取得され、次の図に示す「サービス配置」ページの「使用可能なサービス」セクションに表示されます。



  • を選択してから

    を選択することによって、サービスを配置します。

図 9-1    iPlanet Trustbase Transaction Manager での PingService の配置

  

  • サービスは、ビルダツールで jar ファイルを構築する際に、自動的に登録されます。次の図に示すように、構成コンソールから「サービス」−「レジストリ構成」を選択すると、PingService が表示されます。

図 9-2    サービスレジストリ構成

  

  • サービスを認可する必要がある場合は、「認可」-「サービスの追加」を選択します。次に示すように、サービスには役割を割り当てる必要があります。

図 9-3    サービスへの役割の割り当て

  



使用できる役割がない場合は、役割を定義する必要があります。詳細は、『構成およびインストールガイド』を参照してください。




前へ     目次     索引     DocHome     次へ     
Copyright © 2001 Sun Microsystems, Inc. Some preexisting portions Copyright © 2001 Netscape Communications Corp. All rights reserved.

最終更新日 2001 年 3 月 14 日