【问题标题】:implementing JSF-2.3 and CDI together in WebSphere Application Server在 WebSphere Application Server 中一起实现 JSF-2.3 和 CDI
【发布时间】:2017-10-21 22:36:33
【问题描述】:

我最近升级到使用 Oracles new JSF-2.3,这涉及在我的 pom.xml 中添加依赖项作为外部库,因为我使用的是 maven,而不是以前使用 WebSphere Application Server (WAS) inbuilt JSF-2.2 feature。我想升级以利用新的 f:websocket 功能,该功能允许我将消息从服​​务器推送到客户端,以进行一些巧妙的异步页面加载。

但在我们开始之前,一旦我升级,我注意到我的 @ManagedBean 注释已被弃用。经过一些快速的谷歌搜索后,我发现我应该使用 CDI 注释,如 @Named 等。这导致了我的 JSF-2.3 not finding my @Named CDI-1.2 managed bean 问题,从中我了解到我不能将外部 JSF 库与 WAS 的 inbuilt CDI-1.2 feature 一起使用。

我的问题是,根据服务器端的JSF-2.3 spec,我需要使用 CDI @Inject 注释将“PushContext”注入到我的托管 bean 上的变量中,如下所示:

@Inject @Push(channel="foo")
private PushContext bar;

我一直无法找到与 @Inject 等效的 JSF 注释,它可以将实例注入到我的 PushContext 变量中,例如,我尝试过 @ManagedProperty。因此,我需要实现与 JSF 2.3 一起使用的 CDI 来完成这项工作。

我尝试过的事情:

  • 我已尝试使用 WAS 中的内置 CDI 功能,代码如上述问题中所示。
  • 我尝试过不使用默认 CDI 功能,并在我的 pom.xml 中添加 CDI-1.2 dependency(因此将 CDI 添加为外部库),但也没有用
  • 还尝试仅添加 Javax.inject library,因为我只需要 @Inject 注释作为依赖项而不是 CDI,这也不起作用(值得一试)

如果我无法实现使用自定义 JSF 库的 CDI 实现,我不知道应该如何使用 WAS 中的新 JSF-2.3 功能,我肯定错过了一些东西...

我还听说过一种叫做“cdi-enablers”的东西,这些对我有帮助吗?他们合法吗?或者只是一些人为了使某些东西发挥作用而拼凑起来的一些技巧?

求助!!!

【问题讨论】:

  • 我已经测试了当 JSF 和 CDI 与 webapp 捆绑在一起时,mojarra JSF 2.3 impl 可以从 Liberty 启动。我在应用程序中打包 CDI 时遵循的说明如下:balusc.omnifaces.org/2013/10/how-to-install-cdi-in-tomcat.html 但是请注意,我无法让 f:websocket 功能工作;似乎需要在 CDI/JSF 和服务器的 websockets impl 之间进行服务器集成。

标签: java jsf cdi websphere-liberty jsf-2.3


【解决方案1】:

经过大量研究和论坛搜索,我得出结论,让 JSF-2.3 和 CDI-1.2 一起工作以利用 WAS 中的 f:websocket 功能几乎是不可能的。请参阅 IBM 支持页面上的 my post 以确认这一点。

使用 JSF-2.2 仍然使用 Web 套接字的一种方法是使用 Javax.websocket 包,正如 @Gas 在我的 previous question 中指出的那样。但是,此 Web 套接字实现的局限性在于,将 SessionScoped ManagedBean 中包含的数据发送到该会话的客户端并不像我希望的那样使用来自 JSF-2.3 的 f:websocket做。

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2020-03-08
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多