在 WebSphere Application Server 中一起实施 JSF-2.3 和 CDI

implementing JSF-2.3 and CDI together in WebSphere Application Server

我最近升级到使用 Oracles new JSF-2.3 which involved adding the dependency as an external library in my pom.xml as I am using maven, As opposed to previously using WebSphere Application server's (WAS) inbuilt JSF-2.2 feature。我想升级以利用新的 f:websocket 功能,该功能允许我将消息从服​​务器推送到客户端以实现一些巧妙的异步页面加载。

但在我们开始之前,升级后,我注意到我的@ManagedBean 注释已被弃用。经过一些快速谷歌搜索后,我发现我应该使用 CDI 注释,如 @Named 等,这使我一起 question, from which I learnt that I could not use an external JSF library with WAS's 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 实现才能完成这项工作。

我尝试过的事情:

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

我也听说过一个叫做 "cdi-enablers" 的东西可以帮助我吗?他们是合法的吗?或者只是一些黑客组合在一起使某些东西起作用?

求助!!!

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

如@Gas 在我的 中指出的那样,使用 JSF-2.2 仍然使用 Web 套接字的一种方法是使用 Javax.websocket 包。然而,这个 web 套接字实现的局限性在于,将包含在 SessionScoped ManagedBean 中的数据发送到该会话的客户端远没有像我使用 JSF-2.3 中的 f:websocket 那样容易喜欢做。