我有一个 JavaEE 应用程序,它有 2 个 Web 应用程序。我还有另一个库 Web 模块,其中包含 common_bean,注释为@ApplicationScoped
我的问题是:我可以在两个 Web 应用程序之间共享 common_bean 实例吗?
更新-我做了测试
在 Web 应用程序 1 (/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 应用程序 2 (/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);
}
}
结果
-
如果我先运行 /Web1/Servlet1 然后运行 /Web2/Servlet2:
/Web1/Servlet1 ---------- 有效
/Web2/Servlet2 ------- 因 CDI 异常而失败
-
如果我先运行 /Web2/Servlet2 然后运行 /Web1/Servlet1: ( 重新启动服务器然后重新测试)
/Web2/Servlet2 ---------- 有效
/Web1/Servlet1 ------- 因 CDI 异常而失败
任何意见!
我发现了这个问题。我喜欢在这里发布解决方案。它可能会帮助某人:
解决办法是:将 Web 库模块配置为 EAR 模块组件(Lib jar 模块) - 通过这样做,仅创建 Common bean 实例,并且该实例将在同一 EAR 中的所有 Web 应用程序之间共享。
我不确定这是否是 CDI 的规范,但它适用于 Glassfish 和 Wildfly。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)