0

WEB-INF/lib から JSF jar (jsf-api-2.0.1.jar および jsp-impl-2.0.1.jar) を削除すると、Windows マシンで新鮮でクリーンな Tomcat7 の準備が整いました。エラー:

Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    ... 10 more

2 つの jar を WEB-INF/lib に入れると、エラーが発生しました。

java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1956)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1919)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1806)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1765)
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1751)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1255)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:882)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5081)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Tomcat 7 で JSF を実行する手がかりはありますか?

4

1 に答える 1

2

エラーがデプロイ時にすぐに発生するか、しばらくしてから発生するかを示していません。しばらくしてから、つまりアプリケーションの実行中に発生した場合は、コードに責任があります。JDK 6 を使用してエラーの原因を追跡するのに役立つこの優れた記事を見てください。

エラーは、アプリケーション コンテナーに関連するPermGenクラスローディングの問題を示しています。Permanent Generation (略して PermGen) は、JVM がクラスや文字列リテラルなどのオブジェクトを格納する領域です。通常、ガベージ コレクタはここで頻繁に動作することは想定されていません。アプリケーション サーバーによってロードされたクラスは、Web アプリケーションのクラスローダー (デプロイされた Web アプリケーションごとに 1 つ) が使用されなくなると、自動的にクリーンアップされる必要があります。Tomcat は過去にこの分野で問題を引き起こしました (特に Netbeans 内で使用した場合)。再デプロイを繰り返した後、効果的にクリーンアップできないようです。permgen スペースのサイズを大きくする以外にできることはいくつかあります。

1) その tomcat インスタンスで実行されている Web アプリケーションの共通の jar ファイルをTOMCAT_HOME/lib. このようにして、Tomcat のデフォルトの動作のように、必要な Web アプリケーションごとにクラス ライブラリが複数回読み込まれることを期待できます (こちらを参照)。ただし、このオプションは注意して使用してください。新しいバージョンの jar を含む Web アプリケーションを最終的にデプロイすると、NoClassDefFoundエラーが発生する可能性があります。

2) mkyong が彼の記事で提案した-XX:MaxPermGen代わりに (またはそれに加えて)これを試すことができます。-XX:MaxPermSize

また、この質問を見てください。それは、さらなるステップのための答えです

于 2012-11-07T05:53:03.380 に答える