JSR-352:DB2DataStoreHelper.findMappingClass中的Stackoverflow错误

时间:2016-08-01 14:16:28

标签: java websphere-liberty jsr352 java-batch

引起: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年前,面对类似问题的用户询问了这个问题。但没有回应,重新开始没有帮助。

Infinite loop in DB2 JDBC driver

1 个答案:

答案 0 :(得分:0)

这看起来像是如何创建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);
}

因此,如果您有2个或更多SQLExceptions创建一个循环,例如:

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

a.setNextException(b);
b.setNextException(a);

然后您的异常无效,因为它会创建一个循环。因此,任何尝试处理SQLException链的代码都会在您观察时遇到无限循环。

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