CoordinatorClient 開発者ガイド

目次

  1. 概要
    1. JDK,クラスパス
    2. クライアントメソッド
    3. jarファイル
  2. 機能
    1. クライアント
    2. 操作一覧
    3. プロキシ
  3. API
    1. パイプラインAPI
    2. クライアントJavaDoc (API)
  4. HTTPS通信
    1. サーバーの設定
    2. クライアントの設定
    3. 実行サンプル

概要

CoordinatorClientは、任意のアプリケーションからパイプラインサービスを利用するためのクライアント開発ライブラリです。

JDK,クラスパス

クライアントの実行にはJRE 1.5 以降の環境が必要です。必要なライブラリは

  • coordinatorclient.jar
になります。ライブラリにクラスパスを通して実行してください。

クライアントメソッド一覧

クライアントから操作できることは以下のものになります。詳細はJavaDocを参照してください。

jarファイル

APIキットの中のある。asteria-client-coordinatorclient-0.0.3.zipを解凍してJarファイルを取得してください

apikit-0.0.3.zip
    /coordinatorclient
       asteria-client-coordinatorclient-0.0.3.zip

機能

クライアント

CoordinatorClinetはパイプラインサービスと通信するクライアントクラスです。 このクラスを作成してログインすることで、いろいろな操作が行えます

// ホスト:localhost , ポート: 25080 で接続するクライアント
CoordinatorClient client = new CoordinatorClient() ;

// ホスト:localhost で ポートを指定して接続するクライアント
client = new CoordinatorClient( 25080 ) ;

// ホストを指定して ポート:25080 で接続するクライアント
client = new CoordinatorClient( "192.168.5.99" ) ;

// ホストとポートを指定して接続するクライアント
client = new CoordinatorClient( "192.168.5.99" , 25080 ) ;

// https で ホストとポートを指定して接続するクライアント
client = new CoordinatorClient( "https" , "192.168.5.99" , 25081 ) ;

操作一覧

クライアントで操作機能一覧になります。

機能名メソッド
パイプライン一覧参照getPipelineList()
パイプライン実行executePipeline()
パイプライン開始resumePipeline()
パイプライン停止suspendPipeline()
パイプラインインポートimportPipeline()
パイプラインエクスポートexportPipeline()
パイプラインアクションキャッシュクリアclearPipelineCache()
リクエスト一覧参照getRequestList()
リクエスト詳細参照getRequestDetail()
リクエストリトライretryRequest()
リクエストキャンセルcancelRequest()
システムDB参照selectSystemDB()
ステータスDB参照selectStatusDB()
アクションDB参照selectActionDB()
アクションDBテーブルクリアdeleteActionTable()
アクションDBテーブルドロップdropActionTable()

プロキシ

プロキシ設定を行う場合はsetProxy() で設定します。
サンプルは下記になります。

package sample.client;

import java.util.List;

import java.net.Proxy ;
import java.net.SocketAddress ;
import java.net.InetSocketAddress ;

import com.infoteria.asteria.warp.mc.client.CoordinatorClient;
import com.infoteria.asteria.warp.mc.client.PipelineInfo;
import com.infoteria.asteria.net.http.speaker.client.ClientException;

public class Sample01 {
	public static void main( String[] args ) {
		try {
			String pass = "" ;
			CoordinatorClient client = new CoordinatorClient() ;

			int port = proxy port number ;
			SocketAddress addr = new InetSocketAddress( "your Proxy Server" , port ) ;
			Proxy proxy = new Proxy( Proxy.Type.HTTP , addr ) ;
			client.setProxy( proxy ) ;

			client.login( pass ) ;
			List lst = client.getPipelineList(null);
			for ( PipelineInfo pi : lst ) {
				System.out.println( pi ) ;
			}
		} catch ( Exception e ) {
			e.printStackTrace() ;
		}
	}
}

API

パイプラインAPIのリンクとクライアントのJavaDocへのリンクになります。

パイプラインAPI

パイプラインAPIのリンクはこちらになります

クライアントJavaDoc

JavaDocへのリンクはこちらになります

HTTPS通信

HTTPS通信をするためには、サーバー側ではキーストアの作成とクライアントをHTTPS用に設定する必要があります。

サーバーの設定

手順は

  1. antのプロジェクトファイルを作成
  2. キーストア作成
  3. サーバーの設定ファイルの編集
という流れになります。

キーストアを作成

[install_dir]/pipeline/に下記のcert.xmlを作成します。

antタスクを使用してキーストアを作成します。

※keytool の詳細についてはjavaの製品サイトを参照してください。

// ライブラリを使って作成  :keystore.type は PKCS12 になります
$ ant -f cert.xml -Dcert.password=yourpassword dist-keystore

// keytool を使って作成
$ ant -f cert.xml -Dcert.password=yourpassword dist-keystore-keytool

// GenKey を使って作成 
$ ant -f cert.xml -Dcert.password=yourpassword dist-keystore-genkey

// [install dir]/pipeline/data/keystore にファイルができます。
// 内容確認するには下のコマンドを実行してください。
// dist-keystore で作成した場合は、java.home/lib/security/java.securityのkeystore.type=pkcs12となっていることを確認してください
// データの表示
$ keytool -list -keystore data/keystore/self.keystore

設定ファイルの編集

antを実行すると下のメッセージが出力されるので、[install_dir]/pipeline/conf/pipeline.ifxを

  • PIPELINE-Coordinator-SSLのenable="on"を設定
  • メッセージを追記
の編集を行います。
dist-keystore以外で作成したときは keystore.typeの値を、java.home/lib/security/java.securityにkeystore.typeの値に合わせてください。
編集するときは設定ファイルのバックアップを作成することをおすすめします

> 実行結果メッセージ
printconfig:
     [echo]
     [echo] <param name="password.encrypted">true</param>
     [echo] <param name="keystore">true</param>
     [echo] <param name="keystore.type">JKS</param>
     [echo] <param name="keystore.file">data/keystore/self.keystore</param>
     [echo] <param name="keystore.password">GZ7bG/X+EDoxXwL4aG0Nnw==</param>
     [echo] <param name="privatekey.password">GZ7bG/X+EDoxXwL4aG0Nnw==</param>
     [echo]

// pipeline.ifx の編集箇所
<process id="PIPELINE-Coordinator-SSL" timeout="300" maxdeadcount="1" enable="on" statistics="true"
	manager="com.infoteria.asteria.warp.task.asframework.PipelineManagerService">
	<accepter pool="1" max="1" class="com.infoteria.asteria.warp.engine.framework.DefaultSSLAccepter">
		<param name="port">25081:TLSv3</param>
		<param name="timeout">180</param>
                         :
		<!-- ここに追加 -->

		<param name="password.encrypted">true</param>
		<param name="keystore">true</param>
		<param name="keystore.type">JKS</param>
		<param name="keystore.file">data/keystore/self.keystore</param>
		<param name="keystore.password">GZ7bG/X+EDoxXwL4aG0Nnw==</param>
		<param name="privatekey.password">GZ7bG/X+EDoxXwL4aG0Nnw==</param>

	</accepter>
	<worker pool="1" max="32" class="com.infoteria.asteria.warp.mc.ashttpd.CoordinatorHttpdWorker">

確認

https://hostname:25081/に接続してログイン画面が表示されば設定は完了です。

クライアントの設定

デフォルトは署名エラーを無視するようになっています。
ハンドシェイクを正しくする場合は javax.net.ssl.HostnameVerifier または javax.net.ssl.SSLSocketFactory を設定してください。

  • setHostnameVerifier()
  • setSSLSocketFactory()

詳細はjavaのAPI仕様を参照してください

実行サンプル

実行サンプルは以下のようになります。

■ CoordinatorClientのデフォルトのHostnameVerifier , SSLSocketFactory を使用する場合

package sample.client;

import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession ;
import javax.net.ssl.SSLContext ;
import javax.net.ssl.SSLSocketFactory ;
import javax.net.ssl.KeyManager ;
import javax.net.ssl.TrustManager ;

import com.infoteria.asteria.warp.mc.client.CoordinatorClient;
import com.infoteria.asteria.warp.mc.client.PipelineInfo;
import com.infoteria.asteria.net.http.speaker.client.ClientException;

public class Sample02 {
        public static void main( String[] args ) {
                try {
                        String pass = "" ;
                        CoordinatorClient client = new CoordinatorClient( "https" , "localhost" , 25081 ) ;

                        // HostnameVerifier を設定
                        // HostnameVerifier verifier = do some thing 
                        // client.setHostnameVerifer( verifier ) ;

                        // SSLSocketFactory を設定
                        // KeyManager[] km = do some thing ;
                        // TrustManager[] tm = do some thing ;
                        // SSLContext sslcontext= SSLContext.getInstance("SSL");
                        // sslcontext.init(km, tm, new SecureRandom());
                        // client.setSSLSocketFactory( sslcontext.getSocketFactory() ) ;

                        client.login( pass ) ;

                        List<PipelineInfo> lst = client.getPipelineList(null);
                        for ( PipelineInfo pi : lst ) {
                                System.out.println( pi ) ;
                        }
                } catch ( Exception e ) {
                        e.printStackTrace() ;
                }
        }
}

■ コンストラクタでの自分の HostnameVerifier , SSLSocketFactory を設定する場合

package sample.client;

import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession ;
import javax.net.ssl.SSLContext ;
import javax.net.ssl.SSLSocketFactory ;
import javax.net.ssl.KeyManager ;
import javax.net.ssl.TrustManager ;

import com.infoteria.asteria.warp.mc.client.CoordinatorClient;
import com.infoteria.asteria.warp.mc.client.PipelineInfo;
import com.infoteria.asteria.net.http.speaker.client.ClientException;
import com.infoteria.asteria.net.http.speaker.client.HttpsInitializable ;

public class Sample03 {
        public static void main( String[] args ) {
                try {
                        String pass = "" ;
                        CoordinatorClient client = new CoordinatorClient( new MyHttpsInitialize()  , "hostname.net" , 25081 ) ;
                        client.login( pass ) ;
                        List<PipelineInfo> lst = client.getPipelineList(null);
                        for ( PipelineInfo pi : lst ) {
                                System.out.println( pi ) ;
                        }
                } catch ( Exception e ) {
                        e.printStackTrace() ;
                }
        }

        // Class for creating HostnameVerifier , SSLSocketFactory
        class MyHttpsInitialize implements HttpsInitializable {

                public boolean useDefaultHostnameVerifier() {
                        return false ;
                }

                public boolean useDefaultSSLSocketFactory() {
	                    return false ;
	            }

                public HostnameVerifier createHostnameVerifier() {
                        // Create HostnameVerifier
                		return new HostnameVerifier() {
                			public boolean verify( String name , SSLSession session ) {
                					return true ;
                			}
                		} ;
                }

                public SSLSocketFactory createSocketFactory() throws java.security.NoSuchAlgorithmException , java.security.KeyManagementException {
                        // Create SSLSocketFactory
                        KeyManager[] km = null;
                        TrustManager[] tm = { new X509TrustManager() {
                                public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }
                                public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }
                                public X509Certificate[] getAcceptedIssuers() { return null;}
                                }
                        };
                        SSLContext sslcontext= SSLContext.getInstance("SSL");
                        sslcontext.init(km, tm, new SecureRandom());
                        return sslcontext.getSocketFactory() ;
                }
        }
}
 

▲ このページのトップへ