Le serveur reçoit la requête http dans le servlet, à partir de la méthode des appels de servlet du composant ejb.Délai d'attente de requête lors de l'appel de différents threads
public void ejbMethodVariant1(...) {
//calling stored proc
...
//calling same stored proc
}
public void ejbMethodVariant2(...) {
//calling stored proc
...
Thread t = new Thread(() -> {
//calling same stored proc
});
t.start();
try {
t.join();
} catch (InterruptedException e){
...
}
}
La procédure stockée est toujours la même. "Appel proc stocké" signifie:
- connexion Obtenir de la source de données
- Création déclaration appelable
- exécution de l'instruction appelable
- Déclaration de clôture
- connexion de clôture
Dans la variante 1 - Tout fonctionne parfaitement, sans erreurs. Les connexions dans les premier et deuxième appels ont autoCommit = false.
Dans la variante 2, le premier appel se termine avec succès, après deux minutes (com.microsoft.sqlserver.jdbc.SQLServerException: la requête a expiré.). La connexion au premier appel a autoCommit = false, dans le second appel, autoCommit = true.
Une remarque, selon JEE spec, la création et la gestion de threads n'est pas autorisée dans ejb. Voir [cette réponse] (http://stackoverflow.com/questions/3816286/multithreading-in-a-stateless-session-bean#3816621) ou [this] (http://www.oracle.com/technetwork/java /restrictions-142267.html#threads) –