Jsf 为什么mojarra 2.1在每个模块启动时每隔一次扫描一次?

Jsf 为什么mojarra 2.1在每个模块启动时每隔一次扫描一次?,jsf,jakarta-ee,jsf-2,mojarra,Jsf,Jakarta Ee,Jsf 2,Mojarra,我们有一个巨大的EAR应用程序,大约有20个EJBJAR和war模块 对于Mojarra启动的每个战争模块,它似乎都在尝试扫描其他战争的注释。类加载器无法使用其他WAR,因此我得到了很多异常。不管怎样,它最终还是会启动,但它会在我的日志中留下警告,我想如果没有这个(+100秒),应用程序启动时间可能会少很多 为了明确起见,我有以下结构: EAR +- ejb1 +- ejb2 +- war1 +- war2 当Mojarra启动war1时,它抱怨war2缺少类(ClassNotFoundExc

我们有一个巨大的EAR应用程序,大约有20个EJBJAR和war模块

对于Mojarra启动的每个战争模块,它似乎都在尝试扫描其他战争的注释。类加载器无法使用其他WAR,因此我得到了很多异常。不管怎样,它最终还是会启动,但它会在我的日志中留下警告,我想如果没有这个(+100秒),应用程序启动时间可能会少很多

为了明确起见,我有以下结构:

EAR
+- ejb1
+- ejb2
+- war1
+- war2
当Mojarra启动war1时,它抱怨war2缺少类(ClassNotFoundException)


我在升级到Glassfish 3.1(以及Mojarra 2.1)时看到了这一点。

我找到了原因,并找到了一些解决方法

在Mojarra 2.1附带的Glassfish 3.1上,类路径扫描委托给Glassfish。现在,Glassfish似乎提供了所有类的ear文件,而不是war。我为此打开了大门(但它似乎真的是一个Glassfish bug,而不是JSF/Mojarra)

在等待修复的过程中,我对Mojara进行了如下修补:在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|#]

但是没有来自Mojarra的stacktrace,这已经不那么详细了。

打开GlassFish Server 3.1的问题。它应该被转发给Mojarra团队中的合适人员进行评估。OP针对Mojarra 2.1提出了一个问题,该问题又被重新定位到GF 3.1。对任何解决方案感兴趣,我们将在生产中使用它,我真的可以使用更快的启动/更少的日志噪音启动时间还不是更好:-(