Websphere 8.0.0.11
Hibernate 4.2.21.Final
Ich habe viele Fragen über das gleiche Problem gefunden, aber keiner von ihnen hat für mich funktioniert.
Wenn ich die Anwendung in Websphere bereitstellen, funktioniert es OK.
Allerdings haben wir eine gemeinsame Bibliothek definiert, die alle Bibliotheken von Drittanbietern enthält (Spring, Hibernate, Javassist, usw.), so dass unsere WARs dünner sind.
Auf diese Weise verknüpfen wir während der Bereitstellung unsere Thin WAR mit dieser gemeinsam genutzten Websphere-Bibliothek.
Der Punkt ist, dass wenn wir die Anwendung auf diese Weise die ClassCastException Hibernate exception _$$_javassist_856 cannot be cast to javassist.util.proxy.Proxy
geworfen wird.
Ich habe die geladenen Gläser in der Websphere-Konsole überprüft und kann nur einen Java-Jar (3.18.1-GA) im Klassenpfad sehen.
Warum konnte das passieren?
UPDATE
Ich habe auch versucht PARENT_FIRST und PARENT_LAST Laden von Klassen verwenden.
UPDATE 2
Ich habe gerade herausgefunden, dass Websphere sein eigenen Javassist Glas wird geladen:
URL location = ProxyFactory.class.getProtectionDomain().getCodeSource().getLocation();
logger.info("{}", location);
Er druckt: file:/opt/IBM/WebSphere/AppServer/plugins/javassist.jar
Hallo Rafael, danke fürs Antworten. Ja, wir teilen eine Anzahl von Bibliotheken, die in einer Websphere-Bibliothek definiert sind, um unsere schweren Kriege zu erleichtern. Bisher hatten wir Spring 4.x + Hibernate 3.6, und alles läuft reibungslos. Websphere's Javaassist muss mit dem in unserer Shared Library kompatibel sein. Leider scheint es keine gute Lösung dafür zu geben ... – codependent
Was Sie tun können, ist, dass Sie Ihre Abhängigkeit schattieren können, um sie in einem anderen Namensraum zu platzieren. –