Ошибка JSF 2 «Не удалось создать экземпляр ExpressionFactory» в App Engine - PullRequest
1 голос
/ 04 июня 2011

С новым приложением JSF 2.0, созданным в NetBeans 6.9.1, это сообщение об ошибке появляется в файле журнала при запуске на рабочем сервере:

com.sun.faces.config.ConfigureListener contextInitialized:Инициализация Mojarra 2.0.2 (FCS b10) для контекста ''

com.sun.faces.spi.InjectionProviderFactory createInstance: JSF1048: присутствуют аннотации PostConstruct / PreDestroy.Методы ManagedBeans, помеченные этими аннотациями, будут обрабатывать указанные аннотации.

> com.sun.faces.config.ConfigureListener installExpressionFactory: невозможно создать экземпляр ExpressionFactory 'com.sun.el.ExpressionFactoryImpl'

Не удалось запустить контекст com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@7616ad {/, / base / data / home / apps / scroogedemo / 1.350894485313261302} com.sun.faces.config.ConfigurationException: появляетсяверсия JSP контейнера старше 2.1 и не может найти фабрику выражений EL RI com.sun.el.ExpressionFactoryImpl.Если не используется JSP или EL RI, убедитесь, что параметр инициализации контекста com.sun.faces.expressionFactory установлен правильно.at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp (ConfigureListener.java:638)

Приложение использует эталонную реализацию JSF 2.0, предоставленную NetBeans, которая, кажется, включает в себя EL RI (пакет javax.faces.el).

Приложение отлично работает на сервере разработки.Я использую эти записи конфигурации в web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    ...
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.enableThreading</param-name>
        <param-value>false</param-value>
    </context-param>

Я проверил страницу https://sites.google.com/a/wildstartech.com/adventures-in-java/Java-Platform-Enterprise-Edition/JavaServer-Faces/sun-javaserver-faces-reference-implementation/configuring-jsf-20-to-run-on-the-google-appengine/javaserverfaces-20-and-google-app-engine-compatibility-issues на информацию об этой ошибке, но эта проблема там не рассматривается.

Обновление : на упомянутой выше странице сказано, что файлы el-api и el-impl должны быть включены в проект.Их нет в списке библиотек NetBeans, поэтому они не были загружены в процессе развертывания сервера.Я предполагаю, что они предоставлены локальным сервером разработки - но отсутствуют в производственном GAE.Это оказалось решением, см. Ниже.

1 Ответ

2 голосов
/ 04 июня 2011

Развертывание приложения с помощью el-api-2.2.jar и el-impl-2.2.jar решило проблему.

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