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

Un noyau HornetQ ou une application cliente JMS doivent fermer leurs ressources avant de s'arrêter. Vous pouvez configurer votre application de faàon à ce qu'elle ferme ses ressources automatiquement en utilisant le bloc finally dans le code de l'application.
L'exemple suivant montre une application cliente qui ferme sa session et son usine de sessions dans le bloc 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();
   }
}
Utilisation du paramètre TTL (Connection Time to Live)

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.

Vous pouvez définir la connexion TTL pour les clients JMS en indiquant le paramètre 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.
La valeur par défaut du paramètre 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.
Garbage Collection

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.