почему mojarra 2.1 сканирует все остальные войны при каждом запуске модуля? - PullRequest
2 голосов
/ 16 марта 2011

У нас огромное приложение EAR с около 20 модулями ejb-jar и war.

Для каждого военного модуля, который запускает Мохарра, похоже, он пытается сканировать аннотации по любой другой войне. Другие войны недоступны для загрузчика классов, поэтому я получаю много исключений. В конце концов, он все равно запускается, но он загромождает мои журналы предупреждениями, и я предполагаю, что время запуска приложения может быть намного меньше без этого (+100 секунд).

Чтобы было понятно, у меня есть следующая структура:

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

Когда Мохарра начинает войну1, он жалуется на отсутствие классов из войны2 (ClassNotFoundException).

Я видел это при обновлении до Glassfish 3.1 (и, следовательно, Mojarra 2.1).

1 Ответ

4 голосов
/ 18 марта 2011

Я нашел причину и какой-то обходной путь.

На Glassfish 3.1, который поставляется с Mojarra 2.1, сканирование пути к классу делегировано Glassfish. Теперь, Glassfish, кажется, дает все классы файла уха вместо войны. Для этого я открыл http://java.net/jira/browse/JAVASERVERFACES-1995 (но на самом деле это ошибка Glassfish, а не 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|#]

Но нет стековой трассировки от Мохарры, которая уже менее многословна.

...