aVogt
Returning Creator

eigenes Modul als "isolated" - Klasse wird nicht mehr gefunden

Jump to solution

Hallo,

mit dem Update auf 2022.13 kamen einige Warnmeldungen (Legacy resource found in module  ***). Nach https://community.crownpeak.com/t5/Questions-Answers/Legacy-resource-found-in-module/td-p/57130 habe ich unser Modul umgestellt und die Meldungen kamen nicht mehr.

Die module.xml in module-isolated.xml umbenannt,  bei jeder eingebundenen  library das mode="isolated" und  name=".." ergänzt. Z.B.

<library>
<name>SAB Redaktion</name>
<resources>
<resource name="sab-redaktion5.jar" mode="isolated">lib/sab-redaktion5.jar</resource>
</resources>
</library>
<library>
<name>poi</name>
<resources>
<resource name="poi-3.9.jar" mode="isolated">lib/poi-3.9/poi-3.9.jar</resource>
</resources>
</library>

Nun habe ich bei der Ausführung eines zeitgesteuerten Auftrages (den habe ich leider nach dem Update nicht getestet, da dieser nur aller 2 Monate ausgeführt wird)) die Meldung(en) immer mal eine unterschiedliche

  • Target exception: java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller
  • Target exception: java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook

Die Klassen sind in den Libs (jars) in dem Modul mit enthalten (in einem der jars in poi-3.9).

Da das Ergebnis der Ausführung gebraucht wurde, habe ich die alte module.xml reaktiviert und die Ausführung lief durch.
Also die obigen Änderungen wieder rückgängig gemacht.

Nun stellt sich mir die Frage: 
Sollte ich unser Modul auf isolated stellen, aber wie bekomme ich es hin, dass der Auftrag die Klassen findet?
Das Weglassen von mode="isolated" bei den pio-Jars hat nicht geholfen (war auch nur ein Experiment, da man auf das Ergebnis des Auftrages wartete.

Klassen aus dem sab-redaktion5.jar werden ja auch gefunden ...

Hat jemand einen Hinweis/Tipp woran es liegen könnte?

Grüße
Andreas

0 Kudos
1 Solution

Accepted Solutions
Windmüller
Crownpeak employee

Die genannten Klassen sind nicht Teil des poi-Jars und die von FirstSpirit mitgelieferte Version ist im Isolated-Mode nicht mehr sichtbar, daher gibt es bei Verwendung der Klassen eine Exception. Abhilfe schafft hier, zusätzlich poi-ooxml ins Modul zu packen. Allerdings würde ich eine neuere Version empfehlen, da alle Versionen vor 4.1.1 Sicherheitslücken aufweisen.

Auch wenn der Komponententyp "library" das vermuten lässt, so muss nicht jedes Jar in eine eigene Library verpackt werden. Stattdessen ist es sinnvoll, mehrere Jars als Ressourcen zu definieren. Mehr Details stehen in der Dokumentation.

Zum Abschluss noch ein Hinweis zum Attribut "name": Um Versionskonflikte zu vermeiden, sollte hier der Maven-Identifier verwendet und die korrekte Version angegeben werden, also z.B.

<resource name="org.apache.poi:poi" version="5.2.3" mode="isolated">lib/poi-5.2.3.jar</resource>

 

View solution in original post

0 Kudos
2 Replies
Windmüller
Crownpeak employee

Die genannten Klassen sind nicht Teil des poi-Jars und die von FirstSpirit mitgelieferte Version ist im Isolated-Mode nicht mehr sichtbar, daher gibt es bei Verwendung der Klassen eine Exception. Abhilfe schafft hier, zusätzlich poi-ooxml ins Modul zu packen. Allerdings würde ich eine neuere Version empfehlen, da alle Versionen vor 4.1.1 Sicherheitslücken aufweisen.

Auch wenn der Komponententyp "library" das vermuten lässt, so muss nicht jedes Jar in eine eigene Library verpackt werden. Stattdessen ist es sinnvoll, mehrere Jars als Ressourcen zu definieren. Mehr Details stehen in der Dokumentation.

Zum Abschluss noch ein Hinweis zum Attribut "name": Um Versionskonflikte zu vermeiden, sollte hier der Maven-Identifier verwendet und die korrekte Version angegeben werden, also z.B.

<resource name="org.apache.poi:poi" version="5.2.3" mode="isolated">lib/poi-5.2.3.jar</resource>

 

0 Kudos

Neuste poi-Jars (und deren Abhängigen jars) verwendet.

Dann ging es.

0 Kudos