我应该如何在 Liberty Batch (JSR 352) ItemWriter 中使用 SQLJ 进行数据库更新



我应该如何获取/缓存/关闭我的连接上下文(连接(?

我应该在 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();
    }

也不需要使用 enableConnectionCast 属性配置数据源(这增加了这里不需要的灵活性,并为与连接缓存相关的更复杂的问题打开了大门(。

此建议扩展了在使用 JDBC API 时遵循 WebSphere 中的获取-使用-关闭模式的一般建议。 让 WebSphere 执行连接池可提供良好的性能、更好的资源利用率,并避免一些更复杂的池化方案。

相关内容

  • 没有找到相关文章

最新更新