Operation interrupted SQLException

C

Chanchal

Hello All,

I'm getting the following exception sporadically

java.sql.SQLException: Io exception: Operation interrupted
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
at
oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
309)
at DBManager.getQueue(DBManager.java:200)

This happens in the following code

public static List getQueue(Connection connection){
List queueEntries = new ArrayList();

PreparedStatement pStmt = null;
ResultSet rs = null;
try{

pStmt = connection.prepareStatement(qSql);
rs = pStmt.executeQuery();
while(rs.next()){
QueueEntry qe = new QueueEntry();
qe.setQueueEntryId(rs.getLong(1));
qe.setEventId(rs.getLong(2));
qe.setOid(rs.getLong(3));
String value = rs.getString(5);
if(value == null){
qe.setValue("");
}else{
qe.setValue(value);
}
queueEntries.add(qe);
}
rs.close();
pStmt.close();

}catch(Exception e){
cat.error("CATCH "+getStackTrace(e));
queueEntries = null;
}finally {
try {
if(rs != null){
rs.close();
}
if(pStmt != null){
pStmt.close();
}

} catch (SQLException e) {
cat.error("FINALLY "+getStackTrace(e));
}
}

return queueEntries;
}

Any clue on what could be causing this exception would be of much help

Thanks and Regards

Chanchal
 
J

John B. Matthews

Chanchal said:
Hello All,

I'm getting the following exception sporadically

java.sql.SQLException: Io exception: Operation interrupted
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
at
oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
309) at DBManager.getQueue(DBManager.java:200)

This happens in the following code

[Code, including whichever line was 200, omitted]

Any clue on what could be causing this exception would be of much help

Errors that occur "sporadically" always makes me think of incorrect
synchronization. I'm guessing the error occurs on line 200 of
DBManager.java. Does e.getNextException() have anything to add?

...
} catch(SQLException e) {
while (e != null) {
System.err.println ("Message: " + e.getMessage() + "");
System.err.println ("SQLState: " + e.getSQLState () + "");
System.err.println ("ErrorCode: " + e.getErrorCode() + "");
e = e.getNextException();
System.err.println();
}
}
 
L

Lew

Chanchal said:
I'm getting the following exception sporadically
java.sql.SQLException: Io exception: Operation interrupted
   at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
   at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
   at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
   at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
   at
oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
309) at DBManager.getQueue(DBManager.java:200)
This happens in the following code
[Code, including whichever line was 200, omitted]

I note in that code that the PreparedStatement and ResultSet are
closed twice. This is one reason I avoid the idiom wherein the
variables are initialized to 'null' and then again to the actual
reference. I prefer a variation on RAII ("Resource Acquisition is
Initialization"), which I shall also call "DIRTY" ("Dispose In
Resource Try-finallY"), which uses multiple try-finally blocks to
guarantee disposal of a resource declared 'final'. (Example at end of
post.)

John makes the very good point that if you don't give us much
information, we cannot give very much help. So, which line was line
200?
Errors that occur "sporadically" always makes me think of incorrect
synchronization. I'm guessing the error occurs on line 200 of
DBManager.java. Does e.getNextException() have anything to add?

    ...
    } catch(SQLException e) {
      while (e != null) {
        System.err.println ("Message:   " + e.getMessage() + "");
        System.err.println ("SQLState:  " + e.getSQLState () + "");
        System.err.println ("ErrorCode: " + e.getErrorCode() + "");
        e = e.getNextException();
        System.err.println();
      }
    }

The database might be closing the connection from its end, or the
calling code might be closing the connection concurrently with the
ResultSet action.

OP, read, study and follow the advice of
<http://sscce.org/>

DIRTY template:

public void doSomething()
{
final PreparedStatement pStmt;
try
{
pStmt = cxn.prepareStatement( query );
}
catch ( SQLException sqex )
{
final String msg = "Cannot create statement. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg, sqex );
logger.error( msg, sqex );
throw nex;
}
assert pStmt != null;

try // all use of 'pStmt' is in this 'try' block
{
ResultSet rs = pStmt.executeQuery();
while ( rs.next() )
{ ... }
}
catch ( SQLException sqex )
{
final String msg = "Cannot handle query. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg, sqex );
logger.error( msg, sqex );
throw nex;
}
finally
{
try
{
pStmt.close();
}
catch ( SQLException sqex )
{
final String msg = "Cannot close statement. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg,
sqex );
logger.error( msg, sqex );
throw nex;
}
}
}
 
K

Kevin McMurtrie

"John B. Matthews said:
Chanchal said:
Hello All,

I'm getting the following exception sporadically

java.sql.SQLException: Io exception: Operation interrupted
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
at
oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
309) at DBManager.getQueue(DBManager.java:200)

This happens in the following code

[Code, including whichever line was 200, omitted]

Any clue on what could be causing this exception would be of much help

Errors that occur "sporadically" always makes me think of incorrect
synchronization. I'm guessing the error occurs on line 200 of
DBManager.java. Does e.getNextException() have anything to add?

...
} catch(SQLException e) {
while (e != null) {
System.err.println ("Message: " + e.getMessage() + "");
System.err.println ("SQLState: " + e.getSQLState () + "");
System.err.println ("ErrorCode: " + e.getErrorCode() + "");
e = e.getNextException();
System.err.println();
}
}

That looks like an old JVM bug. Java 1.3 or 1.4? If so, upgrade to
1.6. Skip 1.5 because it has CMS GC and HotSpot bugs that will bite in
enterprise environments.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top