2016-08-01 11 views
1

Websphere 8.0.0.11

Hibernate 4.2.21.Final

Я нашел много вопросов по этой же проблеме, но никто из них не работал для меня.

Если я развертываю приложение в Websphere, он работает нормально.

Однако мы определили общую библиотеку, содержащую все сторонние библиотеки (spring, hibernate, javassist и т. Д.), Чтобы наши WAR были тоньше.

Этот способ во время развертывания связывает нашу тонкую WAR с этой общей библиотекой Websphere.

Дело в том, что при развертывании приложения таким образом выбрасывается ClassCastException Hibernate exception _$$_javassist_856 cannot be cast to javassist.util.proxy.Proxy.

Я проверил загруженные банки в консоли websphere и вижу только один javassist jar (3.18.1-GA) в пути к классам.

Почему это могло произойти?

UPDATE

Я также попытался с помощью PARENT_FIRST и PARENT_LAST класса нагрузки.

UPDATE 2

Я только что узнал, что Websphere загружается свой собственный Javassist банку:

URL location = ProxyFactory.class.getProtectionDomain().getCodeSource().getLocation(); 
logger.info("{}", location); 

Он печатает: file:/opt/IBM/WebSphere/AppServer/plugins/javassist.jar

ответ

1

Пробовав почти все, что я нашел на S.O. без каких-либо успехов я решил до перейти на спящий режим до версии 4.1.12. Финал. Это максимальная версия 4.x, совместимая с Websphere 8.x.

0

Проблема заключается в том, что Javassist оставляет следы в его генерироваться код. С Javassist на пути класса дважды его классы загружаются дважды. Однако два типа одинаковы, если они имеют одинаковое имя и загружаются одним и тем же загрузчиком классов. В вашем случае сгенерированный класс разрешает зависимость Javassist к типу, загружаемому вашим загрузчиком класса приложения, в то время как ваш код передает экземпляр в тип Javassist, загружаемый загрузчиком класса Websphere (или наоборот).

Вы используете какие-либо зависимости Hibernate между приложениями? Не пытайтесь использовать в своем приложении общие библиотеки, связанные с Hibernate.

+0

Привет, Рафаэль, спасибо, что ответили. Да, мы используем несколько библиотек, определенных в общей библиотеке websphere, чтобы облегчить наши тяжелые войны. До сих пор у нас была Spring 4.x + Hibernate 3.6, и все работает плавно. Очевидно, что Javassist Websphere был совместим с тем, который существует в нашей общей библиотеке. К сожалению, похоже, что это не очень хорошее решение ... – codependent

+0

Что вы можете сделать, так это то, что вы можете затенять вашу зависимость, чтобы поместить ее в другое пространство имен. –