285.5. 高度な使用方法
285.5.1. プラグ可能な接続リソース管理 リンクのコピーリンクがクリップボードにコピーされました!
SJMS は、組み込み 接続 プールを使用して JMS 接続リソース管理を提供します。これにより、サードパーティーの API プーリングロジックに依存する必要がなくなります。ただし、J2EE や OSGi コンテナーによって提供される外部接続リソースマネージャーを使用する必要がある場合があります。この SJMS は、内部 SJMS 接続プール機能を上書きするために使用できるインターフェースを提供します。これは、ConnectionResource インターフェースを使用して実行できます。
Connection Resource は、必要に応じて接続をバンドルおよび返すメソッドが、接続プールを SJMS コンポーネントに提供するために使用されるコントラクトです。SJMS を外部接続プールマネージャーと統合する必要がある場合にユーザーを使用する必要があります。
標準の ConnectionFactory プロバイダーでは、SJMS をそのまま提供される ConnectionFactoryResource 実装を使用することが、このコンポーネントに対して最適化されるので、拡張することが推奨されます。
以下は、ActiveMQ PooledConnectionFactory でプラグイン可能な ConnectionResource を使用する例です。
public class AMQConnectionResource implements ConnectionResource {
private PooledConnectionFactory pcf;
public AMQConnectionResource(String connectString, int maxConnections) {
super();
pcf = new PooledConnectionFactory(connectString);
pcf.setMaxConnections(maxConnections);
pcf.start();
}
public void stop() {
pcf.stop();
}
@Override
public Connection borrowConnection() throws Exception {
Connection answer = pcf.createConnection();
answer.start();
return answer;
}
@Override
public Connection borrowConnection(long timeout) throws Exception {
// SNIPPED...
}
@Override
public void returnConnection(Connection connection) throws Exception {
// Do nothing since there isn't a way to return a Connection
// to the instance of PooledConnectionFactory
log.info("Connection returned");
}
}
次に、ConnectionResource を SjmsComponent に渡します。
CamelContext camelContext = new DefaultCamelContext();
AMQConnectionResource pool = new AMQConnectionResource("tcp://localhost:33333", 1);
SjmsComponent component = new SjmsComponent();
component.setConnectionResource(pool);
camelContext.addComponent("sjms", component);
使用方法の完全なサンプルを表示するには、ConnectionResourceIT を参照してください。