Mojarra 2.1が各モジュールの起動を他のすべての戦争をスキャンするのはなぜですか?

StackOverflow https://stackoverflow.com/questions/5327070

  •  25-10-2019
  •  | 
  •  

質問

約20のEJB-jarとWARモジュールを備えた巨大な耳用途があります。

モジャラが開始する各戦争モジュールについて、それは他のすべての戦争で注釈をスキャンしようとしているようです。他の戦争はクラスローダーにとって利用できないので、私は多くの例外を得ています。最終的にはとにかく始まりますが、警告で私のログを覆い隠し、アプリケーションの起動時間はこれなしでははるかに短くなる可能性があると思います(+100秒)。

それを明確にするために、私は次の構造を持っています:

EAR
+- ejb1
+- ejb2
+- war1
+- war2

MojarraがWAR1を開始すると、WAR2(ClassNotFoundException)からクラスが欠落していることに不満を述べます。

Glassfish 3.1(したがって、Mojarra 2.1)にアップグレードするときにこれを見ました。

役に立ちましたか?

解決

理由といくつかの回避策を見つけました。

Mojarra 2.1に出荷されるGlassfish 3.1では、ClassPathスキャンがGlassfishに委任されます。現在、Glassfishは戦争の代わりにすべてのクラスの耳ファイルを提供しているようです。私は開きました http://java.net/jira/browse/javaserverfaces-1995 そのため(ただし、JSF/Mojarraではなく、Glassfishのバグのようです)。

修正を待っている間、私はこのようにモハラにパッチを当てました:com.sun.faces.config.configmanager.javaで、834行の周りに、いくつかの行をコメントしました。

//            if (provider instanceof DelegatingAnnotationProvider &&
//                null != annotationScanner) {
//                // This InjectionProvider is capable of annotation scanning *and*
//                // injection.
//                ((DelegatingAnnotationProvider)provider).setAnnotationScanner(annotationScanner,
//                        metadataGetter.getJarNames());
//                scanUris = Collections.emptySet();
//            } else {
                // This InjectionProvider is capable of annotation scanning only
                scanUris = metadataGetter.getAnnotationScanURIs();
//            }

ログの冗長性ははるかに少なくなりました。 Glassfishはまだすべてのクラスをスキャンしているようですので、私はまだこのような警告を受け取ります:

[#|2011-03-18T13:47:05.019+0100|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.web.org.glassfish.web.loader|_ThreadID=57;_ThreadName=Thread-1;|WEB9052: Unable to load class org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer, reason: java.lang.ClassNotFoundException: org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer|#]

しかし、モハラのスタックトレースはありません。これはすでに冗長性が非常に少ないです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top