我们可以在同一个 EAR 中跨 Web 应用程序共享 CDI @ApplicationScoped bean 实例吗?

Can we share CDI @ApplicationScoped bean instance accross web application in the same EAR?

我有一个包含 2 个 Web 应用程序的 JavaEE 应用程序。我还有另一个库 Web 模块,其中包含 common_bean,由 @ApplicationScoped

注释

我的问题是:我可以在两个 Web 应用程序之间共享 common_bean 实例吗?

已更新 - 我做了测试

在 Web App1 (/web1)

@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {

@Inject
CommonBean commonBean;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    commonBean.setValue("Servlet1: " + System.currentTimeMillis() + "--" + commonBean);
}
}

在 Web App2 (/web2)

@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {

@Inject
CommonBean commonBean;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    commonBean.setValue("Servlet2: " + System.currentTimeMillis() + "--" + commonBean);
}
}

结果

有什么意见!

我发现了问题。我喜欢 post 这里的解决方案。它可能对某人有帮助:

解决方案是:配置Web库模块为EAR Module Assembly(Lib jar module) - 通过这样做,只创建了Common bean的实例,这个实例将被共享跨同一 EAR 中的所有 Web 应用程序。

我不确定这是不是 CDI 的规范,但它适用于 Glassfish 和 Wildfly。