我们有大量的耳朵应用,大约有20个EJB-JAR和战争模块。

对于Mojarra开始的每个战争模块,似乎都在试图扫描其他所有战争的注释。其他战争对于Class Loader不可用,因此我得到了很多例外。无论如何,它最终都会开始,但是它会用警告来缩小我的日志,我想没有此启动时间可能会少得多(+100秒)。

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

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

当Mojarra开始WAR1时,它会抱怨WAR2(ClassNotFoundException)中缺少类。

当升级到Glassfish 3.1时,我看到了这一点(因此,Mojarra 2.1)。

有帮助吗?

解决方案

我找到了原因,还有一些解决方法。

在带有Mojarra 2.1的玻璃鱼3.1上,将类Path扫描委托给Glassfish。现在,玻璃鱼似乎给出了所有类别的耳朵文件而不是战争。我打开了 http://java.net/jira/browse/javaserverfaces-1995 为此(但这似乎确实是玻璃鱼虫,而不是JSF/Mojarra)。

在等待修复时,我像这样修补了莫哈拉:在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,它已经少了详细的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top