Ich habe ein Eltern-Portlet, das den Liferay Service Builder für die Persistenz verwendet. Die untergeordneten Portlets verwenden dieselben Entitäten für die Persistenz. Also habe ich das Eltern-Portlet als Abhängigkeit in untergeordneten Portlet mit Liferay-Plugin-Eigenschaften hinzugefügt. Alles ist in Ordnung, wenn ich einen einzigen Primärschlüssel für Entitäten habe. Aber im Falle einer zusammengesetzten Primärschlüssel-Entität tritt eine Klassenausnahme auf, wenn ich eine Entität finde, die diese Entität verwendet. Ich konnte den Grund nicht finden. ist es wegen Klassenladerproblemen?Class-Cast-Ausnahme bei Verwendung des Composite-Schlüssels in Service Builder
Antwort
Das Service-JAR existiert sowohl im Eltern-Portlet als auch im Kind-Portlet, was wir in diesem Szenario nicht vermeiden können. Während das Debugging ausgeführt wird, obwohl das PK-Klassenobjekt in einem untergeordneten Portlet erstellt wird, erfolgt die Persistenz im übergeordneten Portlet mithilfe des übergeordneten Portlet-Klassenladeprogramms. Das macht das Problem.
Die Lösung besteht darin, eine Methode in localserviceImpl für die Persistenz oder das Abrufen ohne Verwendung von Composite-PK zu erstellen. Erstellen Sie mit einzelnen PK-Attributen. Erstellen Sie PK in localServiceImpl mit den Attributen und gehen Sie für fetch oder persistence.
Höchstwahrscheinlich könnten Sie diese Klassen zweimal auf Ihrem classpath
haben. Wenn Sie die Abhängigkeit über liferay-plugin-package.properties
definieren, befindet sich die jars
in WEB-INF/lib
. Vielleicht haben Sie auch die gleiche jars
versehentlich auf der globalen classpath
tomcat/lib/ext
.
Ich habe das Glas im globalen Klassenpfad nicht. Das Dienst-JAR existiert sowohl im Eltern-Portlet als auch im Kind-Portlet, was wir in diesem Szenario nicht vermeiden können. Während das Debugging ausgeführt wird, obwohl das PK-Klassenobjekt in einem untergeordneten Portlet erstellt wird, erfolgt die Persistenz im übergeordneten Portlet mithilfe des übergeordneten Portlet-Klassenladeprogramms. Das macht das Problem. – San