Ein Gastartikel von Michael Kutswa.
Nachdem wir unsere Automic AE von V10 auf V12 upgegradet hatten, trat bei uns ein Fehler auf: Der Java-based Work Process (JWP) konnte nicht den Suchindex erstellen, weil es ein Objekt mit fehlerhafter XML Dokumentation gab.
Leider half uns die Fehlernachricht im JWP-Log nicht weiter. Sie gab uns keine Informationen darüber, welches Objekt für den Absturz des Index Builder verantwortlich war.
Deshalb entschlossen wir uns, ein Remote Debugging durchzuführen. Wir benutzten dafür das Eclipse Framework.
Vielleicht ist das auch für Sie interessant, deshalb habe ich diese kleine Beschreibung davon erstellt, mit welchen Schritten wir das Problem gelöst haben.
Schritt 1: JWP für das Remote Debugging vorbereiten
Hierfür mussten wir nur einige Parameter für den Start Command im ServiceManager benutzen. Unser Command lautete:
C:\Automic\External.Resources\JDK\jdk1.8.0_144\bin\java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Xrs -Xmx512M -jar ucsrvjp.jar -IC:\Automic\Automation.Platform\AutomationEngine\bin\ucsrv.ini -svc%port%
Zusätzlich zu unserem üblichen Command benutzten wir also die folgenden Parameter:
- -Xdebug
- -Xnoagent
- -Djava.comiler=NONE
- -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
Der letzte der Parameter braucht einen freien Port als Adresse.
Schritt 2: Debugging starten
Jetzt hielten wir die laufende JWP an und starteten eine neue, um mit dem Remote Debugging loslegen zu können.
In Eclipse erstellten wir eine Debug Configuration für die JWP und starteten das Debugging.
Wir öffneten die Debugging Perspektive und erstellten einen Breakpoint im Moment des Absturzes. Die Bezeichnung der Exception kannten wir aus der Fehlermeldung, deshalb war es einfach, einen Java exception breakpoint zu erstellen.
Jetzt mussten wir nur noch auf die Exception warten, um die objectID herauszufinden.
Schritt 3: Den Übeltäter beseitigen
Durch die objectID konnten wir dann leicht das Objekt in der Datenbank finden. Wir benutzten dafür folgendes SQL Script:
select * from OH where OH_IDNR = 8076260;
Anstatt es zu reparieren haben wir es einfach gelöscht und neu erstellt. Danach funktionierte alles wieder wunderbar und der Search Index konnte erstellt werden.
Beruhigt konnten wir den Debugger vom System trennen, JWP anhalten und wieder normal starten.