Fehlerbehebung bei Liberty-JVM-Servern und Java-Webanwendungen
Wenn Sie ein Problem mit einer Java™ -Webanwendung haben, können Sie die von CICS und Liberty bereitgestellten Diagnoseprogramme verwenden, um die Ursache des Problems zu bestimmen. CICS stellt Statistiken, Nachrichten und Traceerstellung bereit, um Sie bei der Diagnose von Problemen zu unterstützen, die sich auf die Ausführung von Java-Webanwendungen in einem Liberty-JVM-Server beziehen. Liberty erstellt auch Diagnoseprogramme, die in zFSverfügbar sind.
Allgemeine Konfigurationsfehler und Anwendungsprobleme finden Sie unter Fehlerbehebung und Unterstützung.
Probleme vermeiden
CICS verwendet die Werte der APPLID der Region und den JVMSERVER-Ressourcennamen, um eindeutige zFS -Datei-und -Verzeichnisnamen zu erstellen. Einige der zulässigen Zeichen haben in der UNIX System Services-Shell eine besondere Bedeutung. Beispielsweise steht das Dollarzeichen ($) für den Beginn eines Namens einer Umgebungsvariablen. Einige dieser Zeichen können zu einem Exception im Equinox-OSGi-Framework führen und den Start des JVM-Servers verhindern. Vermeiden Sie die Verwendung nicht alphanumerischer Zeichen in der Regions-APPLID und
im Namen des JVM-Servers. Wenn Sie diese Zeichen verwenden, müssen Sie möglicherweise den umgekehrten Schrägstrich (\) als Escapezeichen in der UNIX System Services-Shell verwenden. Dies wäre beispielsweise der Fall, wenn Sie Ihren JVM-Server MY$JVMS genannt haben und die JVM-Systemausgabedatei lesen wollen:
cat CICSPRD.MY\$JVMS.D20140319.T124122.dfhjvmout
Liberty JVM-Server kann nicht gestartet werden
- Wenn Sie einen Liberty-JVM-Server nicht starten können, überprüfen Sie, ob Ihre Konfiguration korrekt ist. Weitere Informationen hierzu finden Sie unter Liberty-JVM-Server konfigurieren . Verwenden Sie die Nachrichten im CICS -Systemprotokoll und die Liberty-Datei messages.log , die sich hinter WLP_OUTPUT_DIR befindet, um die Ursache des Problems zu ermitteln.
- Überprüfen Sie, ob für die JVM-Eigenschaft -Dfile.encoding im JVM-Profil entweder ISO-8859-1 oder UTF-8 angegeben ist. Dies sind die beiden Codepages, die von Liberty unterstützt werden. Wenn Sie einen anderen Wert festlegen, wird der JVM-Server nicht gestartet.
Der lokale Liberty JVM-Server kann keine Verbindung mit dem entfernten Liberty JVM-Server für JCICSX herstellen, wenn SSL aktiviert ist (SRVE0777E)
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
- Erläuterung
- Dieser Fehler wird zurückgegeben, wenn für den Liberty JVM-Server, der unter CICS® läuft, kein Hostname angegeben ist. Wenn kein Hostname angegeben ist, wird der Hostname auf dem entfernten Liberty-Server standardmäßig auf
localhostgesetzt. Der Server erwartet jedoch den Hostnamen der fernen CICS -Region, in diesem Fallremotejcicsxserver.com. Dies ist der korrekte Hostname, den Ihr lokaler Liberty-Server über das Zertifikat an den fernen Liberty-Server übergeben haben sollte, aber stattdessen wurdelocalhostübergeben. - Benutzeraktion
- Suchen Sie zur Identifizierung des Problems den aktuellen Hostnamen, der in den Zertifikaten des fernen Liberty-JVM-Servers registriert ist, auf eine der folgenden Arten:
- Verwenden Sie den Befehl OpenSSL , um die Zertifikate des fernen Liberty-JVM-Servers anzuzeigen.
Die Ausgabe könnte wie folgt aussehen:$ openssl s_client -showcerts -connect remotejcicsxserver.com:portNo
Der WertCONNECTED(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:1CN, der im Header des Ergebnisses zurückgegeben wird, ist der Zertifikatsname und der Hostname (localhost) auf dem Server. - So verwenden Sie das Java-Dienstprogramm 'keytool':
- Navigieren Sie zum Ordner des Keystores auf dem fernen Liberty-Server unter {server.config.dir}/resources/security.
- Wenn der lokale Liberty-Server 19.0.0.3 oder höher ist, was die Mindestversion ist, die erforderlich ist, um das clientseitige Tooling der Remote-JCICSX-Entwicklung zu verwenden, und wenn die Autokonfiguration für den Remote-Liberty-Server zur Verwendung von SSL aktiviert ist, hat der Remote-Liberty-Server einen Schlüsselspeicher mit Standardwerten erstellt. In diesem Fall verwenden Sie diesen Befehl, um die im automatisch erstellten Java-Keystore gespeicherten Zertifikate anzuzeigen:
Ersetzen Sie andernfallskeytool -list -keystore key.p12 -storepass defaultPassword -storetype PKCS12 -vstorepassundstoretypeentsprechend Ihrer angepassten Konfiguration durch Werte.Möglicherweise erhalten Sie eine Ausgabe wie die folgende, in derlocalhostals Hostname angezeigt wird: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]]
- Verwenden Sie den Befehl OpenSSL , um die Zertifikate des fernen Liberty-JVM-Servers anzuzeigen.
Beim Versuch, auf eine geschützte Webanwendung in einem CICS Liberty-JVM-Server zuzugreifen, kann ein Benutzer nicht authentifiziert werden
ICH420I PROGRAMM DFHSIP FROM LIBRARY hlq.SDFHAUTH CAUSED THE UMGEBUNG, UM UNKONTROLLIERT ZU WERDEN BPXP014I ENVIRONMENT MUST BE CONTROLLED FOR DAEMON (BPX.DAEMON) PROCESSING.Die Liberty-Datei messages.log enthält die folgende Nachricht:
CWWKS1100A: Authentication did not succeed for user ID user. An invalid user ID or password was specified.
Die Sicherheitsimplementierung des CICS Liberty JVM-Servers verwendet den Liberty-Angel-Prozess, um autorisierte Sicherheitsprüfungen durchzuführen. Wenn Liberty keine Verbindung zum Angel-Prozess herstellen kann, erfolgt ein Failover auf die UNIX System Services-Sicherheit, die erfordert, dass alle Member in den STEPLIB-und DFHRPL-Verkettungen programmgesteuert sind.
Ein Benutzer mit Benutzer-ID und Kennwort kann nicht authentifiziert werden. Bei dem Versuch, auf eine geschützte Webanwendung in einem CICS Liberty JVM-Server zuzugreifen, kann nicht auf APPL-ID zugegriffen werden.
com.ibm.ws.security.saf.SAFServiceResult E CWWKS2909E: Ein SAF-Authentifizierungs-oder Berechtigungsversuch wurde zurückgewiesen, weil der Server ist nicht berechtigt, auf die folgende SAF-Ressource zuzugreifen: APPL-ID APPL-ID. Interner Fehlercode 0x03008108.
Die CICS Liberty JVM-Serversicherheit erfordert Zugriff auf SAF-Sicherheitsprofile in den Klassen APPL und SERVER. Wenn kein Zugriff erteilt wird, kann Liberty die Benutzer-ID und das Kennwort nicht authentifizieren. Details zur Konfiguration finden Sie unter Benutzer für die Ausführung von CICS Liberty-Webanwendungen authentifizieren.
Webanwendung ist nicht verfügbar, nachdem sie im Verzeichnis dropins implementiert wurde
Wenn Sie eine CWWK0221E fehlermeldung in dfhjvmerr erhalten, überprüfen Sie, ob Sie im JVM-Profil und in server.xml die richtigen Werte für den Hostnamen und die Portnummer eingestellt haben. Möglicherweise wird der Port von einem anderen Prozess verwendet und die gemeinsame Portnutzung ist inaktiviert. Der Hostname kann möglicherweise nicht vom Client aufgelöst werden.
CICS -CPU-Auslastung erhöht, nachdem ein Liberty-JVM-Server aktiviert wurde
Liberty kann so konfiguriert werden, dass regelmäßig nach Updates für die Konfiguration und die installierten Anwendungen gesucht wird. Dazu werden die Elemente <config> und <applicationMonitor> in server.xml verwendet. Wenn die Konfigurationsabfragerate oder das Anwendungsüberwachungsintervall mit einer zu großen Häufigkeit definiert wird, kann dies zu einer zu hohen CPU-Auslastung und Ein-/Ausgabe führen.
Für < config> können Sie die Häufigkeit mit dem Attribut monitorInterval verringern. Setzen Sie das Attribut updateTrigger nicht auf "disabled", da CICS erfordert, dass Liberty Konfigurationsänderungen innerhalb weniger Sekunden berücksichtigt.
Für <applicationMonitor> können Sie die Häufigkeit mit dem pollingRate-Attribut reduzieren, das updateTrigger-Attribut auf mbean ändern oder es deaktivieren.
Weitere Informationen finden Sie unter Steuerung dynamischer Aktualisierungen.
Anwendung nicht verfügbar
Sie kopieren eine WAR-Datei in das Verzeichnis dropins, aber Ihre Anwendung ist nicht verfügbar. Prüfen Sie die Liberty-Datei messages.log auf Fehlernachrichten. Wenn Sie die Fehlernachricht CWWKZ0013E empfangen, wird im Liberty-JVM-Server bereits eine Webanwendung mit demselben Namen ausgeführt. Um dieses Problem zu beheben, ändern Sie den Namen der Webanwendung und nehmen Sie die Implementierung im Verzeichnis dropins vor.
Webanwendung gibtContext Root Not Found
Sie haben Ihren Liberty-JVM-Server aktiviert und Ihre Webanwendung bereitgestellt. Der JVM-Server meldet, dass er aktiviert ist, aber wenn Sie auf Ihre Anwendung zugreifen, erhalten SieContext Root Not Found. Der Zugriff auf die Webanwendung führt kurze Zeit später zum Erfolg. Dies ist ein bekanntes Zeitfenster, in dem der Server meldet, dass er aktiviert wurde, während Anwendungen im Hintergrund noch gestartet werden. Diese Situation tritt wahrscheinlich eher in einer Umgebung mit mehreren Regionen auf, die Sysplex Distributor oder die gemeinsame Portnutzung verwendet. Diese Bedingung tritt wahrscheinlich auch auf, wenn Sie die Automatisierung verwenden, um auf die Anwendung zuzugreifen, die über dieenabled. Wenn Sie Sysplex Distributor oder die gemeinsame Portnutzung verwenden, kann die TCP/IP-Automationsfunktion verwendet werden, um einen Port zu inaktivieren und ihn dann wieder zu aktivieren, wenn die Webanwendung verfügbar ist. Problemumgehungen können darin bestehen, dass in Automationsscripts eine Unterbrechung eingebaut wird oder dass die Anwendung ein Flag an eine bekannte Position schreibt, wenn sie verfügbar ist.
Webanwendung fordert keine Authentifizierung an
Sie haben die Sicherheitsfunktionalität konfiguriert, aber die Webanwendung fordert keine Authentifizierung an.
- Obwohl Sie die CICS -Sicherheit für Webanwendungen konfigurieren können, verwendet die Webanwendung die Sicherheit nur, wenn sie eine Sicherheitseinschränkung in der WAR-Datei enthält. Überprüfen Sie, ob vom Anwendungsentwickler in der Datei web.xml im dynamischen Webprojekteine Sicherheitseinschränkung definiert wurde.
- Überprüfen Sie, ob die Datei server.xml die richtigen Sicherheitsinformationen enthält. Alle Konfigurationsfehler werden in der Datei dfhjvmerr mit nützlichen Informationen aufgezeichnet. Wenn Sie CICS -Sicherheit verwenden, überprüfen Sie, ob die Funktion cicsts:security-1.0 in server.xmlangegeben ist. Wenn die CICS -Sicherheit inaktiviert ist, überprüfen Sie, ob Sie eine Basisbenutzerregistry für die Authentifizierung von Anwendungsbenutzern angegeben haben.
- Überprüfen Sie, ob die Datei server.xml entweder für <safAuthorization> zur Nutzung von EJBRoles oder für eine lokale Rollenzuordnung in einem Element <application-bnd> konfiguriert ist. Das Element <application-bnd> befindet sich innerhalb des Elements <application> in der Datei server.xml oder installedApps.xml. Die von CICS für eine lokale Sicherheitsrollenzuordnung hinzugefügte Standardsicherheitsrolle ist cicsAllAuthenticated.
Webanwendung gibt den HTTP-Fehlercode 403 zurück
Die Webanwendung gibt den HTTP-Fehlercode 403 im Web-Browser zurück, weil Ihre Benutzer-ID widerrufen wurde oder weil Sie nicht berechtigt sind, die Anwendungstransaktion auszuführen.
- Überprüfen Sie das CICS -Nachrichtenprotokoll auf die Fehlernachricht ICH408I , um festzustellen, welcher Typ von Berechtigungsfehler aufgetreten ist. Um das Problem zu beheben, stellen Sie sicher, dass die Benutzer-ID ein gültiges Kennwort hat und zur Ausführung der Transaktion berechtigt ist.
- Wenn Sie die Nachricht ICH408I nicht finden, prüfen Sie die Datei messages.log.
- Suchen Sie nach folgender Nachricht:
CWWKS3005E: A configuration exception has occurred. Es ist kein UserRegistry-Implementierungsservice verfügbar. Ensure that you have a user registry configured.
Sie müssen sicherstellen, dass Sie eine SAF-Registry in der Datei server.xml konfiguriert haben. Weitere Informationen finden Sie unter server.xml. - Suchen Sie nach folgender Nachricht, wenn die verteilte Identität verwendet wird:
CWWKS9104A: Autorisierung fehlgeschlagen für Benutzer alidist:defaultRealm beim Aufruf von LdapTests unter /basic. The user is not granted access to any of the required roles: [testing].
Wenn die Datei server.xml für <safAuthorization> konfiguriert ist oder die Funktioncicsts:distributedIdentity-1.0enthält, stellen Sie sicher, dass die richtigen EJBRoles für die Benutzer-ID RACMAPped definiert wurden. Weitere Informationen finden Sie unter SAF-Berechtigung mit EJBROLE konfigurieren . Wenn die Datei server.xml nicht für <safAuthorization> konfiguriert ist und die Funktioncicsts:distributedIdentity-1.0nicht enthält, stellen Sie sicher, dass die richtige verteilte Benutzer-ID so definiert wurde, dass sie auf die entsprechende Rolle in einem Element <application-bnd> zugreifen kann. Weitere Informationen finden Sie unter Benutzer zur Ausführung von CICS Liberty-Webanwendungen berechtigen.
- Suchen Sie nach folgender Nachricht:
- Wenn die Anwendung eine Ausnahmebedingung für die Klasse com.ibm.ws.webcontainer.util.Base64Decode zurückgibt, überprüfen Sie die Datei dfhjvmerr auf Fehlernachrichten. Wenn dort Konfigurationsfehlernachrichten wie z. B. CWWKS4106E oder CWWKS4000E enthalten sind, versucht der Server, auf Konfigurationsdateien zuzugreifen, die in einer anderen Codierung erstellt wurden. Diese Art von Konfigurationsfehler kann auftreten, wenn Sie den Wert file.encoding ändern und den JVM-Server erneut starten. Um das Problem zu beheben, können Sie entweder zur vorherigen Codierung zurückwechseln und den JVM-Server erneut starten oder Sie können die Konfigurationsdateien löschen. Der JVM-Server erstellt die Dateien in der richtigen Dateicodierung, wenn er gestartet wird.
Webanwendung gibt den HTTP-Fehlercode 500 zurück
Die Webanwendung gibt den HTTP-Fehlercode 500 im Web-Browser zurück. Wenn Sie den HTTP-Fehler 500 erhalten, ist ein Konfigurationsfehler aufgetreten.
- Überprüfen Sie das CICS -Nachrichtenprotokoll auf DFHSJ -Nachrichten, die möglicherweise weitere Informationen zur spezifischen Fehlerursache enthalten.
- Wenn Sie eine URIMAP verwenden, um Anwendungsanforderungen für eine bestimmte Transaktion auszuführen, stellen Sie sicher, dass die URIMAP die korrekte Transaktions-ID angibt.
- Stellen Sie sicher, dass die Attribute SCHEME und USAGE korrekt definiert sind. Das Attribut SCHEME muss der Anwendungsanforderung entsprechen - entweder HTTP oder HTTPS. Für das Attribut USAGE muss JVMSERVER festgelegt werden.
Webanwendung gibt den HTTP-Fehlercode 503 zurück
Die Webanwendung gibt den HTTP-Fehlercode 503 im Web-Browser zurück. Wenn Sie den HTTP-Fehler 503 erhalten, ist die Anwendung nicht verfügbar.
- Weitere Informationen finden Sie im CICS -Nachrichtenprotokoll für DFHSJ -Nachrichten.
- Stellen Sie sicher, dass die TRANSACTION- und URIMAP-Ressourcen für die Anwendung aktiviert sind. Wenn diese Ressourcen als Teil der Anwendung in einem CICS -Bundle gepackt werden, überprüfen Sie den Status der BUNDLE-Ressource.
- Die Anforderung wurde möglicherweise gelöscht, bevor sie erfolgreich ausgeführt wurde. Die Fehlernachrichten im Protokoll beschreiben, warum die Anforderung gelöscht wurde.
Zugriff auf Ihre Webanwendung mithilfe der verteilten Identitätszuordnung nicht möglich
FFDC1015I: An FFDC Incident has been created: "com.ibm.ws.security.saf.SAFException:
CWWKS2905E: -SAF-Service IRRSIA00_CREATE war nicht erfolgreich, weil Benutzer null wurde in der SAF-Registry nicht gefunden. SAF return code 0x00000008. RACF return code 0x00000008. RACF reason code 0x00000010.
FFDC1015I: An FFDC Incident has been created: "javax.security.auth.login.CredentialException: konnte SAF-Anmeldeinformationen nicht erstellen für < distid> DistIdÜberprüfen Sie das CICS -Nachrichtenprotokoll auf die Fehlernachricht ICH408I , um festzustellen, welcher Typ von Berechtigungsfehler aufgetreten ist. Wenn dies der Fall istICH408I USER(<userid>) GROUP(TSOUSER ) NAME(<name>) DISTRIBUTED IDENTITY IS NOT DEFINED: 776 cn= <distid> DistId,ou=users,dc=domain,dc=com LdapRegistrySie müssen die entsprechende RACMAP für die verteilte Identität erstellen, die für den Zugriff auf die Anwendung verwendet wird. Der Befehl RACMAP QUERY unterstützt das Debugging. Beispiel:
RACMAP QUERY USERDIDFILTER(NAME('ou=users,dc=domain,dc=com')) REGISTRY(NAME('LdapRegistry'))Webanwendung gibt Ausnahmebedingungen zurück
Die Webanwendung gibt Ausnahmebedingungen im Web-Browser zurück - z. B. eine Ausnahmebedingung für die Klasse com.ibm.ws.webcontainer.util.Base64Decode.
- Überprüfen Sie die Datei dfhjvmerr auf Fehlernachrichten.
- Wenn dort Konfigurationsfehlernachrichten wie z. B. CWWKS4106E oder CWWKS4000E enthalten sind, versucht der Server, auf Konfigurationsdateien zuzugreifen, die in einer anderen Codierung erstellt wurden. Diese Art von Konfigurationsfehler kann auftreten, wenn Sie den Wert file.encoding ändern und den JVM-Server erneut starten. Um das Problem zu beheben, können Sie entweder zur vorherigen Codierung zurückwechseln und den JVM-Server erneut starten oder Sie können die Konfigurationsdateien löschen. Der JVM-Server erstellt die Dateien in der richtigen Dateicodierung, wenn er gestartet wird.
Fehlernachricht WTRN0078EAn attempt by the transaction manager to call start on a transactional resource has resulted in an error.
Der Fehlercode warXAER_PROTO. Wenn dieser Fehler auftritt, ist das wahrscheinlichste Szenario, dass Sie die JTA-Standardintegration in Ihrem Liberty-Server haben und Ihre Anwendung eine Bean-Methode verwendet, die als REQUIRES_NEWdeklariert ist. Die Verwendung von REQUIRES_NEW in einer XA-Transaktion wird von CICSnicht unterstützt: @Transactional(value = TxType.REQUIRES_NEW) void yourMethod{} Sie müssen die Anwendung ändern, bevor sie ausgeführt wird.
Fehlernachricht DFHSJ1004 in MSGUSER, aber keine entsprechende STDERR-Ausnahmebedingung
Ein Symptom dafür, dass nicht genügend Speicherplatz im Dateisystem zFS verfügbar ist, könnte ein DFHSJ1004 ohne entsprechende STDERR-Ausnahme sein. Die Nachricht wird gesendet, weil nicht genügend Speicherplatz vorhanden ist, aber es gibt keine Ausnahme in STDERR, da kein Speicherplatz zum Schreiben einer Nachricht in die Dateien vorhanden ist.
Sie können die Größe Ihres Dateisystems planen und überwachen, indem Sie die Techniken verwenden, die in Verwalten von Dateisystemen in z/OS UNIX System Services Planung beschrieben sind.
Mit dem Script productInfo die Integrität von Liberty überprüfen
Sie können die Integrität der Liberty-Installation überprüfen, nachdem Sie CICS installiert oder einen Dienst angewendet haben, indem Sie das Liberty-Skript productInfo verwenden.
- Wechseln Sie in der UNIX System Services-Shell zum Verzeichnis WORK_DIR, wie im JVM-Profil angegeben. Zum Beispiel mit dem Standard-Arbeitsverzeichnis:
APPLID ist der Wert der CICS -Region. APPLID und JVMSERVER sind die Namen der JVMSERVER-Ressource.cd WORK_DIR/APPLID/JVMSERVER - Führen Sie
productInfomit dem Skriptwlpenvaus und geben Sie die Validierungsoption an.
Es sollten keine Fehler gemeldet werden../wlpenv productInfo validate
Weitere Informationen über das Skript Liberty productInfo finden Sie unter productInfo und Überprüfen der Integrität der Liberty-Profilinstallation. Weitere Informationen über das Skript wlpenv finden Sie unter Verwaltung von CICS Liberty mit dem Skript wlpenv und den Befehlszeilen-Dienstprogrammen WebSphere Application Server Liberty.
Erstellen eines Liberty-Server-Dumps mit dem Befehl server dump
Sie können den Befehl server dump verwenden, um Statusinformationen für einen Liberty-Server zu erfassen.
- Wechseln Sie in der UNIX System Services-Shell zum Verzeichnis WORK_DIR, wie im JVM-Profil angegeben. Zum Beispiel mit dem Standard-Arbeitsverzeichnis:
APPLID ist der Wert der CICS -Region. APPLID und JVMSERVER sind die Namen der JVMSERVER-Ressource.cd WORK_DIR/APPLID/JVMSERVER - Führen Sie
server dumpmit dem Skriptwlpenvaus, zum Beispiel:
Sie geben den Servernamen nicht an, da er vom Skript./wlpenv server dump --archive=package_file_name.dump.pax --include=heapwlpenvauf den Wert gesetzt wird, der beim letzten Aktivieren des JVM-Servers festgelegt wurde.
Weitere Informationen über den Befehl Liberty server dump finden Sie unter Erstellen eines Liberty-Server-Dumps über die Befehlszeile. Weitere Informationen über das Skript wlpenv finden Sie unter Verwaltung von CICS Liberty mit dem Skript wlpenv und den Befehlszeilen-Dienstprogrammen WebSphere Application Server Liberty.
Fehlerbehebung beim Aufrufen einer Enterprise Java-Anwendung
- Befehl EXEC CICS LINK schlägt mit der Antwort "RESP = PGMIDERR, RESP2 = 1" fehl
- Überprüfen Sie die Anwendung, um festzustellen, ob die richtigen Artefakte generiert
wurden.
- Stellen Sie sicher, dass die Annotationsverarbeitung für das Quellenprojekt aktiviert
ist.
Abb. 1. Überprüfen, ob die Annotationsverarbeitung aktiviert ist 
- Überprüfen Sie, ob eine
@CICSProgramzu einer Java-Methode hinzugefügt wurde und ob sie ordnungsgemäß kompiliert wurde. - Wenn Ihr Projekt eine
web.xmlenthält, überprüfen Sie die Version der angegebenen Servlet-Spezifikation. Es muss mindestens Version 2.5sein. - Exportieren Sie die Anwendung und suchen Sie nach generiertem Code im Paket
com.ibm.cics.server.invocation.proxy. Öffnen Sie beispielsweise auf einer Workstation die WAR-oder EAR-Datei mit einem Archivmanager oder verwenden Sie unter z/OS den Befehljar -tf, um den Inhalt der WAR-bzw. EAR-Datei zu untersuchen. Wenn kein Code generiert wurde, überprüfen Sie, ob Sie über die neueste Version von CICS Explorer, CICS Build Toolkit oder den Annotationsprozessor verfügen.
- Stellen Sie sicher, dass die Annotationsverarbeitung für das Quellenprojekt aktiviert
ist.
- Überprüfen Sie das CICS -Nachrichtenprotokoll auf Nachrichten ähnlich den folgenden:
- DFHSJ1204: A linkable service has been registered for class examples.TSQ.ClassOne method anotherMethod with program name LINKJCIN in JVMSERVER LINKJVM
- DFHPG0101: Resource definition for LINKJCIN has been added.
- Stellen Sie sicher, dass Sie über einen Liberty-JVM-Server verfügen, der sich im Status 'aktiviert' befindet.
- Stellen Sie sicher, dass Sie die Funktion
cicsts:link-1.0in Ihrer Dateiserver.xmlkonfiguriert haben. Wenn sie konfiguriert ist, wird eine Nachricht angezeigt.J2CA7001I: Resource adapter com.ibm.cics.wlp.program.link.connectorinstalledinmessages.log. - Wenn Sie Ihre Anwendung mit einem CICS -Bundle implementieren, müssen Sie sicherstellen, dass das Bundle installiert und aktiviert ist.
- Stellen Sie sicher, dass die Anwendung in Liberty installiert ist.
Wenn dies der Fall ist, finden Sie in der Datei
messages.logeine Nachricht, die den Namen der Anwendung des Benutzers enthält. Beispiel:CWWKZ0001I: Application com.ibm.cics.test.javalink started.
- Stellen Sie sicher, dass die Version im Anwendungsdeskriptor unterstützt wird.
- WAR-Dateien
- Der Deskriptor web.xml benötigt eine
web-app-Version von mindestens 3.0. - EJB-JAR-Dateien
- Der Deskriptor ejb-jar.xml benötigt eine
ejb-jar-Version von mindestens 3.0.
EXEC CICS LINKzu erleichtern.
- Überprüfen Sie die Anwendung, um festzustellen, ob die richtigen Artefakte generiert
wurden.
- Befehl EXEC CICS LINK schlägt mit Antwort "RESP = PGMIDERR, RESP = 27" fehl
- Dies weist darauf hin, dass CICS versucht hat, eine Enterprise Java-Anwendung in Liberty aufzurufen, aber eine Zeitlimitüberschreitung aufgetreten ist, bevor die Anwendung erfolgreich war. Die häufigste Ursache für dieses Problem ist, dass im JVM-Server kein Thread zur Verfügung steht. Um dies zu beheben, erhöhen Sie das Threadlimit des JVM-Servers oder erhöhen Sie den Wert von WLP_LINK_TIMEOUT, damit die Tasks beim Anfordern von Threads länger warten. Weitere Informationen finden Sie unter WLP_LINK_TIMEOUT in Im JVM-Profil verwendete Symbole und Threadbegrenzung von JVM-Servern verwalten.
- JCICS API-Aufruf löst CICSRuntimeException aus
com.ibm.cics.server.CicsRuntimeException: DTCTSQ_READNEXT: No JCICS context is associated with the current thread.Die wahrscheinlichste Ursache für diese Ausnahmebedingung ist, dass Sie ein JCICS-Objekt in einem Thread erstellt und dann versucht haben, seine Instanzdefinitionsmethoden aus einem anderen Thread aufzurufen. Ändern Sie Ihre Anwendung, sodass das JCICS-Objekt in demselben Thread erstellt wird, der die zugehörigen Methoden aufruft.
Muster, die dazu führen, dass ein Objekt versehentlich in einem anderen Thread verwendet werden sind z. B.:- Erstellen eines JCICS-Objekts im Konstruktor einer Schnittstelle
java.lang.Runnableoderjava.util.concurrent.Callable. Erstellen Sie das Objekt stattdessen in der Methoderun(). - JCICS-Objekte wurden statischen Variablen zugeordnet. Verwenden Sie stattdessen Instanzvariablen.
- Die Übergabe eines JCICS-Objekts als Parameter an eine Methode, die von einem anderen Thread ausgeführt wird. Der Thread sollte das JCICS-Objekt selbst erstellen.
- Erstellen eines JCICS-Objekts im Konstruktor einer Schnittstelle
- Abnormale Transaktionsbeendigungen AJ05 beim Aufrufen einer Enterprise Java-Anwendung
- Die folgenden Ausnahmebedingungen werden in der Datei dfhvjmerr protokolliert:
Die Verwendung von JTA mit Link zu Liberty wird nur unterstützt, wenn die CICS -JTA-Integration inaktiviert ist. Konfigurieren Sie dies mithilfe voncom.ibm.cics.server.InvalidRequestException: CICS INVREQ Condition(RESP=INVREQ, RESP2=200) java.lang.RuntimeException: javax.transaction.RollbackException: XAResource start association error:XAER_PROTO<cicsts_jta integration="false"/>in server.xml.
Überläufe des Java-Stacks
Die Java-Fehlernachricht.java.lang.StackOverflowError: operating system stack overflowwird normalerweise angezeigt, wenn der Thread die anfängliche Stackgröße für Betriebssystemthreads überschreitet. Die Größe wird durch die JVM-Option -Xmso im JVM-Profil festgelegt. Dieser Wert muss möglicherweise erhöht werden, wenn Java Platform Debugger Architecture (JPDA) aktiviert ist.
Unerwartete ICH408I -Nachrichten im Protokoll
Dies sind Standardprüfnachrichten. Weitere Informationen finden Sie unter Classes that control auditing für z/OS UNIX System Services in z/OS Security Server RACF Auditor's Guide.
SETROPTS LOGOPTIONS(NEVER(IPCOBJ))SETROPTS LOGOPTION(DEFAULT(IPCOBJ))
IPCOBJ ist nur für die Prüfung von z/OS UNIX Sicherheitsereignissen definiert, es wird nicht für die Berechtigungsprüfung verwendet.
Zeitlimit für Liberty Bundlepart-Treffer
Die von bundlepart < symbolischer_name> installierte Anwendung wurde nicht gestartet. nach 30000 Millisekunden. Entweder liegt ein Problem mit der Anwendung vor oder das System ist ausgelastet. Dieses Zeitlimit kann über die Systemeigenschaft 'com.ibm.cics.jvmserver.wlp.bundlepart.timeout= n' gesteuert werden Dabei steht n für den Wert der Wartezeit in Millisekunden.Suchen Sie in der Liberty-
messages.log nach CWWKZ-Nachrichten. CWWKZ-Nachrichten enthalten möglicherweise Informationen dazu, warum die Anwendung nicht gestartet wurde. Wenn es keine CWWKZ-Nachrichten für die Anwendung gibt, stellen Sie sicher, dass das Element <config> so konfiguriert ist, dass es Polling verwendet und ein Überwachungsintervall hat, das z. B. kleiner als der Timeout ist:<config updateTrigger="polled" monitorInterval="10s" />Wenn das Überwachungsintervall kleiner als das Zeitlimit für bundlepart ist, müssen Sie den Zeitlimitwert erhöhen. Der Zeitlimitwert wird durch die JVM-Systemeigenschaft com.ibm.cics.jvmserver.wlp.bundlepart.timeoutgesteuert.CICS Explorer kann ein Bundle nicht exportieren oder ein Projekt mit einem Fehler findenUnable to find a built {project_type} with symbolic name {symbolic_name}.
Beim Hinzufügen eines Projekts zu Ihrem CICS -Bundle werden möglicherweise die folgenden Gültigkeitsfehler angezeigt:
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.
{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.- Warum ist das passiert?
- Für ein Projekt im CICS Bundle findet CICS Explorer® entweder das entsprechende Projekt in Ihrem Arbeitsbereich oder prüft, ob eine entsprechende erstellte Binärdatei mit dem passenden symbolischen Namen existiert, so dass das Projekt mit dem Bundle exportiert werden kann. Einer der vorherigen Fehler wird zurückgegeben, wenn CICS Explorer ein solches erstelltes Projekt nicht finden kann.
- Wie kann der Fehler behoben werden?
Für ein OSGi-Anwendungsprojekt (EBA) befolgen Sie die Anweisungen in den Fehlermeldungen, um entweder das IBM® CICS SDK für Enterprise Java (Liberty), das Liberty Developer Tools (LDT) oder beides zu installieren, um das Projekt zu validieren und zu erstellen, oder fügen Sie das entsprechende erstellte Projekt zum Stammverzeichnis Ihres CICS Bundles hinzu.
Befolgen Sie für ein Enterprise Application Project (EAR) oder ein Dynamic Web Project (WAR) die Anweisungen in den Fehlernachrichten, um IBM CICS SDK for Enterprise Java (Liberty)zu installieren, das entsprechende Enterprise Application Project oder Dynamic Web Project in Ihren Arbeitsbereich zu importieren oder das erstellte EAR-oder WAR-Projekt dem Stammverzeichnis Ihres CICS -Bundleprojekts hinzuzufügen.
Installation der EBA-Anwendung schlägt mit CWWKZ0005E -oder CWWKZ0021E -Nachrichten fehl
Wenn Liberty eine EBA-Datei nicht installieren kann, erzeugt es entweder dieCWWKZ0005EoderCWWKZ0021ENachrichten. Dies kann auftreten, wenn das Feature wab-1.0 nicht installiert ist. Stellen Sie sicher, dass das Feature wab-1.0 ordnungsgemäß installiert ist.
Aufgrund der Stabilisierung der OSGi-Unterstützung von Liberty sind WABs nicht mit Java EE 8 oder Jakarta EE 8 und höheren Features kompatibel. Die Funktion wab-1.0 kann automatisch deinstalliert werden, wenn Java EE 8 oder Jakarta EE 8 und höhere Funktionen auf demselben Liberty-Server installiert sind, wodurch alle EBAs vom Server entfernt werden. Mit der JVM-Profileigenschaft com.ibm.cics.jvmserver.wlp.wab kann gesteuert werden, ob das Feature wab-1.0 zu server.xmlhinzugefügt wird.
Fehlernachricht CWWKC2262E
The server is unable to process the 4.0 version and the http://xmlns.jcp.org/xml/ns/javaee namespace
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")angegeben haben, während Sie in Maven den Bereich 'provided' verwendet haben. Beispiel:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
Fehlermeldung: java.lang.UnsatisfiedLinkError: /usr/lpp/db2v13/jdbc/lib/libdb2jcct2zos4_64.so (Library is already loaded in another ClassLoader ): ERRORCODE=-4472, SQLSTATE=null
Dieser Fehler kann auftreten, wenn im JVM-Profil die Eigenschaft com.ibm.cics.jvmserver.wlp.jdbc.driver.location festgelegt ist und eine zusätzliche Bibliotheksdefinition für Db2® in server.xmlvorhanden ist. Der Fehler ist auf zwei Bibliotheken zurückzuführen, die versuchen, die native Db2 -DLL zu laden. Stellen Sie sicher, dass nur eine Bibliothek für die Db2 -Bibliotheken vorhanden ist und alle dataSource -Definitionen auf diese eine Bibliotheksdefinition verweisen.
DFHSJ1206 mit insert PROXY_CLASS_NOT_FOUND, wenn LINKing zu einem @CICSProgram in einer Umgebung mit Jakarta EE 9 oder höher
Um einen LINK zu @CICSProgram -Annotationsmethoden in Spring Boot - und CDI-Anwendungen herzustellen, die Jakarta EE 9 oder höher verwenden, müssen diese Anwendungen mit dem CICS -Annotation-Prozessor ab Version CICS 6.2 oder APAR PH59389 erstellt werden. Andernfalls schlägt ein LINK mit einer INVREQ-Antwort und RESP2 von 48 fehl. JVMSERVER stderr zeigt eine com.ibm.cics.wlp.link.LinkableInvocationException an und die Nachricht DFHSJ1206 wird mit Einfügung ausgegeben.PROXY_CLASS_NOT_FOUND.