Bonjour,
je précise que je travaille avec hibernate 3.1, jboss 4.0.5 ou websphere 5.1, et sybase 12.5.0.3.
j'ai un problème assez bizarre : lors de l'insertion d'un objet en base, en utilisant la méthode save de la session, j'ai parfois une exception qui est levée.
Je la catch normalement, je rollback ma transaction.
Malheureusement, malgré le rollback, une transaction bloquante reste active sur ma base, et bloque toutes requêtes qui pourrait se produire par la suite.
J'ai analysé le lock et c'est la requête suivante : select @@tranchained : une requête sur une variable globale de la base. C'est assez étrange.
J'ai réussi à reproduire ce plantage de deux facons, et ca génére à chaque fois le lock :
1) si j'insère un objet dont la clé existe déjà en base, malgré le rollback, le lock est présent avec la requête précisée auparavant.
2) dans certains cas, via l'IHM, des caractères invalides semblent présents dans une chaine et provoquent une levée d'exception pour la raison suivante :
Code:
com.sybase.jdbc2.jdbc.SybSQLException: Error converting client characters into server's character set. Some character(s) could not be converted.
at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:2636)
at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:1996)
at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69)
at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:204)
at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:187)
at com.sybase.jdbc2.jdbc.SybStatement.updateLoop(SybStatement.java:1615)
at com.sybase.jdbc2.jdbc.SybStatement.executeUpdate(SybStatement.java:1598)
at com.sybase.jdbc2.jdbc.SybPreparedStatement.executeUpdate(SybPreparedStatement.java:89)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2208)
J'aimerais savoir s'il s'agit un bug de l'API ? ca m'étonne puisque je fais mon rollback (je l'ai vérifié au débugger) et que je n'ai trouvé aucun moyen d'y remédier.
Si quelqu'un peut éclairer ma lanterne, merci d'avance.