Bonjour,


Il y a quelques semaines nous sommes passé de sqljdbc_4.0 à sqljdbc_8.4.
Tout semble fonctionner correctement, mais aujourd'hui suite à des attaques DDoS subies par notre hébergeur, nous avons eu quelques threads bloqués à ce niveau :


java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2054)
com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6643)
com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:6546)
com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:6524)
com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:6825)
com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:6846)
com.microsoft.sqlserver.jdbc.TDSReader.readUnsignedShort(IOBuffer.java:6773)
com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValuePrep(dtv.java:3393)
com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:3686)
com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:247)
com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:190)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2054)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2040)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getObject(SQLServerResultSet.java:2372)
...



Voici un extrait de notre code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int SQL_QUERY_TIMEOUT = 90;
    Statement instruction = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
    instruction.setQueryTimeout(SQL_QUERY_TIMEOUT);
    ResultSet resultSet = instruction.executeQuery("SELECT * FROM ...");
    if (!resultSet.isBeforeFirst()) {
      return 0;
    }
    ResultSetMetaData resultatMD = resultSet.getMetaData();
    int numberOfColumns = resultatMD.getColumnCount();
    while (resultSet.next()) {
      for (int i = 1; i <= numberOfColumns; i++) {
            Object object = resultSet.getObject(i);
            // ...
      }
    }



1) Quelqu'un a t'il déjà rencontré ce problème avec sqljdbc_8.4 ?
2) Existe t-il un moyen de l'éviter ?
3) Est-ce que ces connexions fantômes sont identifiables coté SQL server ?


Merci d'avance pour votre aide,
Frédéric.