Недавно я писал о проблемах, возникших при добавлении в приложение, использующее jsf и работающее на Tomcat. Наконец-то эти проблемы решены. Сиптомы:

  • Одно или несколько сообщений при старте приложения: “There should only be one phase listener per application”
  • Многократное срабатывание сеттеров, описанных в pages.xml
  • На некоторых серверах появление исключения:
SEVERE:  sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
	at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:212)
	at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:174)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.NullPointerException
	at com.sun.faces.config.processor.ApplicationConfigProcessor.addResouceBundle(ApplicationConfigProcessor.java:578)
	at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:245)
	at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:94)
	at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:119)
	at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:94)
	at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:132)
	at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:202)
	... 16 more

Проблема заключалась в том, что приложение использует одновременно RichFaces и MyFaces, от чего нельзя было отказаться, а папке WEB-INF/lib приложения содержалась библиотека jsf-impl-1.2_08.jar . После ее удаления - исключение больше не появлялось. Но осталось сообщение об уже запущенном экземпляре SeamPhaseListener. От этого сообщения я избавился исключив из faces-config.xml описание SeamPhaseListener. Скорее всего, экземпляр этого класса уже создавался при чтении faces-config.xml, лежащего в одной из библиотек .

Связанные записи