java.lang.IllegalStateException: не удалось найти резервную копию для фабрики javax.faces.application.ApplicationFactory

Я обновил приложение для использования jar-файлов javax.faces-2.2.4 и primefaces-4.0. После развертывания моего приложения в weblogic из myeclipse я получаю следующую ошибку:

Jan 10, 2014 2:37:13 PM javax.faces.FactoryFinder$FactoryManager getFactory
SEVERE: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory. Attempting to find backup.
Jan 10, 2014 2:37:13 PM com.sun.faces.config.ConfigureListener contextDestroyed
SEVERE: Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. 
    at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1135)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:379)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:140)
    at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:310)
    at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:482)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.EventsManager.notifyContextDestroyedEvent(EventsManager.java:200)
    at weblogic.servlet.internal.WebAppServletContext.destroy(WebAppServletContext.java:3225)
    at weblogic.servlet.internal.ServletContextManager.destroyContext(ServletContextManager.java:247)
    at weblogic.servlet.internal.HttpServer.unloadWebApp(HttpServer.java:461)
    at weblogic.servlet.internal.WebAppModule.destroyContexts(WebAppModule.java:1545)
    at weblogic.servlet.internal.WebAppModule.deactivate(WebAppModule.java:509)
    at weblogic.application.internal.flow.ModuleStateDriver$2.previous(ModuleStateDriver.java:387)
    at weblogic.application.utils.StateMachineDriver.previousState(StateMachineDriver.java:223)
    at weblogic.application.utils.StateMachineDriver.previousState(StateMachineDriver.java:215)
    at weblogic.application.internal.flow.ModuleStateDriver.deactivate(ModuleStateDriver.java:141)
    at weblogic.application.internal.flow.ScopedModuleDriver.deactivate(ScopedModuleDriver.java:206)
    at weblogic.application.internal.flow.ModuleListenerInvoker.deactivate(ModuleListenerInvoker.java:261)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$2.previous(DeploymentCallbackFlow.java:547)
    at weblogic.application.utils.StateMachineDriver.previousState(StateMachineDriver.java:223)
    at weblogic.application.utils.StateMachineDriver.previousState(StateMachineDriver.java:215)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.deactivate(DeploymentCallbackFlow.java:192)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.deactivate(DeploymentCallbackFlow.java:184)
    at weblogic.application.internal.BaseDeployment$2.previous(BaseDeployment.java:677)
    at weblogic.application.utils.StateMachineDriver.previousState(StateMachineDriver.java:223)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:63)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:212)
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:59)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
    at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:184)
    at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:361)
    at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
    at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200)
    at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
    at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240)
    at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
    at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
    at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:180)
    at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:96)
    at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

Даже метод ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext ) не вызывался


person priya    schedule 10.01.2014    source источник
comment
У меня нет jsf-impl.jar и jsf-api.jar в папке приложения WEB-INF/lib. У меня есть jstl.jar и javax.faces-2.2.4.jar в папке WEB-INF/lib. Использование weblogic 10 сервер   -  person priya    schedule 13.01.2014


Ответы (2)


java.lang.IllegalStateException: не удалось найти резервную копию для фабрики javax.faces.application.ApplicationFactory.

Одна из наиболее распространенных причин этого исключения заключается в том, что путь к классам среды выполнения веб-приложения загрязнен несколькими различными версиями JSF API, которые конфликтуют/смешивают друг друга.

Вероятно, это также имеет место в вашем случае. Сам Weblogic уже поставляется с JSF в комплекте, однако вы поставляете еще один вместе с вашим веб-приложением. Таким образом, вы фактически получаете два разных API-интерфейса JSF с разными версиями в пути к классам среды выполнения веб-приложения.

Я не занимаюсь Weblogic, но в основном у вас есть 2 варианта:

  1. Скажите Weblogic, чтобы он не загружал связанный с ним JSF, чтобы фактически загружался только связанный с веб-приложением JSF.
  2. Если вы собираетесь обновить JSF-версию Weblogic в комплекте, обновляйте ее не через веб-приложение, а непосредственно в самом Weblogic. Или, возможно, обновите весь сервер до более новой версии, если желаемая версия JSF API несовместима с версией сервлета сервера (для JSF 2.2 требуется Servlet 3.0).

Обратитесь к его административной документации для подсказок.

person BalusC    schedule 15.01.2014
comment
Вы правы. Я получил это сообщение, добавив расширения Primefaces, хотя Primefaces Core и Mojarra работают хорошо. - person Ryan D; 08.07.2015

Вам нужно только очистить сборку и развернуть эту новую сборку на weblogic.

person BITSSANDESH    schedule 27.03.2014