概要
JCA
JCA (J2EE Connector Architecture) は, RDBMSやMOM (Message-Oriented Middleware) をはじめ, CICSなどのメインフレーム,TUXEDOなどのTPモニタ,SAPなどのERP等への接続を包括的に扱う仕様で, JavaEE仕様の一部となっています.
JCAは,JavaEEアプリケーションと任意のEIS (Enterprise Information System) を自在に接続することを目的とした仕様です. EIS とは,RDBMSやMOM,メインフレーム,TPモニタ,ERPなどの総称です. JCA以前は,RDBMSに対してはJDBC,MOMに対してはJMSというように,EISの種類毎に個別のAPIが定められてきました. また,標準化されていないEISに対してはベンダ固有のAPIが提供されてきました. その場合,アプリケーションサーバはトランザクション制御やコネクションプーリングなどを個々のAPI毎に提供しなくてはならなくなります. そこで,様々なEISへの接続を包括的に扱うために定められた仕様がJCAです.
JCAの主要な構成要素を次の図に示します.
JCA仕様では,EISへの接続を提供するコンポーネントは「リソースアダプタ」と呼ばれます. リソースアダプタはJDBCドライバと同じような位置づけになりますが,Resource Adapter Archive (Rar) ファイルにアーカイブされ, アプリケーションサーバに簡単にデプロイすることができるコンポーネントです.
アプリケーションサーバとリソースアダプタの間にはJCA Service Provider Interface (SPI) というAPIが定められています. SPIを通じて,アプリケーションサーバはリソースアダプタが提供する接続をプーリングしたり,トランザクション制御を行ったりすることができます.
アプリケーションとリソースアダプタの間にはJCA Common Client Interface (CCI) というAPIが定められていますが, JDBCやJMS,ベンダ固有のAPIなど,任意のAPIを利用することもできます. アプリケーションとリソースアダプタ間のAPIと,アプリケーションサーバとリソースアダプタ間のAPIが独立しているのがJCAの特徴です.
アウトバウンド通信とインバウンド通信
JCA仕様では,EISとの間の通信をアウトバウンドとインバウンドという2つのモデルに分類しています. S2JCAは,アウトバウンド通信とインバウンド通信の両方をサポートします.
アウトバウンド通信
アウトバウンド通信 (outbound communication) とは,アプリケーション側が主体となって通信を行う形態のモデルです.
EISへの接続は,アプリケーションの要求によって確立されます.
RDBMSへの接続ならjavax.sql.DataSource#getConnection()
,
MOMへの接続ならjavax.jms.ConnectionFactory#getConnection()
,
JCAのCCI (Common Client Interface) を利用した接続ならjavax.resource.cci.ConnectionFactory#getConnection()
等のAPIを
アプリケーションが呼び出すことで,リソースアダプタがEISへの接続を確立します.
その際,アプリケーションサーバやS2JCAはコネクションをプーリングしたり,JTAトランザクションと関連づけたりします.
確立したコネクション上での操作もアプリケーション側から行います. RDBMSへの接続であればSQLの実行,MOMへの接続であればメッセージの送信や受信などは,全てアプリケーションからの 要求により実行されます.
このように,コネクションの確立やコネクションに対する操作がアプリケーションを主体として行われるのがアウトバウンド通信です.