Jakarta ee 在cdi会话上下文之间通信——使用数据库,是否会调用适当的cdi上下文?
我很难让sessionscoped bean和ejb有状态bean在同一JavaEE容器中的用户会话之间进行通信。经过反复试验,我决定使用数据库在用户会话之间传递消息。但是现在我有一个问题,我如何通知用户的会话DB已经更改 我可以在每个用户的会话上下文中启动后台轮询线程来轮询数据库的更改吗?如果这样做可行,除了确保轮询bean在其自己的用户会话上下文中“唤醒”之外,避免阻塞的最佳方法是什么 我使用的是Glassfish 3.1.2,用户会话是CDI sessionscoped bean,带有一些用于JPA数据库访问的有状态EJB。我正在使用CDI事件总线在用户会话中围绕bean传递消息 我尝试使用单例在用户会话之间进行通信。但这不起作用,因为一旦来自用户1的消息传递给用户2的bean,这些bean触发CDI事件,CDI事件就由用户1的会话上下文处理。这很有意义,因为消息是在用户1的会话中创建的Jakarta ee 在cdi会话上下文之间通信——使用数据库,是否会调用适当的cdi上下文?,jakarta-ee,jpa,java-ee-6,cdi,ejb-3.1,Jakarta Ee,Jpa,Java Ee 6,Cdi,Ejb 3.1,我很难让sessionscoped bean和ejb有状态bean在同一JavaEE容器中的用户会话之间进行通信。经过反复试验,我决定使用数据库在用户会话之间传递消息。但是现在我有一个问题,我如何通知用户的会话DB已经更改 我可以在每个用户的会话上下文中启动后台轮询线程来轮询数据库的更改吗?如果这样做可行,除了确保轮询bean在其自己的用户会话上下文中“唤醒”之外,避免阻塞的最佳方法是什么 我使用的是Glassfish 3.1.2,用户会话是CDI sessionscoped bean,带有一些
任何帮助都将不胜感激 我想我必须回答我自己的问题--
org.jboss.weld.context.contextNotActivieException:weld-001303作用域类型javax.enterprise.context.RequestScope没有活动上下文
或特定于线程试图激活的作用域的内容,这真的不是一个bug,它只是未定义的行为如果焊接CDI专家能纠正我的错误,我将不胜感激 我想我必须回答我自己的问题--
org.jboss.weld.context.contextNotActivieException:weld-001303作用域类型javax.enterprise.context.RequestScope没有活动上下文
或特定于线程试图激活的作用域的内容,这真的不是一个bug,它只是未定义的行为如果焊接CDI专家能纠正我的错误,我将不胜感激 我认为CDI事件总线不能用于用户会话之间的通信 用JMS消息代理解决这个问题不是更好吗?您的应用程序将扩展得更好!将其作为单独的实例运行,或将其嵌入到应用程序服务器中。 例如,您可以使用ActiveMQ代理 在JMS主题上发布通知消息,并使用户会话订阅该消息。
我还没有使用,但它似乎能够弥合JMS和CDI之间的差距。使用Seam JMS,您可以在每个用户会话中接收JMS消息。文档中的示例解释了如何为每个用户在@SessionScoped bean的@PostConstruct中注册JMS侦听器。我认为CDI事件总线不能用于用户会话之间的通信 用JMS消息代理解决这个问题不是更好吗?您的应用程序将扩展得更好!将其作为单独的实例运行,或将其嵌入到应用程序服务器中。 例如,您可以使用ActiveMQ代理 在JMS主题上发布通知消息,并使用户会话订阅该消息。 我还没有使用,但它似乎能够弥合JMS和CDI之间的差距。使用Seam JMS,您可以在每个用户会话中接收JMS消息。文档中的示例解释了如何为每个用户在@SessionScoped bean的@PostConstruct中注册JMS侦听器。不,它不起作用——我试过了。当JMS消息