暂停调用方法jdbcTemplate.getDataSource()

时间:2014-01-08 12:15:17

标签: java spring java-ee

大家好!
我有一个应用程序,它配置了spring 3和hibernate 3.在应用程序中所有对JDBCTemplate和HibernateTemplate的数据库请求。在我的情况下,我有一个方法,它注册一个数组参数:

protected void registerArrayParameter(PreparedStatement st, int num, Long[] mas) throws SQLException {
    Connection conn = jdbcTemplate.getDataSource().getConnection();
    OracleConnection ocon = (OracleConnection) ((DelegatingConnection) conn).getInnermostDelegate();
    ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CCSYS.NUMBER_TABLE", ocon);
    java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, ocon, mas);
    st.setArray(num, sqlArray);
}

应用程序通常在jdbcTemplate.getDataSource()。getConnection()上暂停(冻结)。
有人能知道它会是什么吗?
感谢您的回复。

1 个答案:

答案 0 :(得分:0)

解决!
在我的情况下,我有一个类扩展BasicDataSourse:

public class SomeSource extends BasicDataSource implements Serializable {
    public static final long serialVersionUID = 4467486478647684235L;
    public static SomeSource dataSource;

    public SomeSource(){
        super();
        /* implementation*/
        ....
        dataSource = this;
    }
}

我修改了方法,它注册了一个数组参数:

protected void registerArrayParameter(PreparedStatement st, int num, Long[] mas) throws SQLException {
    Connection conn = jdbcTemplate.getDataSource().getConnection();
    OracleConnection ocon = (OracleConnection) ((DelegatingConnection) conn).getInnermostDelegate();
    ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("CCSYS.NUMBER_TABLE", ocon);
    java.sql.Array sqlArray = new oracle.sql.ARRAY(arrayDescriptor, ocon, mas);
    st.setArray(num, sqlArray);

    /*added*/
    conn.close();
    ocon.close();
    SomeSource.dataSource.close();
}

之后,应用钢无需暂停/冷冻......