JSR-352:DB2DataStoreHelper.findMappingClass中存在堆栈溢出错误



原因:java.lang.StackOverflowError位于java.lang.Integer.valueOf(Integer.java:844)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:430)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)位于com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)在

这个com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass(DB2DataStoreHelper.java:445)一直发生,直到出现stackoverflow错误。当我在Writers writeItems()中调用executeBatch()时会发生错误,所以我不确定它到底发生在哪里或为什么发生。

这个问题是3年前一位面临类似问题的用户提出的。但没有回应,重新运行也无济于事。

DB2 JDBC驱动程序中的无限循环

这看起来像是创建SQLException的一个错误。

在您的场景中,DB2DataStoreHelper.findMappingClass()中发生的事情实际上是这样的:

public Class<?> findMappingClass(SQLException e) {
    // Check if 'e' is in the error map anywhere, 
    // if it is, return the class.
    // otherwise, check the next exception in the chain
    SQLException next = e.getNextException();
    return findMappingClass(next);
}

因此,如果您有两个或多个创建循环的SQLException,例如:

SQLException a = new SQLException();
SQLException b = new SQLException();
a.setNextException(b);
b.setNextException(a);

那么您的异常是无效的,因为它会创建一个循环。因此,正如您所观察到的,任何试图处理SQLException链的代码都将运行到一个无限循环中。

检查您的应用程序代码,以确保在任何异常中都没有创建周期。

相关内容

  • 没有找到相关文章

最新更新