首页 > 解决方案 > 使用捆绑的库 Websphere 自由

问题描述

我正在将 websphere liberty 与 java 8 docker 映像一起使用,但在尝试了一切之后。我无法根据我的假设和日志加载我自己的捆绑库而不是内置的 liberty 我的 jsp 和其他库WEB-INF/lib位于我的 war 文件内的目录中

这是我正在使用的配置

<?xml version="1.0" encoding="UTF-8"?>
<server description="Default server">

    <!-- Enable features -->
    <featureManager>
        <feature>javaee-8.0</feature>
        <feature>microProfile-3.0</feature>
    </featureManager>

    <basicRegistry id="basic" realm="BasicRealm">
        <!-- <user name="yourUserName" password="" />  -->
    </basicRegistry>

    <logging  traceSpecification="com.ibm.ws.webcontainer*=all:com.ibm.wsspi.webcontainer*=all:HTTPChannel=all:GenericBNF=all:HTTPDispatcher=all"
    traceFileName="trace.log"
    maxFileSize="20"
    maxFiles="10"
    traceFormat="BASIC" />

    <library id="OJDBC5Lib">
        <fileset dir="/config/ojdbc5.jar" includes="ojdbc5.jar"/>
    </library>

    <!-- To allow access to this server from a remote client host="*" has been added to the following element -->
    <httpEndpoint id="defaultHttpEndpoint"
                  host="*"
                  httpPort="9080"
                  httpsPort="9443" />

    <webApplication id="e-app" name="e-app" location="/apps/e-app.war" contextRoot="/e-app">
        <classloader delegation="parentLast" />
    </webApplication>

当我跑步时。我遇到异常的应用程序

[AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 14.831 seconds.
[ERROR   ] SRVE0271E: Uncaught init() exception created by servlet [Faces Servlet] in application [e-app]: java.lang.IllegalStateException: Could not find ba
ckup for factory javax.faces.context.FacesContextFactory.
        at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1004)
        at [internal classes]

[ERROR   ] SRVE0276E: Error while initializing Servlet [Faces Servlet]: javax.servlet.ServletException: SRVE0207E: Uncaught initialization exception created by servlet
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:360)
        at [internal classes]
Caused by: java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory.
        at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1004)
        ... 1 more

有人可以告诉我在配置中需要做什么才能使其工作

标签: javawebspherewebsphere-liberty

解决方案


这里的问题是该javaee-8.0特性包括jsf-2.3包含 JSF API 和 Liberty 的 JSF 实现的特性。为了提供您自己的 JSF 实现,您需要删除该jsf-2.3功能并改用该jsfContainer-2.3功能。该文档有更多详细信息:https ://www.ibm.com/support/knowledgecenter/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_jsf23_implementations.html

javaee-8.0功能包括大量功能 - 其中许多您可能不需要,但不幸的是,您需要指定您确实需要的所有功能(除了jsfContainer-2.3)。所以你的 server.xml 的<featureManager>元素最终可能看起来像这样:

<featureManager>
  <!-- webprofile-8.0 features but using jsfContainer instead of jsf -->
  <feature>appSecurity-3.0</feature>
  <feature>beanValidation-2.0</feature>
  <feature>cdi-2.0</feature>
  <feature>ejbLite-3.2</feature>
  <feature>el-3.0</feature>
  <feature>jaspic-1.1</feature>
  <feature>jaxrs-2.1</feature>
  <feature>jdbc-4.2</feature>
  <feature>jndi-1.0</feature>
  <feature>jpa-2.2</feature>
  <feature>jsfContainer-2.3</feature>
  <feature>jsonb-1.0</feature>
  <feature>jsonp-1.1</feature>
  <feature>jsp-2.3</feature>
  <feature>managedBeans-1.0</feature>
  <feature>servlet-4.0</feature>
  <feature>transaction-1.2</feature>
  <feature>websocket-1.1</feature>

  <!-- full profile 8 features not in web profile -->
  <feature>appClientSupport-1.0</feature>
  <feature>batch-1.0</feature>
  <feature>concurrent-1.0</feature>
  <feature>ejb-3.2</feature>
  <feature>jacc-1.5</feature>
  <feature>javaMail-1.6</feature>
  <feature>javax.persistence.base-2.2</feature>
  <feature>jaxws-2.2</feature>
  <feature>jca-1.7</feature>
  <feature>jcaInboundSecurity-1.0</feature>
  <feature>jms-2.0</feature>
  <feature>j2eeManagement-1.1</feature>
  <feature>wasJmsClient-2.0</feature>
  <feature>wasJmsSecurity-1.0</feature>
  <feature>wasJmsServer-1.0</feature>
</featureManager>

这是一个庞大的列表,因此您可能需要稍微修剪一下(例如,如果您不使用 JMS,则删除所有与 JMS 相关的功能)。但是,一旦您进行了交换jsf-2.3jsfContainer-2.3Liberty 应该会在您的应用程序中找到并使用 JSF 实现——您也不需要在您的应用程序中使用 parentLast 委托。


推荐阅读