Jsf 在 Apache Karaf 3.0.3 中的应用

Jsf application in Apache Karaf 3.0.3

我是 OSGI 的新手,正在尝试 运行 OSGI 框架上的 jsf 应用程序。为此,我正在尝试将“.war”文件部署到 apache karaf 3.0.3。首先,我使用

为 karaf 安装了 war 功能

feature:install -v war

命令。然后,我将我的 .war 文件移动到 karaf 的 "deploy" 文件夹中。我遇到了一些依赖性错误,这些错误避免了我的 war 文件处于活动状态。因此,我将必要的 .jar 文件移动到部署文件夹并设法制作我的 .war 文件 "active"。但是,当我尝试通过此 link“http://localhost:8181/JavaServerFaces/hello.xhtml”访问 .xhtml 页面时,出现了 "Not found" 错误。我检查了 apache 的日志文件,发现有异常:

"java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener not found by JavaServerFaces"

尽管删除了这些行

  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>

从 web.xml 并重新部署 .war 文件,我遇到了同样的异常。我应该怎么做才能摆脱这个错误?我是否缺少 OSGI 的基本知识或其他东西?

感谢您的建议。

请看一看 Pax Web Samples 是如何做到的。 您将需要一个 JSF 实现的 OSGi 就绪版本。 Pax Web 已使用 myfaces 进行了测试。

可以在 the pax web samples 找到一个有效的 JSF 示例应用程序 从 Karaf 4 和 Pax Web 4 开始,有一个功能可以安装所有必需的包。由于您现在正在使用 Karaf 3,请查看以下列表:

<bundle>mvn:org.apache.myfaces.core/myfaces-api/${jsf-myfaces.version}</bundle>
    <bundle>mvn:org.apache.myfaces.core/myfaces-impl/${jsf-myfaces.version}</bundle>
    <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr250-1.0/2.0.0</bundle>
    <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr303-api-1.0.0/1.8.0</bundle>
    <bundle>mvn:org.apache.geronimo.bundles/commons-discovery/0.4_1</bundle>
    <bundle>mvn:commons-beanutils/commons-beanutils/1.8.3</bundle>
    <bundle>mvn:commons-collections/commons-collections/3.2.1</bundle>
    <bundle>mvn:commons-codec/commons-codec/1.8</bundle>
    <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-digester/1.8_4</bundle>

这些是在 karaf 中开始使用 JSF 所需的包。