LinkageError в WebSphere 9 для классов javax.transaction. * - PullRequest
0 голосов
/ 24 марта 2020

У меня есть веб-приложение, которое нормально работало на многих веб-серверах (tomcat, jboss, weblogi c и websphere). Однако теперь при развертывании в WebSphere 9 возникает ошибка.

Приложение содержит jar javax.transaction-api-1.2. Некоторые из его классов, например, javax.transaction.xa.XAResource, также включены в Java SE, но не все из них. Некоторые из них указаны c до Java EE и требуются некоторыми сторонними библиотеками в моем приложении. Приложение всегда развертывается с загрузчиком классов потомок (родительский последний). WebSphere 9 выдает эту ошибку во время запуска, когда приложение пытается загрузить драйвер Oracle JDB C:

java.lang.LinkageError: loading constraint violation: loader "com/ibm/ws/classloader/CompoundClassLoader@7157be44" previously initiated loading for a different type with name 
"javax/transaction/xa/XAResource" defined by loader "com/ibm/oti/vm/BootstrapClassLoader@422c7b1b"

Обратите внимание, что мы на самом деле не используем транзакции XA в приложении, мы используем обычные транзакции.

На других серверах и в предыдущих версиях WebSphere это никогда не было проблемой. Сервер не заботился о том, что мы загружаем XAResource изнутри войны, даже если он был ранее загружен где-то на сервере. Теперь WebSphere 9 отличается, он говорит, что загрузчик классов приложения уже загрузил этот класс с сервера, но я не знаю, почему и когда это произошло.

Есть идеи, как решить эту проблему?

1 Ответ

1 голос
/ 24 марта 2020

Удалите API транзакции из вашего приложения. JTA 1.2 уже включен в сервер и не имеет никакой ценности в ваших приложениях. Всегда рискованно использовать Java EE / SE API в загрузчике классов последнего родителя, если только вы не уверены на 100%, что они технически необходимы, потому что они могут привести к таким проблемам.

Я могу ' Не могу сказать, как это работало в предыдущих версиях сервера (произошли некоторые изменения Java уровня в принудительном применении подобных проблем), но решение достаточно простое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...