Tivoli Identity Manager : problème sur un Messaging Engine JMS

Il arrive parfois que les requêtes ITIM restent en suspens, sans raison apparente.

En regardant le log tivoli/common/CTGIM/logs/msg.log, on peut détecter des erreurs sur les files JMS :

 <ProductInstance>server1</ProductInstance>
 <LogText><![CDATA[CTGIMA102E A Java Message Service (JMS) error occurred while putting a message on the remoteServicesQueue JMS queue. The following error occurred.
Exception: javax.jms.JMSException: CWSIA0241E: An exception was received during the call to the method JmsManagedConnectionFactoryImpl.createConnection: com.ibm.websphere.sib.exception.SIResourceException: CWSIT0088E: There are currently no messaging engines in bus itim_bus running. Additional failure information: CWSIT0103E: No messaging engine was found that matched the following parameters: bus=itim_bus, targetGroup=null, targetType=BusMember, targetSignificance=Required, transportChain=InboundSecureMessaging, proximity=Server..
]]></LogText>
 <Source FileName="com.ibm.itim.messaging.MessageSenderBean" Method="send"/>
 <TranslationInfo Type="JAVA" Catalog="tmsMessages" MsgKey="com.ibm.itim.messaging.SENDER_JMS_EXCEPTION"><Param><![CDATA[remoteServicesQueue]]></Param><Param><![CDATA[javax.jms.JMSException: CWSIA0241E: An exception was received during the call to the method JmsManagedConnectionFactoryImpl.createConnection: com.ibm.websphere.sib.exception.SIResourceException: CWSIT0088E: There are currently no messaging engines in bus itim_bus running. Additional failure information: CWSIT0103E: No messaging engine was found that matched the following parameters: bus=itim_bus, targetGroup=null, targetType=BusMember, targetSignificance=Required, transportChain=InboundSecureMessaging, proximity=Server..]]></Param></TranslationInfo>
</Message>

Si on passe par la console WebSphere Application Server, on constate qu'effectivement le "messaging engine" est dans un état instable :

Note : on accède à cet écran via : Servers / Application Servers. On sélectionne ensuite le server1 (en général), puis le lien "Messaging Engines".

Pour redémarrer, il faut alors relancer WebSphere au niveau de l'OS, car il n'est pas possible d'arrêter et démarrer la file de message par la console.

Pour arrêter WAS :

su - $WASUSER -c "$WAS_HOME/bin/stopServer.sh server1

Pour le relancer :

su - $WASUSER -c "$WAS_HOME/bin/startServer.sh server1"

Avec dans les deux cas :

  • WASUSER = utilisateur sous lequel est lancé WebSphere
  • WAS_HOME = chemin d'accès à WebSphere, par exemple /product/websphere/AppServer

On peut alors vérifier que le moteur de messages est démarré :

Addendum

Ce problème semble lié, dans notre configuration, au fait que la base de données utilisées est une base Oracle et non pas DB2, et que l'utilisateur ENROLE ne dispose pas des droits corrects sur les transactions. Cf. http://www-01.ibm.com/support/docview.wss?uid=swg21196663
On peut résoudre les problèmes en donnant les droits corrects sur l'utilisateur ENROLE :

sqlplus system/MOTDEPASSE as sysdba
grant select on pending_trans$ to <user>;
grant select on dba_2pc_pending to <user>;
grant select on dba_pending_transactions to <user>;
grant execute on dbms_xa to <user>; (If using Oracle 10.2.0.4 or higher JDBC driver)

Depuis, nous n'avons plus eu de blocage intempestif.

Addendum 2

Il arrive aussi parfois que lors du démarrage, on ait un message CWSIS1519E dans le fichier SystemOut.log:

CWSIS1538I: The messaging engine is attempting to obtain an exclusive lock on the data store.
CWSIS1519E: Messaging engine MyCluster.000-MyBus cannot obtain the lock on its data store, which ensures it has exclusive access to the data.

Ceci peut être le cas si l'UUID dans la table ITIML000.SIBOWNER n'est pas identique. WebSphere pense alors qu'un autre compte a déjà un lock sur la table.

Dans ce cas, on peut débloquer la situation en faisant :

select * from ITIML000.SIBOWNER;
delete from ITIML000.SIBOWNER;
commit;

Puis il faut relancer le serveur websphere.

Catégorie: 

Tag: