У меня есть веб-приложение, которое нормально работало на многих веб-серверах (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 отличается, он говорит, что загрузчик классов приложения уже загрузил этот класс с сервера, но я не знаю, почему и когда это произошло.
Есть идеи, как решить эту проблему?