ClassNotFoundException (HqlToken) при работе в WebLogic - PullRequest
8 голосов
/ 24 апреля 2010

У меня есть файл .war для приложения, которое нормально работает в Jetty.

Я пытаюсь портировать приложение для запуска в WebLogic, но при запуске я получаю следующие исключения:

ERROR:Foo - Error in named query: findBar
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from Bar]
    at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:80)
    at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
    at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:54)
    at antlr.CharScanner.<init>(CharScanner.java:51)
    at antlr.CharScanner.<init>(CharScanner.java:60)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
    ...

Какой лучший способ это исправить?

Я использую Hibernate 3.3.1.GA и WebLogic 10.3.2.0.

Ответы [ 6 ]

12 голосов
/ 24 апреля 2010

WebLogic имеет собственную версию ANTLR, и это вызывает проблему, с которой вы сталкиваетесь. Один из способов решить эту проблему с помощью веб-приложения - установить для элемента prefer-web-inf-classes в weblogic.xml значение true.

<weblogic-web-app>
  ....
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
  ....
</weblogic-web-app>

weblogic.xml входит в WEB-INF.

11 голосов
/ 12 февраля 2013

На мой взгляд, лучшее решение для war: Создайте файл webapp\WEB-INF\weblogic.xml и поместите текст

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
    <container-descriptor>
        <prefer-web-inf-classes>false</prefer-web-inf-classes>
        <prefer-application-packages>
            <package-name>antlr.*</package-name>
        </prefer-application-packages>
    </container-descriptor>
</weblogic-web-app>
6 голосов
/ 31 мая 2010

Если у вас есть проект EAR, подобный мне, вам нужно добавить этот элемент в дескриптор развертывания weblogic ear [ weblogic-application.xml ]

<wls:prefer-application-packages>
        <wls:package-name>antlr.*</wls:package-name>
    </wls:prefer-application-packages>
2 голосов
/ 22 ноября 2012

Я хотел развернуть файл WAR на weblogic 11g (Weblogic Server 10.3.5). Обычно в веб-приложении будет файл web.xml. Чтобы заставить Weblogic выбрать классы, упомянутые в web.xml, нам нужно включить один файл в WEB-INF / weblogic.xml. Ниже приведен код.

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <context-root>ProjectName</context-root>
    <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    </weblogic-web-app>

Это решило проблему для меня, и я смог развернуть WAR на weblogic. Пожалуйста, включите опцию веб-архива с консоли weblogic.

1 голос
/ 19 августа 2011

У меня был EAR, поэтому мне пришлось добавить файл META-INF / weblogic-application.xml

Сам файл был очень простым, это для Oracle WebLogic 11g, a.k.a. WebLogic Server 10.3.x:

<? xml version="1.0" ?>
<weblogic-application>
  <prefer-application-packages>
    <package-name>antlr.*</package-name>
  </prefer-application-packages>
</weblogic-application>
0 голосов
/ 02 октября 2013

Для тех из вас, кто попробовал вышеупомянутый подход для объявления пространства имен antlr в качестве «предпочитаемых пакетов приложений» в дескрипторе weblogic-application.xml и у кого все еще есть та же проблема, вы можете попытаться переопределить путь к классу weblogic-домен в стартовом скрипте с библиотеками вашего проекта напрямую:

Для этого выполните следующие шаги:

1.) Найдите файл bin/startWeblogic.[sh|cmd] в вашем домене Weblogic

2.) Найдите строку с надписью set SAVE_CLASSPATH=

3.) Заменить на это (в windows, соответственно адаптировать для mac / * nix)

set CLASSPATH=C:\SomeProject\WebContent\WEB-INF\lib\*;%SAVE_CLASSPATH%
rem set CLASSPATH=%SAVE_CLASSPATH%

set SAVE_CLASSPATH=

4.) Сохраните, (повторно) запустите свой домен в Интернете и скрестите пальцы.

Примечание: вероятно, это не очень хорошая идея, если в вашем домене размещено более одного развернутого артефакта. Кроме того, в некоторых случаях может быть целесообразно выбрать только соответствующие файлы JAR из вашей папки WEB-INF / lib. Конечно, если вы используете maven, вам нужно будет разместить эти библиотеки где-нибудь еще.

Это решение также работает с сервером Weblogic, запущенным из представления серверов eclipse, поскольку адаптер Oracle Weblogic использует сценарий командной строки для запуска сервера.

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