ConnectionContext (接続) を取得/キャッシュ/閉じるにはどうすればよいですか?
ItemWriter.open()でコンテキストをキャッシュし、各チャンクのItemWriter.writeItems()でキャッシュする必要があります
DB2 固有の API を使用したい場合はどうすればよいですか?
ConnectionContext (接続) を取得/キャッシュ/閉じるにはどうすればよいですか?
ItemWriter.open()でコンテキストをキャッシュし、各チャンクのItemWriter.writeItems()でキャッシュする必要があります
DB2 固有の API を使用したい場合はどうすればよいですか?
一般に、各チャンクで実行されるwriteItems()メソッドで SQLJ の get-use-close パターンを使用することをお勧めします。これは、 open()で接続/コンテキストを取得し、チャンク全体でキャッシュするよりも優先されます。
Connection.unwrap()メソッドを使用して、JDBC ドライバー固有の呼び出しを行うことができます。
次のようなものです:
public class MyDB2SQLJItemWriter implements ItemWriter {
DataSource myDataSource; // get via injection (not shown) or however
// ...
public void writeItems(List<Object items) throws Exception {
Connection con = myDataSource.getConnection();
DB2Connection db2Con = con.unwrap(DB2Connection.class);
db2Con.setPackagePath(currentPackagePath); // DB2-specific call
SqljCtx sqljCtx = new SqljCtx(db2Con);
// now do SQLJ
// close SqljCtx AND DB2Connection
sqljCtx.close();
}
また、enableConnectionCasting属性を使用して dataSource を構成する必要もありません (これにより、ここでは不要な柔軟性が追加され、接続キャッシュに関連するより複雑な問題への扉が開かれます)。
この推奨事項は、JDBC API を使用する場合に WebSphere で get-use-close パターンに従うように一般的な推奨事項を拡張したものです。WebSphere に接続プーリングを任せると、パフォーマンスが向上し、リソースの使用率が向上し、より複雑なプーリング シナリオが回避されます。