Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
18.4. Détection de connexion morte
18.4.1. Fermer les ressources de connexions mortes
finally
dans le code de l'application.
finally
:
ServerLocator locator = null; ClientSessionFactory sf = null; ClientSession session = null; try { locator = HornetQClient.createServerLocatorWithoutHA(..); sf = locator.createClientSessionFactory();; session = sf.createSession(...); ... do some operations with the session... } finally { if (session != null) { session.close(); } if (sf != null) { sf.close(); } if(locator != null) { locator.close(); } }L'exemple suivant montre une application cliente JMS qui ferme sa session et son usine de sessions dans le bloc
finally
:
Connection jmsConnection = null; try { ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(...); jmsConnection = jmsConnectionFactory.createConnection(); ... do some operations with the connection... } finally { if (connection != null) { connection.close(); } }
Le paramètre connection-ttl
détermine la période pendant laquelle le serveur conserve la connexion vivante lorsqu'il ne reçoit pas de données, ni de paquets de ping du client. Ce paramètre garantit que les ressources de serveur mortes, comme les anciennes sessions, soient soutenues plus longtemps, permettant ainsi aux clients de se reconnecter lorsque qu'une connexion de réseau interrompue est ravivée.
connexion-ttl
dans l'instance HornetQConnectionFactory
. Si vous déployez des instances de fabrique de connexions JMS directement dans JNDI, vous pouvez définir le paramètre connection-ttl
dans les fichiers de configuration de serveur standalone.xml
et domain.xml
.
connection-ttl
est 60000 millisecondes. Si vous n'avez pas besoin de clients pour spécifier leur propre connexion TTL ; vous pouvez définir le paramètre connection-ttl-override
dans les fichiers de configuration du serveur pour remplacer toutes les valeurs. Le paramètre connection-ttl-override
est désactivée par défaut et a une valeur de -1.
HornetQ utilise garbage collection pour détecter et fermer les sessions qui ne sont pas explicitement fermées dans un bloc finally
. Le serveur HornetQ consigne un avertissement semblable à l'avertissement ci-dessous avant de fermer les sessions :
[Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession] I'm closing a ClientSession you left open. Please make sure you close all ClientSessions explicitly before let ting them go out of scope! [Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession] The session you didn't close was created here: java.lang.Exception at org.hornetq.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83) at org.acme.yourproject.YourClass (YourClass.java:666)Le message de journal contient l'information sur la partie de code où la connexion JMS ou la session utilisateur ont été créées et n'ont pas été ferméespar la suite.