Traitement des incidents liés aux serveurs de machine virtuelle Java Liberty et aux applications Web Java

Si vous rencontrez un problème avec une application Web Java™ , vous pouvez utiliser les diagnostics fournis par CICS® et Liberty pour déterminer la cause du problème.

CICS fournit des statistiques, des messages et des fonctions de trace pour vous aider à diagnostiquer les problèmes liés à l'exécution d'applications Web Java dans un serveur de machine virtuelle Java Liberty. Liberty génère également des diagnostics disponibles dans zFS. Pour obtenir des informations générales sur les erreurs de configuration et les problèmes d'application, voir Traitement des incidents et support.

Eviter les problèmes

CICS utilise les valeurs de l'identificateur d'application de la région et du nom de ressource JVMSERVER pour créer des noms de fichier et de répertoire zFS uniques. Certains caractères admis ont une signification spéciale dans le shell des services système UNIX. Par exemple, le signe dollar ($) signifie le début d'un nom de variable d'environnement. Certains de ces caractères peuvent provoquer un Exception dans l'infrastructure OSGi Equinox et empêcher le démarrage du serveur JVM. Evitez d'utiliser des caractères non alphanumériques dans l'identificateur d'application de la région et le nom du serveur JVM. Si vous utilisez ces caractères, vous devrez peut-être utiliser la barre oblique inversée (\) comme caractère d'échappement dans l'interpréteur de commandes UNIX System Services. Par exemple, si vous avez appelé votre serveur JVM MY$JVMS et que vous souhaitiez lire le fichier de sortie système JVM:

cat CICSPRD.MY\$JVMS.D20140319.T124122.dfhjvmout

Impossible de démarrer le serveur de machine virtuelle Java Liberty

  1. Si vous ne parvenez pas à démarrer un serveur de machine virtuelle Java Liberty, vérifiez que votre configuration est correcte ; voir Configuration d'un serveur de machine virtuelle Java Liberty pour plus d'informations. Utilisez les messages du journal système CICS et du fichier messages.log Liberty qui se trouve après WLP_OUTPUT_DIR pour déterminer la cause du problème.
  2. Vérifiez que la propriété JVM -Dfile.encoding dans le profil JVM spécifie ISO-8859-1 ou UTF-8. Il s'agit des deux pages de codes prises en charge par Liberty. Si vous définissez une autre valeur, le serveur JVM ne démarre pas.

Le serveur de machine virtuelle Java Liberty local ne peut pas se connecter au serveur de machine virtuelle Java Liberty distant pour JCICSX lorsque SSL est activé (SRVE0777E)

Vous pouvez recevoir cette erreur après avoir configuré votre serveur de machine virtuelle Java Liberty pour qu'il utilise SSL pour le développement d'API JCICSX distant:
Application Error
SRVE0777E: Exception thrown by application class 'com.ibm.cics.jcicsx.http.CICSContextProviderImpl.initialise:112'
com.ibm.cics.jcicsx.http.JCICSXException: Failed to retrieve server info
at com.ibm.cics.jcicsx.http.CICSContextProviderImpl.initialise(CICSContextProviderImpl.java:112)
at com.ibm.cics.jcicsx.http.CICSContextProviderImpl.getCICSContext(CICSContextProviderImpl.java:85)
at com.ibm.cics.harness.TaskProducer.produceTask(TaskProducer.java:26)
at com.ibm.cics.harness.HarnessServletFilter.doFilter(HarnessServletFilter.java:36)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
at [internal classes]
Caused by: javax.ws.rs.ProcessingException: java.io.IOException: IOException invoking https://remotejcicsxserver.com:portNum/jcicsxServer/info: HTTPS hostname wrong: should be <remotejcicsxserver.com>
at org.apache.cxf.jaxrs.client.AbstractClient.checkClientException(AbstractClient.java:643)
at [internal classes]
at com.sun.proxy.$Proxy34.getInfo
at com.ibm.cics.jcicsx.http.CICSContextProviderImpl.initialise(CICSContextProviderImpl.java:101)
... 5 more
Caused by: java.io.IOException: IOException invoking https://remotejcicsxserver.com:portNum/jcicsxServer/info: HTTPS hostname wrong: should be <remotejcicsxserver.com>
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1447)
... 8 more
Caused by: java.io.IOException: HTTPS hostname wrong: should be <remotejcicsxserver.com>
at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(HttpsClient.java:649)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:573)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream$2.run(URLConnectionHTTPConduit.java:427)
... 8 more
Explication
Cette erreur est renvoyée lorsqu'un nom d'hôte n'est pas spécifié pour le serveur de machine virtuelle Java Liberty qui s'exécute dans CICS. S'il n'est pas spécifié, le nom d'hôte sur le serveur Liberty distant est par défaut localhost. Toutefois, le serveur s'attend à ce que le nom d'hôte soit celui de la région CICS distante, en l'occurrence remotejcicsxserver.com. Il s'agit du nom d'hôte correct que votre serveur Liberty local aurait dû transmettre au serveur Liberty distant via le certificat, mais localhost a été transmis à la place.
Intervention de l'utilisateur
Pour identifier le problème, recherchez le nom d'hôte en cours enregistré dans les certificats du serveur de machine virtuelle Java Liberty distant, de l'une des manières suivantes:
  • Utilisez la commande OpenSSL pour afficher les certificats du serveur Liberty JVM distant:
    $ openssl s_client -showcerts -connect remotejcicsxserver.com:portNo
    La sortie peut être similaire à la suivante:
    CONNECTED(00000005)
    depth=0 C = us, O = ibm, OU = defaultServer, CN = localhost
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 C = us, O = ibm, OU = defaultServer, CN = localhost
    verify return:1
    La valeur CN renvoyée dans l'en-tête du résultat est le nom de certificat et le nom d'hôte (localhost) sur le serveur.
  • Pour utiliser l'utilitaire de clé Java:
    1. Accédez au dossier du magasin de clés sur le serveur Liberty distant à l'adresse suivante: {server.config.dir}/resources/security.
    2. Si le serveur Liberty local est à la version 19.0.0.3 ou ultérieure, qui est la version minimale requise pour utiliser les outils côté client du développement JCICSX distant, et que la configuration automatique est activée pour que le serveur Liberty distant utilise SSL, le serveur Liberty distant aura créé un magasin de clés à l'aide des valeurs par défaut. Dans ce cas, utilisez cette commande pour afficher les certificats stockés dans le magasin de clés Java créé automatiquement:
      keytool -list -keystore key.p12 -storepass defaultPassword -storetype PKCS12 -v
      Sinon, remplacez les valeurs dans storepass et storetype en fonction de votre configuration personnalisée.
      Vous pouvez obtenir une sortie de ce type, qui indique localhost comme nom d'hôte:
      Keystore type: PKCS12
      Keystore provider: IBMJCE
      
      
      Your keystore contains 1 entry
      
      
      Alias name: default
      Creation date: Jun 1, 2020
      Entry type: keyEntry
      Certificate chain length: 1
      Certificate[1]:
      Owner: CN=localhost, OU=defaultServer, O=ibm, C=us
      Issuer: CN=localhost, OU=defaultServer, O=ibm, C=us
      Serial number: dd89aa9
      Valid from: 6/1/20 5:41 PM until: 6/1/21 5:41 PM
      Certificate fingerprints:
               MD5:  AB:05:27:5E:55:3B:44:73:CA:65:61:11:D3:08:21:AC
               SHA1: 16:8E:73:61:49:A3:0E:C4:46:7D:77:87:F0:81:DD:C9:EB:28:92:CF
               SHA256: E7:68:BB:CC:6C:00:33:67:CF:A6:DA:9A:56:25:D5:05:8F:69:33:0C:3D:CE:1C:E4:03:E6:13:30:FD:E0:9F:E9
               Signature algorithm name: SHA256withRSA
               Version: 3
      
      
      Extensions: 
      
      
      #1: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: e3 4f e5 04 ff 71 e7 64  1a da 06 2b cb e0 ec 35  .O...q.d.......5
      0010: 18 6f 2d 94                                        .o..
      ]
      ]
      
      
      #2: ObjectId: 2.5.29.17 Criticality=false
      SubjectAlternativeName [
      [DNSName: localhost]]
Le nom d'hôte localhost dans le certificat renvoyé signifie qu'aucun nom d'hôte n'est spécifié sur le serveur de machine virtuelle Java Liberty distant. Suivez les instructions de la rubrique Configuration de SSL (TLS) pour le développement d'API JCICSX distant afin de configurer SSL correctement pour le serveur de machine virtuelle Java Liberty distant.

Impossible d'authentifier un utilisateur lors de la tentative d'accès à une application Web protégée dans un serveur de machine virtuelle Java CICS Liberty

Le journal CICS JESMSGLG contient le message suivant:
ICH420I PROGRAM DFHSIP FROM LIBRARY hlq.SDFHAUTH A CAUSE DE 
ENVIRONNEMENT À DEVENIR INCONTRÔLÉ
BPXP014I L'ENVIRONNEMENT DOIT ETRE CONTRÔLE POUR LE DAEMON (BPX.DAEMON) TRAITEMENT.
Le messages.log Liberty contient le message suivant:
CWWKS1100A: L'authentification n'a pas abouti pour l'utilisateur d'ID utilisateur. 
Un ID utilisateur ou un mot de passe non valide
a été spécifié.

L'implémentation de la sécurité du serveur CICS Liberty JVM utilise le processus ange Liberty pour effectuer des contrôles de sécurité autorisés. Si Liberty ne parvient pas à se connecter au processus ange, il bascule vers l'utilisation de la sécurité UNIX System Services, qui requiert que tous les membres des concaténations STEPLIB et DFHRPL soient contrôlés par programme.

Attention: le serveur Liberty se connecte uniquement au processus ange au démarrage du serveur. Le serveur JVM doit être redémarré pour terminer l'authentification.

Impossible d'authentifier un utilisateur avec un ID utilisateur et un mot de passe, impossible d'accéder à APPL-ID lors de la tentative d'accès à une application Web protégée dans un serveur de machine virtuelle Java CICS Liberty

Liberty messages.log contient le message suivant:
com.ibm.ws.security.saf.SAFServiceResult E CWWKS2909E: 
Une tentative d'authentification ou d'autorisation SAF a été rejetée car le serveur 
n'est pas autorisé à accéder à la ressource SAF suivante: 
APPL-ID APPL-ID. Code d'erreur interne 0x03008108.
La sécurité du serveur CICS Liberty JVM requiert l'accès aux profils de sécurité SAF dans les classes APPL et SERVER. Si l'accès n'est pas accordé, Liberty ne peut pas authentifier l'ID utilisateur et le mot de passe. Pour plus d'informations sur la configuration, voir Authentification des utilisateurs dans un serveur de machine virtuelle Java Liberty.

L'application Web n'est pas disponible après son déploiement dans le répertoire dropins

Si vous recevez un message d'erreur CWWK0221E dans dfhjvmerr, vérifiez que vous avez défini les valeurs appropriées pour le nom d'hôte et le numéro de port dans le profil JVM et server.xml. Le port peut être utilisé par un autre processus et le partage de port peut être désactivé. Il se peut que le nom d'hôte ne puisse pas être résolu par le client.

Augmentation de l'utilisation de l'UC CICS après l'activation d'un serveur de machine virtuelle Java Liberty

Liberty peut être configuré pour vérifier régulièrement les mises à jour de la configuration et des applications installées à l'aide des éléments <config> et <applicationMonitor> dans server.xml. Si la fréquence d'interrogation de la configuration ou l'intervalle de surveillance de l'application est défini trop fréquemment, cela peut entraîner une utilisation excessive de l'unité centrale et des E-S.

Pour < config> , vous pouvez réduire la fréquence à l'aide de l'attribut monitorInterval . Ne désactivez pas l'attribut updateTrigger car CICS requiert que Liberty prenne en compte les modifications de configuration en quelques secondes.

Pour <applicationMonitor>, vous pouvez réduire la fréquence à l'aide de l'attribut pollingRate, modifier l'attribut updateTrigger en mbean, ou le désactiver.

Pour plus d'informations, voir Contrôle des mises à jour dynamiques.

Application non disponible

Vous copiez un fichier WAR dans le répertoire dropins mais votre application n'est pas disponible. Recherchez les messages d'erreur dans le fichier messages.log de Liberty. Si vous recevez le message d'erreur CWWKZ0013E , cela signifie qu'une application Web s'exécute déjà sur le serveur de machine virtuelle Java Liberty avec le même nom. Pour résoudre ce problème, modifiez le nom de l'application Web et effectuez le déploiement dans le répertoire dropins .

Retours d'application WebContext Root Not Found

Vous avez activé votre serveur de machine virtuelle Java Liberty et déployé votre application Web. Le serveur JVM signale qu'il est activé, mais lorsque vous accédez à votre application, vous recevezContext Root Not Found. L'accès à l'application Web peu de temps après se traduit par une réussite. Il s'agit d'une fenêtre de temporisation connue dans laquelle le serveur signale qu'il est activé alors que les applications sont toujours en cours de démarrage en arrière-plan. Vous êtes plus susceptible de rencontrer cette condition dans un environnement multirégional qui utilise Sysplex Distributor ou le partage de port. Vous êtes également susceptible de rencontrer cette condition si vous utilisez l'automatisation pour accéder à l'application déclenchée à partir duenabledstatus. Si vous utilisez Sysplex Distributor ou le partage de port, l'automatisation TCP/IP peut être utilisée pour réduire au silence un port, puis reprendre le port une fois que l'application Web est disponible. Les solutions de contournement peuvent impliquer l'ajout d'une pause dans les scripts d'automatisation ou l'application qui écrit un indicateur à un emplacement connu lorsqu'il est disponible.

L'application Web ne demande pas d'authentification

Vous avez configuré la sécurité, mais l'application Web ne demande pas d'authentification.

  1. Bien que vous puissiez configurer la sécurité CICS pour les applications Web, l'application Web utilise la sécurité uniquement si elle inclut une contrainte de sécurité dans le fichier WAR. Vérifiez qu'une contrainte de sécurité a été définie par le développeur d'applications dans le fichier web.xml du projet Web dynamique.
  2. Vérifiez que le fichier server.xml contient les informations de sécurité correctes. Les erreurs de configuration sont signalées dans dfhjvmerr et peuvent fournir des informations utiles. Si vous utilisez la sécurité CICS , vérifiez que la fonction cicsts:security-1.0 est spécifiée dans server.xml. Si la sécurité CICS est désactivée, vérifiez que vous avez spécifié un registre d'utilisateurs de base pour authentifier les utilisateurs de l'application.
  3. Vérifiez que server.xml est configuré pour que <safAuthorization> tire parti des rôles EJBRoles ou pour un mappage de rôle local dans un élément <application-bnd> . L'élément <application-bnd> se trouve dans l'élément <application> dans server.xml ou installedApps.xml. Le rôle de sécurité par défaut ajouté par CICS pour un mappage de rôle local est cicsAllAuthenticated.

L'application web renvoie un code d'erreur HTTP 403

L'application web renvoie un code d'erreur HTTP 403 dans le navigateur web parce que votre identifiant est révoqué ou que vous n'êtes pas autorisé à exécuter la transaction de l'application.

  1. Recherchez dans le journal des messages CICS le message d'erreur ICH408I pour savoir quel type d'échec d'autorisation s'est produit. Pour résoudre le problème, assurez-vous que l'ID utilisateur possède un mot de passe valide et qu'il est autorisé à exécuter la transaction.
  2. Si aucun message ICH408I n'est trouvé, vérifiez le fichier messages.log .
    • Pour le message suivant:
      CWWKS3005E: Une exception de configuration s'est produite. 
      Aucun services d'implantation UserRegistry n'est disponible. Â
      Assurez-vous qu'un registre d'utilisateurs est configuré.
      Vous devez vous assurer que vous avez configuré un registre SAF dans server.xml. Pour plus d'informations, voir Configuration manuelle de server.xml.
    • Pour le message suivant, lorsque l'identité distribuée est utilisée:
      CWWKS9104A:Â Échec de l'autorisation pour l'utilisateur alidist:defaultRealm 
      lors de l'appel de LdapTests sur /basic. 
      L'utilisateur n'est pas autorisé à accéder à l'un des rôles requis: [ test ].
      Si server.xml est configuré pour <safAuthorization> ou inclut la fonction cicsts:distributedIdentity-1.0 , vérifiez que les rôles EJBRoles appropriés pour l'ID utilisateur RACMAPped ont été définis. Pour plus d'informations, voir Autorisation à l'aide du mappage de rôles SAF. Si server.xml n'est pas configuré pour <safAuthorization> et n'inclut pas la fonction cicsts:distributedIdentity-1.0 , vérifiez que l'ID utilisateur distribué approprié est défini pour avoir accès au rôle approprié dans un élément <application-bnd> . Pour plus d'informations, voir Autorisation des utilisateurs à exécuter des applications dans un serveur de machine virtuelle Java Liberty.
  3. Si l'application retuning une exception pour la classe com.ibm.ws.webcontainer.util.Base64Decode, recherchez les messages d'erreur dans dfhjvmerr . Si vous voyez des messages d'erreur de configuration, par exemple CWWKS4106E ou CWWKS4000E, le serveur tente d'accéder aux fichiers de configuration créés dans un codage différent. Ce type d'erreur de configuration peut se produire lorsque vous modifiez la valeur file.encoding et redémarrez le serveur JVM. Pour résoudre le problème, vous pouvez soit rétablir le codage précédent et redémarrer le serveur JVM, soit supprimer les fichiers de configuration. Le serveur JVM recrée les fichiers dans le codage de fichier approprié au démarrage.

L'application web renvoie un code d'erreur HTTP 500

L'application web renvoie une erreur HTTP 500 dans le navigateur web. Si vous recevez une erreur HTTP 500, une erreur de configuration s'est produite.

  1. Recherchez dans le journal des messages CICS les messages DFHSJ , qui peuvent vous donner plus d'informations sur la cause spécifique de l'erreur.
  2. Si vous utilisez une définition URIMAP pour exécuter des demandes d'application sur une transaction spécifique, assurez-vous que la définition URIMAP spécifie l'ID de transaction correct.
  3. Vérifiez que les attributs SCHEME et USAGE sont définis correctement. Le SCHEME doit correspondre à la demande de l'application, qu'elle soit HTTP ou HTTPS. L'attribut USAGE doit être défini sur JVMSERVER.

L'application web renvoie un code d'erreur HTTP 503

L'application web renvoie une erreur HTTP 503 dans le navigateur web. Si vous recevez une erreur HTTP 503, l'application n'est pas disponible.

  1. Pour plus d'informations, consultez les messages DFHSJ dans le journal des messages CICS .
  2. Assurez-vous que les ressources TRANSACTION et URIMAP de l'application sont activées. Si ces ressources sont conditionnées dans le cadre de l'application dans un bundle CICS , vérifiez le statut de la ressource BUNDLE.
  3. Il se peut que la demande ait été purgée avant d'être terminée. Les messages d'erreur dans le journal décrivent la raison pour laquelle la demande a été purgée.

Impossible d'accéder à votre application Web à l'aide du mappage d'identité distribuée

Si vous utilisez le mappage d'identité répartie, consultez le message suivant dans le fichier messages.log :
FFDC1015I: Un incident FFDC a été créé: "com.ibm.ws.security.saf.SAFException: 
CWWKS2905E: Le service SAF IRRSIA00_CREATE a échoué car 
L'utilisateur null n'a pas été trouvé dans le registre SAF. 
Code retour SAF 0x00000008. Code retour RACF 0x00000008. RACF code anomalie 0x00000010.
FFDC1015I: Un incident FFDC a été créé: 
"javax.security.auth.login.CredentialException: could not create SAF credential 
pour < distid> DistId
Recherchez dans le journal des messages CICS le message d'erreur ICH408I pour savoir quel type d'échec d'autorisation s'est produit. Si c'est le casICH408I USER(<userid>) GROUP(TSOUSER ) NAME(<name>) DISTRIBUTED IDENTITY IS NOT DEFINED: 776 cn= <distid> DistId,ou=users,dc=domain,dc=com LdapRegistryvous devez créer le RACMAP approprié pour l'identité répartie utilisée pour accéder à l'application. La commande RACMAP QUERY est utile pour le débogage. Par exemple :
RACMAP QUERY USERDIDFILTER(NAME('ou=users,dc=domain,dc=com')) REGISTRY(NAME('LdapRegistry'))

L'application Web renvoie des exceptions

L'application Web renvoie des exceptions dans le navigateur Web ; par exemple, l'application renvoie une exception pour la classe com.ibm.ws.webcontainer.util.Base64Decode.

  1. Recherchez les messages d'erreur dans dfhjvmerr .
  2. Si vous voyez des messages d'erreur de configuration, par exemple CWWKS4106E ou CWWKS4000E, le serveur tente d'accéder aux fichiers de configuration créés dans un codage différent. Ce type d'erreur de configuration peut se produire lorsque vous modifiez la valeur file.encoding et redémarrez le serveur JVM. Pour résoudre le problème, vous pouvez soit rétablir le codage précédent et redémarrer le serveur JVM, soit supprimer les fichiers de configuration. Le serveur JVM recrée les fichiers dans le codage de fichier approprié au démarrage.

Message d'erreur WTRN0078EAn attempt by the transaction manager to call start on a transactional resource has resulted in an error.

Le code d'erreur étaitXAER_PROTO. Si vous rencontrez cette erreur, le scénario le plus probable est que l'intégration JTA par défaut fonctionne sur votre serveur Liberty et que votre application utilise une méthode de bean déclarée comme REQUIRES_NEW. Par exemple, l'utilisation de REQUIRES_NEW dans une transaction XA n'est pas prise en charge par CICS: @Transactional(value = TxType.REQUIRES_NEW) void yourMethod{} Vous devez modifier l'application avant qu'elle ne s'exécute.

Message d'erreur DFHSJ1004 dans MSGUSER, mais aucune exception STDERR correspondante

Un symptôme d'un manque d'espace du système de fichiers zFS peut être un DFHSJ1004 sans exception STDERR correspondante. Le message est envoyé en raison du manque d'espace, mais il n'y a pas d'exception dans STDERR car il n'y a pas d'espace pour écrire un message dans les fichiers.

Vous pouvez planifier et surveiller la taille de votre système de fichiers à l'aide des techniques décrites dans la rubrique Gestion des systèmes de fichiers dans z/OS UNIX System Services Planification.

Utilisation du script productInfo pour vérifier l'intégrité de Liberty

Vous pouvez vérifier l'intégrité de l'installation Liberty après avoir installé CICS ou appliqué le service, à l'aide du script productInfo .

  1. Accédez au répertoire CICS USSHOME .
  2. Etant donné que productInfo utilise Java, vous devez vous assurer que Java est inclus dans votre variable PATH. Vous pouvez également définir la variable d'environnement JAVA_HOME sur la valeur de JAVA_HOME dans votre profil JVM, par exemple:
    export JAVA_HOME=/usr/lpp/java/J8.0_64 
  3. Exécutez le script productInfo en indiquant l'option de validation wlp/bin/productInfo validate. Aucune erreur ne doit être signalée. Pour plus d'informations sur le script Liberty productInfo , voir Vérification de l'intégrité de l'installation du profil Liberty.

Utilisation du script wlpenv pour exécuter des commandes Liberty

Le service IBM® peut vous demander d'exécuter une ou plusieurs des commandes fournies par Liberty, telles que productInfo ou server dump. Pour exécuter ces commandes, vous pouvez utiliser le script wlpenv comme encapsuleur pour définir l'environnement requis. Le script est créé et mis à jour chaque fois que vous activez un serveur de machine virtuelle Java Liberty une fois que le profil de machine virtuelle Java a été correctement analysé. Etant donné que le script est unique pour chaque serveur JVM dans chaque région CICS , il est créé dans WORK_DIR/APPLID/JVMSERVER comme indiqué par défaut dans le profil JVM et est appelé wlpenv. APPLID est la valeur de la région CICS APPLID et JVMSERVER est le nom de la ressource JVMSERVER.

Pour exécuter le script wlpenv dans le shell des services système UNIX, accédez au répertoire WORK_DIR comme indiqué dans le profil JVM et exécutez le script avec la commande Liberty en tant qu'argument, par exemple:
./wlpenv productInfo version
./wlpenv server dump --archive=package_file_name.dump.pax --include=heap
Pour la commande server dump , vous ne fournissez pas le nom du serveur car il est défini par le script wlpenv sur la valeur définie lors de la dernière activation du serveur JVM.

Pour plus d'informations sur les commandes Liberty, voir CommandeproductInfo et Génération d'un cliché de serveur Liberty à partir de la ligne de commande.

Traitement des incidents liés à l'appel d'une application Enterprise Java

La commande EXEC CICS LINK échoue avec RESP = PGMIDERR, RESP2 = 1
  1. Vérifiez l'application pour déterminer si les artefacts corrects ont été générés.
    1. Vérifiez que le traitement des annotations est activé sur le projet source.
      Figure 1 : Le traitement des annotations de vérification est activé
      Vérifiez que l'option "Activer le traitement des annotations" est sélectionnée dans la section Compilateur Java > Traitement des annotations des propriétés du projet
    2. Vérifiez si un @CICSProgram a été ajouté à une méthode Java et s'il est correctement compilé.
    3. Si votre projet contient un web.xml, vérifiez la version de la spécification de servlet qu'il spécifie. Il doit s'agir au moins de la version 2.5.
    4. Exportez l'application et recherchez le code généré dans le package com.ibm.cics.server.invocation.proxy . Par exemple, sur un poste de travail, ouvrez le fichier WAR ou EAR à l'aide d'un gestionnaire d'archives ou, sur z/OS® , utilisez la commande jar -tf pour examiner le contenu du fichier WAR ou EAR. Si le code n'a pas été généré, vérifiez que vous disposez de la dernière version de CICS Explorer®, CICS Build Toolkit ou du processeur d'annotations.
  2. Recherchez dans le journal des messages CICS des messages similaires aux suivants:
    • DFHSJ1204: Un service liable a été enregistré pour la classe examples.TSQ.ClassOne anotherMethod avec le nom de programme LINKJCIN dans JVMSERVER LINKJVM
    • DFHPG0101: La définition de ressource pour LINKJCIN a été ajoutée.
    Si ces messages ne s'affichent pas, procédez comme suit:
    1. Vérifiez que vous disposez d'un serveur de machine virtuelle Java Liberty à l'état activé.
    2. Vérifiez que la fonction cicsts:link-1.0 est configurée dans votre server.xml. S'il est configuré, un message s'afficheJ2CA7001I: Resource adapter com.ibm.cics.wlp.program.link.connectorinstalleddans messages.log.
    3. Si vous déployez votre application à l'aide d'un bundle CICS , vérifiez que le bundle est installé et activé.
    4. Vérifiez que l'application est installée dans Liberty, le cas échéant, dans le messages.log , vous recevrez un message indiquant le nom de l'application de l'utilisateur. Par exemple :CWWKZ0001I: Application com.ibm.cics.test.javalink started.
La commande EXEC CICS LINK échoue avec RESP = PGMIDERR, RESP = 27
Cela indique que CICS a tenté d'appeler une application Enterprise Java dans Liberty mais qu'un dépassement de délai s'est produit avant que l'application n'aboutisse. La cause la plus courante de ce problème est qu'aucune unité d'exécution n'était disponible sur le serveur JVM. Pour résoudre ce problème, augmentez la limite d'unités d'exécution du serveur JVM ou augmentez la valeur de WLP_LINK_TIMEOUT pour permettre aux tâches d'attendre plus longtemps avant d'acquérir une unité d'exécution. Pour plus d'informations, voir WLP_LINK_TIMEOUT dans Symboles utilisés dans le profil JVM et Gestion de la limite d'unités d'exécution des serveurs JVM.
L'appel de l'API JCICS émet une exception CICSRuntimeException
com.ibm.cics.server.CicsRuntimeException: 
DTCTSQ_READNEXT: No JCICS context is associated with the current thread. 

La cause la plus probable de cette exception est que vous avez créé un objet JCICS sur une unité d'exécution et que vous avez tenté d'appeler ses méthodes d'instance à partir d'une autre unité d'exécution. Modifiez votre application pour construire l'objet JCICS sur l'unité d'exécution qui appelle ses méthodes.

Les modèles qui conduisent à l'utilisation par inadvertance d'un objet sur une unité d'exécution différente sont les suivants:
  • Construction d'un objet JCICS dans le constructeur d'un java.lang.Runnable ou d'un java.util.concurrent.Callable. Construisez l'objet dans la méthode run() à la place.
  • Affectation d'objets JCICS à des variables statiques. Utilisez des variables d'instance à la place.
  • Transmission d'un objet JCICS en tant que paramètre à une méthode exécutée par une autre unité d'exécution. L'unité d'exécution doit construire l'objet JCICS lui-même.
Fin anormale de la transaction AJ05 lors de l'appel d'une application Enterprise Java
Les exceptions suivantes seront consignées dans le fichier dfhvjmerr :
com.ibm.cics.server.InvalidRequestException: CICS INVREQ Condition(RESP=INVREQ, RESP2=200)
java.lang.RuntimeException: 
javax.transaction.RollbackException: 
XAResource start association error:XAER_PROTO
L'utilisation de JTA avec Link to Liberty est uniquement prise en charge avec l'intégration JTA CICS désactivée. Configurez-le à l'aide de <cicsts_jta integration="false"/> dans server.xml.

Dépassements de capacité de la pile Java

Message d'erreur Javajava.lang.StackOverflowError: operating system stack overflowest généralement visible lorsque l'unité d'exécution dépasse la taille de pile initiale pour les unités d'exécution du système d'exploitation. La taille est définie par l'option JVM -Xmso dans le profil JVM. Il peut être nécessaire d'augmenter cette valeur si l'architecture JPDA (Java Platform Debugger Architecture) est activée.

Messages ICH408I inattendus dans le journal

Il s'agit de messages d'audit standard. Pour plus d'informations, voir Classes qui contrôlent l'audit pour z/OS UNIX System Services dans le document z/OS Security Server RACF Auditor's Guide.

Vous pouvez les empêcher d'être émis en exécutant l'une des commandes RACF® suivantes:
  • SETROPTS LOGOPTIONS(NEVER(IPCOBJ))
  • SETROPTS LOGOPTION(DEFAULT(IPCOBJ))

IPCOBJ est défini uniquement pour l'audit des événements de sécurité UNIX z/OS . Il n'est pas utilisé pour la vérification des autorisations.

Délai d'attente des hits Liberty Bundlepart

Le message suivant s'affiche dans le journal JVM ou dans le fichier STDERR:
L'application installée par bundlepart < symbolic-name> n'a pas été démarrée 
après 30000 millisecondes. Il existe un problème lié à l'application ou le système est occupé. 
Ce délai d'attente peut être contrôlé par la propriété système'com.ibm.cics.jvmserver.wlp.bundlepart.timeout= n' 
où n est la valeur en millisecondes à attendre.
Recherchez les messages CWWKZ dans le messages.log Liberty. Les messages CWWKZ peuvent fournir des informations sur la raison pour laquelle l'application n'a pas démarré. S'il n'existe aucun message CWWKZ pour l'application, assurez-vous que l'élément <config> est configuré pour utiliser l'interrogation et qu'un intervalle de surveillance réduit le délai d'attente, par exemple:
<config updateTrigger="polled" monitorInterval="10s" />
Si l'intervalle de surveillance est inférieur au délai d'attente de l'objet bundlepart, vous devez augmenter la valeur du délai d'attente. La valeur du délai d'attente est contrôlée par la propriété système JVM com.ibm.cics.jvmserver.wlp.bundlepart.timeout.

CICS Explorer ne parvient pas à exporter un bundle ou à trouver un projet comportant une erreurUnable to find a built {project_type} with symbolic name {symbolic_name}.

Les erreurs de validation suivantes peuvent s'afficher lors de l'ajout d'un projet à votre bundle CICS :

The bundle cannot be exported because CICS Explorer cannot find a built {project_type} with symbolic name {symbolic_name}. 
To resolve this, either install the IBM CICS SDK for Java EE, Jakarta EE and Liberty to build the project or import the built {file_extension} project directly.
Unable to find a built OSGi Application Project with symbolic name {symbolic_name}.
To resolve this, either install LDT to find and validate projects in your workspace or add the built EBA project into the root of the CICS bundle project.
Unable to find a {project_type} with symbolic name {symbolic_name}.
To resolve this, either import the {project_type} into your workspace or add the built {file_extension} project into the root of the CICS bundle project.
Ou cette erreur se produit lors de l'exportation d'un bundle CICS :
{symbolic_name} cannot be exported. Install the Liberty Developer Tools (LDT) from Eclipse Marketplace.
The WAR, EAR or EBA cannot be exported. Install the IBM CICS SDK for Java EE, Jakarta EE and Liberty.
Pourquoi est-ce arrivé?
Pour un projet dans le bundle CICS , CICS Explorer trouve le projet correspondant dans votre espace de travail ou valide l'existence d'un fichier binaire généré correspondant avec le nom symbolique correspondant afin que le projet puisse être exporté avec le bundle. L'une des erreurs précédentes est renvoyée si CICS Explorer ne parvient pas à trouver un tel projet généré.
Où :
{project_type}
Type de projet du projet généré manquant. Il peut s'agir d'un projet d'application OSGi ou d'un projet d'application d'entreprise.
{symbolic_name}
Nom du projet généré manquant, qui est spécifié dans le fichier cics.xml .
{file_extension}
Format de fichier du projet généré manquant. Il peut s'agir de EBA ou EAR.
Comment résoudre l'erreur?

Pour un projet d'application OSGi (EBA), suivez les instructions dans les messages d'erreur pour installer IBM CICS SDK for Enterprise Java (Liberty), Liberty Developer Tools (LDT), ou les deux pour valider et générer le projet, ou ajoutez le projet généré correspondant à la racine de votre bundle CICS .

Pour un projet Enterprise Application Project (EAR) ou un projet Web dynamique (WAR), suivez les instructions dans les messages d'erreur pour installer le IBM CICS SDK for Enterprise Java (Liberty), importer le projet d'application d'entreprise ou le projet Web dynamique correspondant dans votre espace de travail ou ajouter le projet EAR ou WAR généré à la racine de votre projet de bundle CICS .

L'installation de l'application EBA échoue avec des messages CWWKZ0005E ou CWWKZ0021E

Si Liberty ne parvient pas à installer un EBA, il génère l'un desCWWKZ0005EouCWWKZ0021Emessages. Cela peut être dû au fait que la fonction wab-1.0 n'est pas installée. Vérifiez que la fonction wab-1.0 est correctement installée.

En raison de la stabilisation du support OSGi de Liberty, les bundles WAB ne sont pas compatibles avec les fonctions Java EE 8. La fonction wab-1.0 peut être automatiquement désinstallée si des fonctions Java EE 8 sont également installées sur le même serveur Liberty, ce qui entraîne la suppression des EBAs du serveur avec le message ci-dessus. La propriété de profil JVM com.ibm.cics.jvmserver.wlp.wab peut être utilisée pour contrôler si la fonction wab-1.0 est ajoutée à server.xml.

Message d'erreur CWWKC2262EThe server is unable to process the 4.0 version and the http://xmlns.jcp.org/xml/ns/javaee namespace

Si le serveur ne peut pas traiter la version 4.0 et l'espace de nom http://xmlns.jcp.org/xml/ns/javaee , cela signifie généralement qu'un serveur d'applications, tel que Tomcat, n'a pas été exclu du script de génération. Dans Gradle, vérifiez que vous avez spécifié providedRuntime("org.springframework.boot:spring-boot-starter-tomcat"), tandis que dans Maven, vous avez utilisé la portée'fournie', par exemple:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>