CoordinatorClient 開発者ガイド
目次
概要
CoordinatorClientは、任意のアプリケーションからパイプラインサービスを利用するためのクライアント開発ライブラリです。
JDK,クラスパス
クライアントの実行にはJRE 1.5 以降の環境が必要です。必要なライブラリは
- coordinatorclient.jar
クライアントメソッド一覧
クライアントから操作できることは以下のものになります。詳細はJavaDocを参照してください。
jarファイル
APIキットの中のある。asteria-client-coordinatorclient-1.0.0.zipを解凍してJarファイルを取得してください
apikit-1.0.0.zip
/coordinatorclient
asteria-client-coordinatorclient-1.0.0.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
クライアントJavaDoc
HTTPS通信
HTTPS通信をするためには、サーバー側ではキーストアの作成とクライアントをHTTPS用に設定する必要があります。
サーバーの設定
手順は
- antのプロジェクトファイルを作成
- キーストア作成
- サーバーの設定ファイルの編集
キーストアを作成
[install_dir]/に下記の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]/data/keystore にファイルができます。 // 内容確認するには下のコマンドを実行してください。 // dist-keystore で作成した場合は、java.home/lib/security/java.securityのkeystore.type=pkcs12となっていることを確認してください // データの表示 $ keytool -list -keystore data/keystore/self.keystore
設定ファイルの編集
antを実行すると下のメッセージが出力されるので、[install_dir]/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() ;
}
}
}