高度なカスタマイズ > Info*Engine ユーザーガイド > SOAP サービス > Info*Engine Java EE コネクタ
  
Info*Engine Java EE コネクタ
Info*Engine Java Platform, Enterprise Edition (Java EE) コネクタは、Java EE Connector Architecture (JCA) バージョン 1.0 の Info*Engine の実装です。JCA は、Java EE アプリケーションサーバーと企業情報システム (EIS) 間の対話のための標準実装を提供する目的で設計されました。ここでの企業情報システムは Info*Engine です。
コネクタは、Java EE アプリケーションサーバー環境 (JBOSS や Sun ONE など) またはスタンドアロン Java クライアント (コマンドラインまたは Swing アプリケーション) から Info*Engine へのアクセスを可能にする低レベルのソフトウェアドライバです。Info*Engine Java EE コネクタは、通信プロトコルとして SOAP を使用します。このコネクタは、JDBC ドライバと類似しており、JDBC ドライバがリレーショナルデータベースとの接続および操作を認識するのと同様に、Info*Engine との接続および操作の低レベルの側面を認識します。
Info*Engine Java EE コネクタを使用するアプリケーションサーバー環境の設定の詳細については、使用している環境 (Sun ONE または JBOSS) に応じて該当するホワイトペーパーを参照してください。これらのホワイトペーパーは、以下の URL の PTC Web サイトにある「Reference Documents」セクションの Windchill Info*Engine ページにあります。
www.ptc.com/appserver/cs/doc/refdoc.jsp
Info*Engine Java EE コネクタは、SOAP を使用して Info*Engine と通信します。SOAP は、XML を使用して Web サービスと対話するための標準のリクエストおよびレスポンスプロトコルです。Info*Engine には SOAP RPC サーブレットが含まれているので、HTTP または JMS を使用して、Info*Engine タスクをクライアントに公開できます。
Info*Engine は、実行時に Web Service Definition Language (WSDL) を使用して、クライアントに対する SOAP サービスを記述できます。Java EE コネクタとともに配布されるツールは、WSDL メタデータ情報を使用して、Info*Engine の操作を簡略化するクライアント側 Java クラスを生成できます。この提供ツールを使用して、Info*Engine の操作を制御する標準の Java メソッドを公開する Data Access Objects (DAO) および Enterprise Java Beans (EJB) を生成できます。
JCA 規約および共通クライアントインタフェース
JCA では、接続管理、トランザクション管理、およびセキュリティ管理というコネクタに必要な 3 つの規約が定義されています。Java EE コネクタがこれら 3 つの規約を実現することにより、アプリケーションサーバーは、接続プール、自動トランザクション管理、セキュリティコントロールなどの付加価値サービスをプラグインできます。また、JCA では共通クライアントインタフェース (CCI) も定義されています。CCI は、Java EE コネクタがオプションで実装できる推奨クライアント API を提供します。Info*Engine Java EE コネクタは、CCI を実装しています。
* 
この情報は、一般的な概要として提供されています。Info*Engine Java EE コネクタを使用して、アプリケーションを記述する必要はありません。
接続規約
コネクタは、以下のサービスプロバイダインタフェースを実装する必要があります。
javax.resource.spi.ManagedConnectionFactory
javax.resource.spi.ManagedConnection
javax.resource.spi.ManagedConnectionMetaData
javax.resource.spi.ConnectionManager
これらのクラスの Info*Engine コネクタ実装の内容は、以下のとおりです。
com.infoengine.connector.IeManagedConnectionFactory
com.infoengine.connector.IeManagedConnection
com.infoengine.connector.IeManagedConnectionMetaData
com.infoengine.connector.IeConnectionManager
これらのクラスについては、次のセクションで説明します。
* 
コード上のオブジェクト参照は、クラスを実装するのではなく、適切なインタフェースを定義することによって行われます。以下に例を示します。
ManagedConnectionFactory mcf = new IeManagedConnectionFactory ();
IeManagedConnectionFactory
IeManagedConnectionFactory クラスを使用して、実際に Info*Engine への接続を作成できる EIS 固有の接続ファクトリのインスタンスを作成します。このクラスには、物理接続の作成と比較に必要なロジックも含まれています。これらの追加メソッドは、接続プールを容易にするために、アプリケーションサーバーやその他の実装などの接続マネージャで使用されます。アプリケーション開発者がこのクラスを直接参照するのは、スタンドアロン Java SOAP クライアントを開発する場合のみです。詳細については、スタンドアロン Java SOAP クライアントの例を参照してください。
IeManagedConnection
IeManagedConnection クラスは、EIS への物理接続を表現します。アプリケーション開発者は、このクラスを直接インスタンス化または操作する必要はありません。
IeManagedConnectionMetaData
IeManagedConnectionMetaData クラスを使用して、EIS への物理接続についての一般情報を取得できます。Info*Engine コネクタによって、このクラスの実装と、CCI の実装の一部である javax.resource.cci.ConnectionMetaData とが結合されます。詳細については、後述のセクション「共通クライアントインタフェース」を参照してください。
たとえば、クライアントは以下の方法で接続についてのメタデータを要求できます。
Connection cx = cxFactory.getConnection();
ConnectionMetaData meta = cx.getMetaData ();
IeConnectionManager
IeConnectionManager クラスは、スタンドアロン Java SOAP クライアントなど、Java EE アプリケーションサーバー以外でコネクタが使用される場合に接続を管理する必要があります。アプリケーションサーバーのこのクラスの実装は、接続プールや自動トランザクション管理などの機能を取り込みます。このクラスが Info*Engine Java EE コネクタを実装することで、単純な接続プールのサポートが提供されます。自動トランザクション管理はサポートしません。トランザクションのサポートは、Info*Engine Java EE コネクタが Windchill システムに対して公開されている場合にのみ提供されます。スタンドアロンアプリケーションでコネクタが使用される場合、アプリケーションはトランザクションの境界を手動で管理する必要があります。アプリケーション開発者は、このクラスを直接インスタンス化または操作する必要はありません。詳細については、スタンドアロン Java SOAP クライアントの例を参照してください。
トランザクション規約
Info*Engine Java EE コネクタは、LocalTransaction サポートのみを備えています。トランザクションは、コネクタが Windchill に対して展開されている場合にのみサポートされます。Java EE SOAP クライアントで Info*Engine Java EE コネクタを使用する場合、ユーザーの代わりにアプリケーションサーバーがトランザクションを管理できます。公開されると、各 EJB メソッドは自己のトランザクション要件を宣言できます。Windchill の使用中、処理される代理が EJB から呼び出される場合、@FORM コンテキストグループには、タスクで使用し、トランザクション内に入る必要がある情報が含まれます。@FORM の属性は以下のとおりです。
session_instance - トランザクションが開始した Windchill インスタンス。これは、トランザクションの一部である Windchill アダプタ Webject の INSTANCE パラメータの値として使用される必要があります。
session_id - セッション識別子。これは、トランザクションの一部である Windchill アダプタ Webject の SESSION_ID パラメータの値として使用される必要があります。
スタンドアロン Java SOAP クラアントまたはトランザクション自体を制御する EJB でトランザクションを実行する場合、トランザクションの境界を手動で設定できます。以下に例を示します。
Connection cx = cxFactory.getConnection ();
LocalTransaction tx = cx.getLocalTransaction ();
...
tx.begin ();
...
tx.commit ();
セキュリティ規約
Info*Engine コネクタは、javax.resource.spi.security.PasswordCredential 資格証明インタフェースによる BasicPassword 認証をサポートしています。実際の検証は、最初の操作で実行されます。HTTP サーバー認証が行われていないなど、Info*Engine がセキュリティで保護されていないモードで実行している場合、特定の有効な資格証明が渡されて、サポートしているタスクで使用される場合と同様に、ユーザー名とパスワードが無視されます。/com/infoengine/connector/validateUser.xml は EJB が使用するタスクで、サポートしているアダプタに対してユーザーが正しく認証されているかどうかを EJB 作成時に確認します。EJB の自動生成機能は、このタスクを使用して EJB 作成時にユーザーを検証し、その後の操作で認証が失敗しないようにします。
共通クライアントインタフェース (CCI)
* 
Info*Engine の操作は、CCI レベルではなく、生成後の Data Access Objects (DAO) により実行されるのが理想的です。DAO 生成の詳細については、スタンドアロン Java SOAP クライアントの例を参照してください。
Info*Engine Java EE コネクタでは、共通クライアントインタフェース (CCI) を実装することにより、操作のための専用 API を回避します。
CCI を使用すると、クライアントから基盤となる EIS のデータ保管場所への接続を記述するコードの問題を簡略化できます。EIS ベンダーは、CCI を使用して自社製品への汎用インタフェースを記述できます。この共通のインタフェースにより、その製品は任意の Java EE 準拠プラットフォーム上のクライアントと連動できます。同様に、アプリケーション開発者は、EIS ごとに異なる API を学習することなく、API 呼び出しを 1 セット理解して使用するだけで、任意の基本 EIS にクライアントを接続できます。
CCI では、以下のクラスを使用します。
com.infoengine.connector.IeConnectionSpec
com.infoengine.connector.IeInteractionSpec
com.infoengine.connector.IeInteractionResult
com.infoengine.connector.IeConnectionSpec
com.infoengine.connector.IeConnectionSpec クラスを使用すると、接続の作成時に資格証明を渡すことができます。このクラスは、標準の UserName および Password プロパティをサポートしています。また、レスポンスでローカライズされたデータの生成を可能にする locale プロパティ、およびシングルサインオン (SSO) シナリオで使用可能な authUser プロパティもサポートしています。送信リクエストに電子署名するようにコネクタが設定されている場合、またはクライアントが信頼されているホスト上に存在する場合にのみ、authUser プロパティは Info*Engine によって受け入れられます。
com.infoengine.connector.IeInteractionSpec
com.infoengine.connector.IeInteractionSpec クラスは、Info*Engine の操作を制御します。標準の FunctionName プロパティでは、呼び出す関数のメソッドを指定します。この値は、呼び出すタスク代理の名前に対応します。その他の ClassName プロパティでは、タスク委任が属するクラスを指定します。この値は、呼び出すタスク代理を含むタイプ識別子に対応します。
com.infoengine.connector.IeInteractionResult
javax.resource.cci.Interaction 実装は、入力レコードの実行のみをサポートしています。入出力レコードの実行はサポートしていません。Interaction の実装は、com.infoengine.connector.IeInteractionResult のインスタンスを常に返します (javax.resource.cci.Record の実装)。IeInteractionResult クラスは、SOAP レスポンスの単純なラッパーです。レスポンスオブジェクトは、getResult() メソッドを使用して読み込むことができます。Interaction は、MappedRecord または IndexedRecord のいずれかを入力として受け入れます。
MappedRecord が渡される場合、マッピングのキーはパラメータ名、値はパラメータ値です。IndexedRecord が渡される場合、渡されるパラメータの各値は name=value のペアである必要があります。理想的には、java.lang.String 以外のデータタイプを渡さない name=value 文字列として MappedRecord を使用します。
以下は、Info*Engine の操作例です。
ConnectionFactory cxf = getLDAPFactory (); // look up in JNDI
Connection cx = null;
try {
// get connection with credentials
IeConnectionSpec cxSpec = new IeConnectionSpec ();
cxSpec.setUserName ( "wcadmin" );
cxSpec.setPassword ( "wcadmin" );
cx = cxf.getConnection ( cxSpec );
// or anonymous
//cx = cxf.getConnection ();
Interaction ix = cx.createInteraction ();
IeInteractionSpec ixSpec = new IeInteractionSpec ();
ixSpec.setClassName ( "org.myOrg.Math" );
ixSpec.setFunctionName ( "sum" );
RecordFactory rFact = cxf.getRecordFactory ();
MappedRecord iRec = rFact.createMappedRecord ( "input" );
iRec.put ( "x", new Integer ( 4 ) );
iRec.put ( "y", new Integer ( 5 ) );
IeInteractionResult result =
(IeInteractionResult)ix.execute ( ixSpec, iRec );
Integer sum = (Integer)result.getResult ();
System.out.println ( "sum is " + sum.intValue () );
} catch ( Exception ex ) {
ex.printStackTrace ();
} finally {
if ( cx != null ) cx.close ();
}