6

Seam2ベースのJavaEE5アプリケーションを開発し、Weblogic11gで実行します。

ここで、必要なJSF 1.2ライブラリの展開を含め、以前のWLSと同じ手順に従って、同じWARファイルを新しいWeblogic 12c(ローカルのWindows 7マシンでは12.1.1.0)に展開しようとしました。

アプリケーションのデプロイと起動は正常に機能しますが、ブラウザーで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)
...

アプリケーションクラスの問題の操作は、JSFの2.0バージョンに属していますが、JSF 1.2を使用すると述べたので、コンテナがそれを呼び出そうとする理由がわかりません。

問題の原因と、既存のJava EE5アプリケーションをWLS12に単純に移行する方法についてのアイデアはありますか?


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>

そして、これがantビルドによって取得されたjarのリストです。

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が含まれていると思いますが、それが現在WebLogic10.3.5で実行されている設定です。

jsfとjstljarが問題の原因であると思われましたが、戦争からそれらを削除しても何も変わりませんでした。

問題はまだです-なぜWLS12はJSF2.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>

WEB-INF/libから次のjarファイルを削除しました。

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

faces-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"/>
4

3 に答える 3

1

アプリケーションをアップグレードせずに新しいコンテナーにアップグレードする理由を自問する必要があります。答えが「コード ベースが大きすぎるため」で、古いコンテナーが正常に機能している場合は、そのままにしておいてください。

ただし、考えられるエラーが 2 つあります。1) web-inf/lib に jsf API jar が埋め込まれていますか? 2) 1.2 サポートを正しくセットアップしましたか? jsf2.0 クラスをロードしている場合は、最初に 1.2 jar を読み取る特別なクラスローダーを使用する必要がある場合があります。

編集: 少なくとも、これらの jar はコンテナーによって提供される必要があり、WEB-INF/lib には含めないでください。

  • jsf-impl.jar
  • jsf-api.jar
  • persistence-api.jar

これらも問題を引き起こすと確信しています:

  • jta.jar
  • jstl.jar
  • jsf-facelets.jar
于 2012-01-02T22:31:09.823 に答える
0

http://docs.oracle.com/cd/E24329_01/web.1211/e21049/configurejsfandjtsl.htmの「JSF 1.2 および JSTL ライブラリのデプロイ」というタイトルのセクションを参照してください。

于 2012-01-03T20:27:25.187 に答える