Миграция JSF-приложения в Weblogic 12 - PullRequest
4 голосов
/ 20 декабря 2011

Мы разработали приложение Java EE 5 на основе Seam 2, и оно работает на Weblogic 11g.

Теперь я попытался развернуть тот же WAR-файл на новом Weblogic 12c (12.1.1.0 на моем локальном компьютере с Windows 7).), выполнив те же действия, что и в предыдущем WLS, включая развертывание необходимой библиотеки JSF 1.2.

Развертывание и запуск приложения работает нормально, но когда я открываю URL в браузере, я получаюошибка 500 и лог-файл показывает следующее исключение:

java.lang.UnsupportedOperationException
        at javax.faces.application.Application.getResourceHandler(Application.java:287)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:588)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
...

Операция, о которой идет речь в классе Application, относится к версии 2.0 JSF, и я не понимаю, почему контейнер пытается вызвать ее, поскольку язаявлено на использование JSF 1.2.

Есть идеи, что вызывает проблему и как просто перенести существующее приложение Java EE 5 в WLS 12?


Редактировать 1/2 /12 : Поскольку ответов нет, может, небольшая щедрость поможет?;-) Нет, серьезно, есть ли какие-нибудь подробности, которые я могу предоставить, чтобы помочь мне в этом?


Редактировать 1/5/12 : Относится к запросу cj91- проект не основан на Maven, поэтому нет POM.Но вот дескриптор развертывания weblogic.xml:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
  <library-ref>
    <library-name>jsf</library-name>
    <specification-version>1.2</specification-version>
    <implementation-version>1.2</implementation-version>
    <exact-match>false</exact-match>
  </library-ref>
</weblogic-web-app>

А вот список jar-файлов, взятых сборкой ant:

commons-digester.jar
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
jxl.jar
richfaces-impl.jar
richfaces-ui.jar
standard.jar
jstl.jar
jsf-api.jar
commons-collections-3.2.1.jar
commons-lang.jar
jboss-seam.jar
persistence-api.jar
jta.jar
jsf-impl.jar

darkX.jar
glassX.jar
laguana.jar

antlr-runtime.jar
commons-beanutils.jar
core.jar
drools-templates.jar
drools-decisiontables.jar
drools-compiler.jar
drools-api.jar
drools-core.jar
janino.jar
jboss-el.jar
jboss-seam-remoting.jar
jbpm-jpdl.jar
mvel2.jar
richfaces-api.jar

spiffy-with_source-all-0.05.jar
SuperCSV-1.52.jar

commons-logging.jar
dom4j.jar
javassist.jar
cglib.jar
antlr.jar
slf4j-api.jar
slf4j-log4j12.jar
hibernate-core.jar
hibernate-search.jar
hibernate-commons-annotations.jar
hibernate-annotations.jar
hibernate-entitymanager.jar
hibernate-validator.jar
jboss-common-core.jar
concurrent.jar
lucene-core.jar
gwt-servlet.jar

Я уверен, что в нем больше jar-файлов, чемнеобходимо, но это настройка, в которой он в настоящее время работает на WebLogic 10.3.5.

Я подозревал, что jsf и jstl jar являются источником проблемы, но удаление их из войны ничего не изменило.

Вопрос по-прежнему - почему WLS 12 пытается выполнить что-то из JSF 2.0?


Редактировать 1/6 / 12 : мне удалось решитьисходная проблема - все еще приложение не работает должным образом (и все же это странно для меня, так как я не ожидал, что придется изменить многие вещи в ранее запущенном приложении при обновлении до нового выпуска WLS), но яобъявите этот случай здесь как решенный.

Для тех, кто заинтересован, я сделал - благодаря помощи ответов и некоторым поискам этих вещей:

Измените weblogic.xml на:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
  <container-descriptor>
    <prefer-web-inf-classes>false</prefer-web-inf-classes>
  </container-descriptor>
  <library-ref>
    <library-name>jsf</library-name>
    <specification-version>1.2</specification-version>
    <implementation-version>1.2.9.0</implementation-version>
    <exact-match>true</exact-match>
  </library-ref>
</weblogic-web-app>

Удалено тОн следит за jar-файлами из WEB-INF / lib:

jsf-impl.jar
jsf-api.jar
persistence-api.jar
jta.jar
jstl.jar

Внутри Face-config.xml измените обработчик представления на (из-за IllegalStateException см. здесь ):

<view-handler>org.ajax4jsf.application.AjaxViewHandler</view-handler>

В файле persistence.xml измените класс фабрики запросов на (из-за ClassNotFoundException: org.hibernate.hql.ast.HqlToken, см. здесь )

<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>

Ответы [ 2 ]

1 голос
/ 03 января 2012

Вы должны спросить себя, почему вы переходите на более новый контейнер без обновления вашего приложения. Если ответ «потому что кодовая база слишком велика» и ваш старый контейнер работает нормально, оставьте его в покое.

Но есть две вероятные ошибки: 1) Есть ли у вас какие-либо jsf api jar, встроенные в ваш web-inf / lib? 2) Вы уверены, что правильно настроили поддержку 1.2? Если вы загружаете классы jsf2.0, вам может понадобиться специальный загрузчик классов, который сначала читает 1.2 jar.

EDIT: Как минимум, эти банки должны быть предоставлены вашим контейнером и НЕ должны быть включены в ваш WEB-INF / lib:

  • JSF-impl.jar
  • JSF-api.jar
  • сохранение-api.jar

Я вполне уверен, что это также вызовет проблемы:

  • jta.jar
  • jstl.jar
  • JSF-facelets.jar
0 голосов
/ 04 января 2012

Посмотрите раздел «Развертывание библиотек JSF 1.2 и JSTL» на http://docs.oracle.com/cd/E24329_01/web.1211/e21049/configurejsfandjtsl.htm

...