Liberty概要:birt和jsf集成

Liberty概要:birt和jsf集成,jsf,jsf-2,classloader,birt,websphere-liberty,Jsf,Jsf 2,Classloader,Birt,Websphere Liberty,我正在构建一个运行在Liberty profile 8.5上的web应用程序,启用JSF 2.0功能(server.xml中的JSF-2.0)并在web应用程序中集成BIRT。 web应用程序在web-INF/lib文件夹中包含所有BIRT所需的lib,但使其工作的唯一方法(特别是图表报告)是在server.xml中将classloader设置为“parentlast”: <webApplication contextRoot="MyApp" id="MyApp" location="My

我正在构建一个运行在Liberty profile 8.5上的web应用程序,启用JSF 2.0功能(server.xml中的JSF-2.0)并在web应用程序中集成BIRT。 web应用程序在web-INF/lib文件夹中包含所有BIRT所需的lib,但使其工作的唯一方法(特别是图表报告)是在server.xml中将classloader设置为“parentlast”:

<webApplication contextRoot="MyApp" id="MyApp" location="MyApp.war" name="MyApp">
        <classloader delegation="parentLast"/> 
</webApplication>

这样,我就能正确地看到图表和报告

但“parentlast”设置使JSF无法工作,但以下情况除外:

[错误]SRVE0315E:发生执行选项: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: javax.servlet.ServletException:SRVE0207E:未捕获初始化 由位于的servlet创建的异常 com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:385) 在[internal classes]处,原因是:javax.servlet.ServletException: SRVE0207E:servlet创建的未捕获初始化异常。。。3. 更多

原因:java.lang.IllegalStateException:没有为此应用程序配置工厂。如果faces初始化根本不起作用,则会发生这种情况-确保正确包含基本faces应用程序所需的所有配置设置,并且包含所有必要的LIB。还要检查web应用程序和容器的日志输出是否存在任何异常! 如果您这样做了,但什么也没找到,那么错误可能是因为您使用了一些特殊的web容器,这些容器不支持通过TLD文件注册上下文侦听器,并且您的web.xml中没有设置上下文侦听器。 一个典型的配置如下所示

<listener><listenerclass>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
 </listener>
org.apache.myfaces.webapp.StartupServletContextListener
如果没有parentlast设置,JSF页面将正确显示,但BIRT图表不起作用

我理解这种行为,因为parentlast类加载使应用程序首先看到应用程序libs,其中不包括JSF(它在服务器范围内加载)

有什么建议吗?
提前谢谢你

您在WEB-INF/lib中上载的所有lib是什么?其中之一就是对Liberty JSF库的重击。如果您只包含BIRT所需的最小数量的库,那么应该可以解决您的问题。此外,您不需要在Liberty中启用parent last,因此,在这种情况下出现错误的另一个问题可能有助于消除这样做的需要。