Почему Mojarra 2.1 сканирует каждую другую войну на каждом запуске модуля?
Вопрос
У нас огромное применение уха с около 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, что уже довольно менее многослов.