2016-08-01 7 views
-1

Verursacht durch: java.lang.StackOverflowError bei java.lang.Integer.valueOf (Integer.java:844) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:430) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com .ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHel per.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) bei com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) beiJSR-352: Stackoverflow Fehler in DB2DataStoreHelper.findMappingClass

.... ....

Diese com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445) wird fortgesetzt, bis ein Stackoverflow e Fehler. Der Fehler tritt auf, wenn ich in den Writers writeItems() aufrufe, also bin ich nicht sicher, wo oder warum genau es passiert.

Diese Frage wurde vor 3 Jahren von einem Benutzer gestellt, der vor einem ähnlichen Problem steht. Aber es gibt keine Antworten und das erneute Laufen hat nicht geholfen.

Infinite loop in DB2 JDBC driver

+0

Können Sie einen Beispielcode posten? –

+0

Wie sieht der untere Teil des Stapels aus? dh die Menge der Aufrufe, die den Code in die findMappingClass() - Endlosschleife bringt –

+0

Der Rest der Aufrufe sind im Wesentlichen gleich com.ibm.websphere.rsadapter.DB2DataStoreHelper.findMappingClass (DB2DataStoreHelper.java:445 einhundert Mal und dann writeItems () line java 126. Diese Zeilennummer ist wo ich statement.executeBatch() mache –

Antwort

0

Das sieht aus wie ein Bug mit, wie die SQLException erstellt zu werden.

Was im DB2DataStoreHelper.findMappingClass() in Ihrem Szenario geschieht, ist effektiv dies:

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); 
} 

Also, wenn Sie 2 oder mehr SQLExceptions, die einen Zyklus, wie zu erstellen:

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

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

dann Ausnahme ist ungültig, weil es einen Zyklus erstellt. Daher wird jeder Code, der versucht, die SQLException-Kette zu verarbeiten, in einer Endlosschleife laufen, wie Sie beobachten.

Überprüfen Sie Ihren Anwendungscode, um sicherzustellen, dass in keiner Ihrer Ausnahmen Zyklen erstellt werden.