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

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

  •  25-10-2019
  •  | 
  •  

Вопрос

У нас огромное применение уха с около 20 модулей EJB-JAR и военных модулей.

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

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

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

Когда Mojarra начинает War1, она жалуется на отсутствующие классы из War2 (ClassNotFoundException).

Я видел это при обновлении до стеклянной рыбы 3.1 (и, таким образом, Mojarra 2.1).

Это было полезно?

Решение

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

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

Журналы теперь гораздо менее многословны. Кажется, стеклянная рыба все еще сканирует все классы, поэтому я все еще получаю предупреждения, как это:

[#|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|#]

Но нет Stacktrace от Mojarra, что уже довольно менее многослов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top