Myfaces ServletContext 'null' инициализирован - PullRequest
0 голосов
/ 03 апреля 2020

Я перенесу приложение из среды websphere 8.5.5.x в версию 20.0.0.3. Я получил большую часть работы за исключением части JSF. Что-то не так с инициализацией, и я не могу понять, что это такое и как отлаживать. Так как эта библиотека поставляется библиотекой liberty, я не могу просто поставить точки останова для отладки.

Я могу дать следующее сравнение

Websphere

[3/04/20 12:42:32:848 CEST] 00000081 DefaultFacesC I   Reading standard config META-INF/standard-faces-config.xml
[3/04/20 12:42:32:961 CEST] 00000081 DefaultFacesC I   Reading config /WEB-INF/faces-config.xml
[3/04/20 12:42:35:590 CEST] 00000081 DefaultFacesC I   Reading config : wsjar:file:/C:/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/WDL0000002Node01Cell/identiteiten-rollen-web-ear_ear.ear/identiteiten-rollen-war.war/WEB-INF/lib/primefaces-5.0.jar!/META-INF/faces-config.xml
[3/04/20 12:42:35:903 CEST] 00000081 ApplicationIm I   Couldn't discover the current project stage, using Production
[3/04/20 12:42:35:903 CEST] 00000081 FacesConfigur I   Serialization provider : class org.apache.myfaces.shared_impl.util.serial.DefaultSerialFactory
[3/04/20 12:42:35:904 CEST] 00000081 AbstractFaces I   ServletContext 'C:\IBM\WebSphere\AppServer\profiles\AppSrv01\installedApps\WDL0000002Node01Cell\identiteiten-rollen-web-ear_ear.ear\identiteiten-rollen-war.war' initialized.
[3/04/20 12:42:35:906 CEST] 00000081 PostConstruct I   Running on PrimeFaces 5.0

Liberty

[3/04/20 12:32:38:839 CEST] 0000002c org.apache.myfaces.config.DefaultFacesConfigurationProvider  I Reading standard config META-INF/standard-faces-config.xml
[3/04/20 12:32:38:941 CEST] 0000002c org.apache.myfaces.config.DefaultFacesConfigurationProvider  I Reading config /WEB-INF/faces-config.xml
[3/04/20 12:32:39:157 CEST] 0000002c org.apache.myfaces.config.DefaultFacesConfigurationProvider  I Reading config : jar:file:/C:/Liberty/identiteiten-rollen-web-ear/wlp/usr/servers/wlp-identiteiten-rollen-web/workarea/org.eclipse.osgi/57/data/cache/com.ibm.ws.app.manager_77/.cache/.cache/identiteiten-rollen-war.war/WEB-INF/lib/primefaces-5.0.jar!/META-INF/faces-config.xml
[3/04/20 12:32:39:167 CEST] 0000002c org.apache.myfaces.config.DefaultFacesConfigurationProvider  I Reading config : jar:file:/C:/Liberty/identiteiten-rollen-web-ear/wlp/usr/servers/wlp-identiteiten-rollen-web/workarea/org.eclipse.osgi/57/data/cache/com.ibm.ws.app.manager_77/.cache/.cache/identiteiten-rollen-war.war/WEB-INF/lib/primefaces-5.0.jar!/META-INF/faces-config.xml
[3/04/20 12:32:39:575 CEST] 0000002c org.apache.myfaces.application.ApplicationImpl               I Couldn't discover the current project stage, using Production
[3/04/20 12:32:39:576 CEST] 0000002c org.apache.myfaces.config.FacesConfigurator                  I Serialization provider : class org.apache.myfaces.shared_impl.util.serial.DefaultSerialFactory
[3/04/20 12:32:39:609 CEST] 0000002c org.apache.myfaces.webapp.AbstractFacesInitializer           I ServletContext 'null' initialized.
[3/04/20 12:32:39:612 CEST] 0000002c org.primefaces.webapp.PostConstructApplicationEventListener  I Running on PrimeFaces 5.0
[3/04/20 12:32:39:612 CEST] 0000002c org.primefaces.webapp.PostConstructApplicationEventListener  I Running on PrimeFaces 5.0

Первое, что странно, он делает это дважды на установке свободы, во-вторых, ServletContext имеет значение 'null'.

Возможно, мне не хватает настройки в сети. xml или face-config. xml неверно. Я не уверен, что websphere может быть немного более мягким, чем свобода, и исправить некоторые вещи для меня.

У кого-нибудь есть опыт загрузки myfaces?

Обновлена ​​информация

web. xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
        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_3_0.xsd"
        id="identiteitenRollenWarId" 
        version="3.0" >
    <display-name>identiteiten-rollen-war</display-name>

    <context-param>  
        <param-name>primefaces.THEME</param-name>  
        <param-value>b2e</param-value>  
    </context-param>
    <context-param>
        <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
        <param-value>true</param-value>
    </context-param>    
    <context-param>
        <description>
            The location where state information is saved.
            Valid values are 'server' (typically saved in HttpSession) and 'client' (typically
            saved as a hidden field in the form.
            Default is server.
        </description>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <!-- krijg hier altijd warning voor:  /WEB-INF/faces-config.xml has been specified in the javax.faces.CONFIG_FILES context parameter of the deployment descriptor. This will automatically be removed, if we wouldn't do this, it would be loaded twice.  See JSF spec 1.1, 10.3.2 
    <context-param>
        <description>
            Comma-delimited list of context-relative resource paths under which the JSF implementation
            will look for application configuration resources, before loading a configuration resource
            named /WEB-INF/faces-config.xml (if such a resource exists).
        </description>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
    </context-param>
     -->    
    <context-param>
        <description>
            The default suffix for extension-mapped resources that contain JSF components.
            Default is '.jsp'.
        </description>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>    
    <context-param>
        <description>
            Monitors Faces JSP files for modifications and synchronizes a running server with
            the changes without restarting the server. If this parameter is set to false or
            removed from the deployment descriptor, any changes made to Faces JSP files may
            not be seen by the server until it is restarted. This parameter is usually set
            to true while the Faces JSP files are being developed and debugged in order to
            improve the performance of the development environment.
        </description>
        <param-name>com.ibm.ws.jsf.JSP_UPDATE_CHECK</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <description>
            Load JSF runtime when the application server starts up. If this parameter is set to false or removed,
            JSF runtime will be loaded and initialized when the first JSF request is processed.
            This may disable custom JSF extensions, such as factories defined in the project.
        </description>
        <param-name>com.ibm.ws.jsf.LOAD_FACES_CONFIG_AT_STARTUP</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/retibo-taglib.xml</param-value>
    </context-param>
    <context-param>
        <param-name>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>

    <filter>
        <filter-name>UserFilter</filter-name>
        <filter-class>be.delijn.retibo.identiteitenrollen.common.view.filter.IdentiteitenUserFilter</filter-class>
    </filter>
    <filter>
        <filter-name>Log4JAdminFilter</filter-name>
        <filter-class>be.delijn.retibo.view.filter.Log4JAdminFilter</filter-class>
    </filter>
    <filter>
        <filter-name>IE9Filter</filter-name>
        <filter-class>be.delijn.retibo.view.filter.IE9Filter</filter-class>
    </filter>
    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>   

    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <filter-mapping>
        <filter-name>IE9Filter</filter-name>
        <url-pattern>*.faces</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>Log4JAdminFilter</filter-name>
        <url-pattern>/pages/log4jAdmin.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>UserFilter</filter-name>
        <url-pattern>*.faces</url-pattern>
    </filter-mapping>   

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>-1</load-on-startup>
    </servlet>  

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>  

    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

    <security-constraint>
        <display-name>securityConstraint</display-name>
        <web-resource-collection>
            <web-resource-name>AllesBeveiligd</web-resource-name>
            <description>Alle beveiligde pagina's</description>
            <url-pattern>/pages/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>MedewerkerPersoneel</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.faces</form-login-page>
            <form-error-page>/login.faces?error=true</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <description/>
        <role-name>MedewerkerPersoneel</role-name>
    </security-role>

    <servlet>
        <servlet-name>Happy Servlet</servlet-name>
        <servlet-class>be.delijn.retibo.identiteitenrollen.common.view.IamHappyServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Happy Servlet</servlet-name>
        <url-pattern>happy*</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <description />
        <res-ref-name>identiteitenDataSource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Application</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    <resource-ref>
        <res-ref-name>log4j_identiteiten_rollen</res-ref-name>
        <res-type>java.net.URL</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    <resource-ref>
        <description />
        <res-ref-name>url/biztalkRolToekenningMeldingServiceHost</res-ref-name>
        <res-type>java.net.URL</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    <resource-ref>
        <description />
        <res-ref-name>identiteitenCacheConfig</res-ref-name>
        <res-type>java.net.URL</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

    <resource-env-ref>
        <description>identiteiten_rollen_webservices</description>
        <resource-env-ref-name>properties/identiteiten_rollen_webservices</resource-env-ref-name>
        <resource-env-ref-type>java.util.Properties</resource-env-ref-type>
    </resource-env-ref>

    <resource-env-ref>
        <description>identiteiten_rollen_webservices 2</description>
        <resource-env-ref-name>properties/webservices</resource-env-ref-name>
        <resource-env-ref-type>java.util.Properties</resource-env-ref-type>
    </resource-env-ref>

    <resource-env-ref>
        <description>properties voor ldapB2E</description>
        <resource-env-ref-name>properties/ldapB2E</resource-env-ref-name>
        <resource-env-ref-type>java.util.Properties</resource-env-ref-type>
    </resource-env-ref>

    <resource-env-ref>
        <description>properties voor identiteiten_rollen</description>
        <resource-env-ref-name>properties/identiteiten_rollen</resource-env-ref-name>
        <resource-env-ref-type>java.util.Properties</resource-env-ref-type>
    </resource-env-ref>

    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/expired.faces</location>
    </error-page>

    <error-page>
        <error-code>403</error-code>
        <location>/onvoldoendeRechten.faces</location>
    </error-page>

</web-app>

server. xml

<?xml version="1.0" encoding="UTF-8"?><!--Generated by IBM TransformationAdvisor
Thu Mar 07 10:07:55 UTC 2019-->
<server>
    <!--These elements have been identified from this application's configuration.-->
    <featureManager>
        <feature>cdi-1.0</feature>
        <feature>ejbLite-3.1</feature>
        <feature>jdbc-4.0</feature>
        <feature>jndi-1.0</feature>
        <feature>jpa-2.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>ssl-1.0</feature>
        <feature>transportSecurity-1.0</feature>
        <feature>jaxrs-1.1</feature>
        <feature>jaxws-2.2</feature>
        <feature>javaMail-1.5</feature>
        <feature>jsf-2.0</feature>
    </featureManager>

    <basicRegistry id="basic" realm="ibm/api">
        <user name="wasadmin" password="wasadmin"/>
    </basicRegistry>

    <library id="sqlserverJdbcLib">
        <fileset dir="${server.config.dir}/resources/lib/sqlserverJdbc" includes="sqljdbc4-4.0.jar" />
    </library>

    <dataSource id="jdbcIdentiteitenRollen"
            jndiName="jdbc/identiteiten_2"
            type="javax.sql.ConnectionPoolDataSource"
            isolationLevel="TRANSACTION_READ_COMMITTED">
        <connectionManager maxPoolSize="10" minPoolSize="0" />
        <jdbcDriver libraryRef="sqlserverJdbcLib" />
        <properties.microsoft.sqlserver
                serverName="${datasource.server.name}"
                portNumber="${datasource.server.port}"
                databaseName="${datasource.database.name}"
                user="${datasource.user}"
                password="${datasource.password}" />
    </dataSource>
    <transaction totalTranLifetimeTimeout="3000s" />

    <library id="propertyProviderLib">
        <fileset dir="${server.config.dir}/resources/lib/propertyProvider" includes="property-provider-1.1.jar"/>
    </library>

    <jndiObjectFactory
            id="propertyProvider"
            libraryRef="propertyProviderLib"
            className="be.delijn.propertyprovider.ResourceFactory"
            objectClassName="java.util.Properties"/>

    <jndiReferenceEntry id="propertiesIdentiteitenRollen" jndiName="properties/identiteiten_rollen"
                        factoryRef="propertyProvider">
        <properties mobielplatform.applicatie.id="${mobielplatform.applicatie.id}"/>
        <properties identiteiten.exploitantensync.instructies.maximum="${identiteiten.exploitantensync.instructies.maximum}"/>
        <properties identiteiten.applicatie.id="${identiteiten.applicatie.id}"/>
        <properties identiteiten.sync.mail.to="${identiteiten.sync.mail.to}"/>
        <properties identiteiten.sync.mail.from="${identiteiten.sync.mail.from}"/>
        <properties base.distinguishedName="${base.distinguishedName}"/>
        <properties ldapUser="${ldapUser}"/>
        <properties ldapPassword="${ldapPassword}"/>
        <properties job.timelimit="${job.timelimit}"/>
        <properties scheduling.rolRelatiesPush="${scheduling.rolRelatiesPush}"/>
        <properties scheduling.dataValidatie="${scheduling.dataValidatie}"/>
        <properties scheduling.rolRelatiesPrepare="${scheduling.rolRelatiesPrepare}"/>
        <properties scheduling.ruleEngine="${scheduling.ruleEngine}"/>
        <properties scheduling.personeelSynchronisatie="${scheduling.personeelSynchronisatie}"/>
        <properties scheduling.activeDirectorySynchronisatie="${scheduling.activeDirectorySynchronisatie}"/>
    </jndiReferenceEntry>

    <jndiReferenceEntry id="propertiesWebservices" jndiName="properties/identiteiten_rollen_webservices" factoryRef="propertyProvider">
        <properties biztalk.username="${biztalk.username}"/>
        <properties biztalk.password="${biztalk.password}"/>
        <properties rolToekenningMeldingService.url="${rolToekenningMeldingService.url}"/>
    </jndiReferenceEntry>

    <jndiReferenceEntry id="propertiesLdap" jndiName="properties/ldapB2E" factoryRef="propertyProvider">
        <properties protocol="${protocol}"/>
        <properties server="${server}"/>
        <properties port="${port}"/>
        <properties ldapPassword="${ldapPassword}"/>
        <properties ldapUser="${ldapUser}"/>
        <properties base.distinguishedName="${base.distinguishedName}"/>
    </jndiReferenceEntry>

    <jndiURLEntry jndiName="url/log4j_identiteiten_rollen_2_web" value="${log.log4j.location}"/>
    <jndiURLEntry jndiName="url/identiteitenCacheConfig" value="${url.cache.config}"/>
    <jndiURLEntry jndiName="url/biztalkRolToekenningMeldingServiceHost" value="${url.biztalkRolToekenningMeldingServiceHost}"/>

    <mailSession description="De Lijn SMTP" from="" host="${smtp.host}"
            id="mailSession" jndiName="mail/Session" mailSessionID="IdentiteitenMailSession"
            password="" user=""/>

    <httpEndpoint host="*" httpPort="9081" httpsPort="9444" id="defaultHttpEndpoint"/>

    <classloading useJarUrls="true"/>

    <application id="identiteiten-rollen-web-ear" location="identiteiten-rollen-web-ear.ear" name="identiteiten_rollen_web_ear"
                 type="ear">
        <classloader apiTypeVisibility="spec, ibm-api, stable, third-party" libraryRef="propertyProviderLib"/>
    </application>
</server>

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Это сообщение ServletContext 'null' initialized вызвано более старой ошибкой MyFaces: MYFACES-3356 . К сожалению, реализация Liberty jsf-2.0, похоже, не имеет такого исправления - стоило бы открыть заявку в службу поддержки IBM.

В качестве обходного пути, если это работает для вашего приложения, вы можете включить расширение приложения на своем сервере. xml через <applicationManager autoExpand="true"/>

0 голосов
/ 03 апреля 2020

Итак, после сотрудничества с коллегой мы обнаружили проблему, почему JSF не рендерится. Что ж, мы надеемся, что это правильное решение, которое мне пришлось добавить

<feature>webProfile-6.0</feature>

в стек функций, и внезапно JSF ожил. Мы также попытались удалить его, а затем просто добавили

<feature>managedBeans-1.0</feature>

, но этого было недостаточно, поэтому мы остановились на сохранении веб-профиля, даже если он использует некоторые дополнительные функции, которые могут нам не понадобиться

...