【问题标题】:Deploying both JSF 1.2 and JSF 2.0 apps on same Tomcat Server在同一个 Tomcat 服务器上部署 JSF 1.2 和 JSF 2.0 应用程序
【发布时间】:2011-08-18 08:50:47
【问题描述】:

到目前为止,我一直在 Tomcat 6.0 上运行 JSF 1.2 应用程序。 我现在已经在另一个 Tomcat 实例上启动了一个新的 JSF 2.0 项目(用于测试)。

我想在 Tomcat 6.0 主服务器上部署新的 JSF 2.0 项目,并面临“告诉”新项目使用 2.0 库而旧项目应继续使用旧库的挑战。

每个服务器的所有库都是通用的(尽管构建路径显然是每个项目的)。 我想知道的是如何告诉项目使用 JSF 2.0 API。

谢谢!

【问题讨论】:

    标签: java jsf tomcat deployment jsf-2


    【解决方案1】:

    Tomcat 根本不附带 JSF,因此只需在 /WEB-INF/lib 中为每个项目提供自己正确版本的 JSF 库就可以正常工作。

    更新 我忽略了 JSF 1.2 库是由 Tomcat 本身提供的。在这种情况下,您需要将 Tomcat 中的 JSF 1.2 库升级到 JSF 2.0 库。 JSF 2.0 与 JSF 1.2 完全向后兼容。对于 Tomcat 服务器,无法以某种方式配置 webapp,以使用 webapp 提供的库覆盖 Tomcat 提供的库。您最终会在类路径中发生冲突。

    【讨论】:

    • 我们在没有库的情况下进行部署。正如我提到的“所有库都是每个服务器通用的”。
    • 从一开始就是个坏主意。我不太明白 Jigar 的答案是如何解决这个问题的。 Tomcat 提供的那些仍然会优先于 webapp 中的那些。更多成熟的应用程序服务器具有特定的配置设置,可以让 webapps 覆盖服务器提供的库,另请参阅stackoverflow.com/questions/5815623/… 在任何情况下,您应该能够在将 Tomcat-libs 从 1.2 更新到 2.0 的同时继续使用 JSF 1.2 应用程序。 JSF 2.0 完全向后兼容 JSF 1.2。
    • 这样做是为了减少部署的规模。还有其他方法吗?我看不出通过构建路径引用库并不比在war 文件中包含实际库更好。 (似乎是库重复混乱)仅仅是因为没有更好的解决方案吗?
    • Tomcat 库在类加载中优先于 webapp 库。对于 Tomcat,您不能从 webapp 端更改它。 IDE 构建路径无关紧要。还是你自己测试过?
    • 对不起,我现在明白你的意思了。对于 API,将加载 webapp 提供的库,但对于 impl,这不会发生,而是会加载 appserver 提供的库。 JSP/Servlet/JSF/etc 存在 2 个库:API 和 impl。 API 是您在类中导入的任何内容。 javax.faces.* 等等。它几乎是一个和所有的接口和抽象类。然而,impl 是真正的具体代码。对于 Mojarra,这是 com.sun.* 类。因此,如果您将 JSF 1.2 API/impl 放在 Tomcat 中,并将 JSF 2.0 API/impl 放在 webapp 中,那么您的 webapp 将使用 JSF 2.0 API 和 JSF 1.2 impl 运行。这发生了冲突。
    【解决方案2】:

    你可以将 JSF jar 从 Tomcat 的类路径中取出,并在每个 WAR 中打包所需的版本,除此之外,我认为你无法做到......

    【讨论】:

      【解决方案3】:

      嗯.. 你只需要在你的类路径中提供所需的库,你需要做these changes in your configurations 它应该选择正确的库

      【讨论】:

        猜你喜欢
        • 2013-02-07
        • 2011-03-30
        • 2011-05-11
        • 2015-03-17
        • 2012-04-13
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 2013-03-08
        相关资源
        最近更新 更多