3 votes

Connexion JDBC provoquant une SocketException

J'ai une application web qui tourne sur WAS 7.0 et qui fonctionne sans problème pendant quelques semaines. Tout à coup, elle commence à émettre des SocketExceptions lorsqu'elle essaie d'exécuter un PreparedStatement contre MS SQL 2005. Dans un premier temps, nous avons commencé à examiner certains problèmes évidents qui pourraient être à l'origine de ce problème, comme la non-fermeture d'une connexion, le redémarrage du serveur, la taille du pool de connexions, etc. Mais rien n'est apparu. Nous avons essayé la tentative de connexion de WAS dans le pool, mais cela n'a pas fonctionné. Il n'y a pas de corrélation cohérente avec les redémarrages de serveurs.

Nous utilisons WAS 7 et l'application utilise JSF 1.2. Voici le code affecté suivi de la trace de la pile.

try {
    conn = DBManager.getInstance().getInpatientConnection();

    String sql = "select * from Reviews where datediff(y,reviewedDate,getDate()) < 30";
    ps = conn.prepareStatement(sql);
    rs = ps.executeQuery();

    while(rs.next()){
        reviewed.add(rs.getString("authNum"));
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally{
    DBManager.clean(conn, rs, ps);
}

La trace...

0000002a SystemErr     R Caused by: java.lang.ClassCastException: java.net.SocketException incompatible with java.sql.SQLException
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerPooledConnection.notifyEvent(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerConnection.notifyPooledConnection(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.DBComms.transmit(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.IOBuffer.sendCommand(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
0000002a SystemErr     R    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteQuery(WSJdbcPreparedStatement.java:1099)
0000002a SystemErr     R    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:720)
0000002a SystemErr     R    at com.bcbst.ipct.controllers.MemberListingController.initReviews(MemberListingController.java:266)
0000002a SystemErr     R    at com.bcbst.ipct.controllers.MemberListingController.<init>(MemberListingController.java:251)
0000002a SystemErr     R    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
0000002a SystemErr     R    at java.lang.Class.newInstance(Class.java:1345)
0000002a SystemErr     R    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:190)
0000002a SystemErr     R    ... 66 more

Je ne sais pas quelles autres informations fournir. Faites-moi part de toute autre information que vous jugez pertinente. J'ai fait des tonnes de recherches sur Google et je n'ai rien trouvé d'utile.

TIA

1voto

belgther Points 1754

D'après votre trace de pile, il semble qu'il s'agisse d'un bogue dans le pilote JDBC de MSSQL. Tout ce que vous pouvez faire est d'attraper l'exception ClassCastException comme solution de contournement, si l'exception est levée lorsque votre base de données est hors ligne. En outre, il pourrait également s'agir d'un problème de version Java, car le pilote JDBC repose sur une certaine "hiérarchie de classes".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X