почему mojarra 2.1 сканирует каждую вторую войну при запуске каждого модуля?

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

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

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

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

Когда Mojarra запускает war1, он жалуется на отсутствие классов из war2 (ClassNotFoundException).

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


person ymajoros    schedule 16.03.2011    source источник
comment
Откройте вопрос против GlassFish Server 3.1. Он должен быть передан нужному человеку в команде Mojarra для оценки.   -  person vkraemer    schedule 16.03.2011
comment
OP открыла проблему с Mojarra 2.1 java.net/jira/browse/JAVASERVERFACES-1995 который, в свою очередь, перенацелен на GF 3.1.   -  person BalusC    schedule 16.03.2011
comment
заинтересован в любом обходном пути, мы собираемся использовать его в производстве, и я действительно мог бы использовать более быстрый запуск / меньше шума в журнале   -  person ymajoros    schedule 16.03.2011


Ответы (1)


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

В Glassfish 3.1, который поставляется с Mojarra 2.1, сканирование пути к классам делегировано Glassfish. Теперь Glassfish, кажется, дает всем классам слух вместо войны. Для этого я открыл http://java.net/jira/browse/JAVASERVERFACES-1995. (но это действительно ошибка Glassfish, а не JSF/Mojarra).

В ожидании исправления я пропатчил 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, которая и так менее подробна.

person ymajoros    schedule 18.03.2011
comment
Время запуска еще не лучше :-( - person ymajoros; 18.03.2011