当java程序接收到异步消息时,是否有办法通知jsf/spring bean ?此外,java程序是一个java BayeuxClient (Cometd)作为pojo。程序成功接收到元通道和订阅通道上的消息,如下所示。
@Listener(Channel.META_CONNECT)
public void metaConnect(Message message) {
boolean connected = message.isSuccessful();
...
}
@Subscription("/notification")
public void subscribeUpdates(Message message) {
String updates=message.getDataAsMap().toString()
.....
}
FacesContext在这些方法中是不可用的,即使bean被注释为(@Component @Scope("session")用于jsf/spring集成。由于facesContext不可用,bean不能被注入。如何通过上述方法注入jsf bean或通知spring bean ?
看看CometD-Spring集成。
你可以在Spring配置文件中定义CometD服务(或对它们进行注释),并将依赖关系与通常的Spring机制连接起来。
我不建议直接访问FacesContext
,因为这会将您绑定到HTTP传输,并且您将无法使用WebSocket传输,这将给您带来性能提升。
我建议您将消息传递逻辑重构为与传输无关的pojo,即不依赖于HttpServletRequest
, HttpSession
, FacesContext
等类