Websphere 7 и JSF 1.2 - приложение не было правильно инициализировано при запуске, не удалось найти Factory - PullRequest
0 голосов
/ 14 мая 2010

JSF 1.1 и websphere 6.1 работали должным образом в моем случае. Как только я развернул это на сервере websphere 7, я получил следующую ошибку -

Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactoryat javax.faces.FactoryFinder.getFactory(FactoryFinder.java:270)
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:164)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:358)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.init(ServletWrapperImpl.java:168)

Не уверен, что это значит, я включил JSF1.2 в качестве аспекта проекта в RAD, но все еще продолжаю получать вышеуказанное сообщение об ошибке, и ни один из моих файлов jsf не работает.

EDIT

После комментариев BalusC я вижу, что следующие каталоги ищутся по коду (это o / p для url.getPath ())

/C:/IBM/SDP/runtimes/base_v7/profiles/AppSrv01/properties/
/C:/IBM/SDP/runtimes/base_v7/properties/
/
/C:/IBM/SDP/runtimes/base_v7/java/lib/
/C:/IBM/SDP/runtimes/base_v7/lib/
/C:/IBM/SDP/runtimes/base_v7/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime/
/C:/IBM/SDP/runtimes/base_v7/installedConnectors/sib.api.jmsra.rar/
/C:/IBM/SDP/runtimes/base_v7/installedConnectors/wmq.jmsra.rar/
/C:/DETSphere10/DET_FALL9.0/DETEJB/classes/
/C:/DETSphere10/DET_FALL9.0/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/DETWEB/

В этих каталогах нет jsf impl. Теперь я в замешательстве, так как оригинальная библиотека должна находиться в каталоге c: \ IBM \ SDP \ runtimes \ base_v7 \ plugins !!

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Это типичная ошибка, когда в пути к классам есть несколько разных версий библиотек JSF. Websphere поставляется со встроенными библиотеками JSF. Если вы хотите использовать библиотеки JSF, предоставляемые веб-приложением, то после развертывания необходимо установить политику загрузки классов на module. Обычно это значение по умолчанию равно application, что означает, что библиотеки веб-приложений загружаются основным загрузчиком классов. Главный загрузчик классов может загрузить библиотеку API JSF. Если его версия отличается от библиотеки JSF IMPL в веб-приложении, вы можете получить ошибки такого рода.


Обновление , чтобы помочь лучше понять причину, вот два предложения:

  1. Вы можете раскрыть все используемые корни пути к классам в файловой системе локального диска следующим образом:

    for (URL url : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
        System.out.println(url.getPath());
    }
    

    Выполните это за ServletContextListener#contextInitialized() или около того.

  2. (в конце концов, узнав об этом), установите WinRAR , свяжите его с типом файла JAR и используйте средство поиска файлов для поиска файла JSF, например FacesContext.class и FacesContextImpl.class так что вы можете найти все JAR-файлы, содержащие JSF API / impl. Точную версию JSF можно узнать, распаковав JAR и прочитав файл MANIFEST.

1 голос
/ 26 августа 2010

Вам необходимо сохранить JAR-файлы JSF (icu4j.jar и jsf-ibm.jar, если вы используете библиотеку компонентов IBM) в вашей папке /WEB-INF/lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...