我正在创建一个 Java EE 应用程序,它允许用户从 Web 界面添加/删除“socketinfo”表(存储在数据库中)。如果用户从 Web 界面启用“socketinfo”,应用程序服务器必须为传入的数据包创建一个套接字侦听器并处理数据。如果用户禁用或删除“socketinfo”,则必须删除套接字侦听器。整个产品必须包含在一个耳朵中,并且最好是合规的。我考虑过但遇到问题的一些方法是:
为套接字创建一个 JCA 资源适配器并将 MDB 用作侦听器。我在这里遇到的问题是,当用户添加 MDB 时,我无法弄清楚如何以编程方式为不同的套接字部署 MDB。
创建一个@Singleton/@Service ejb,通过仔细同步来管理守护线程。可以将单例 ejb 注入业务层,以便在正确的工作流程中进行 CRUD 操作和套接字操作。这里的问题是,假设从 EJB 创建线程被认为是一种不好的做法,并且不符合规范(即使正确处理了单例生命周期并且有适当的同步机制?)。
将线程放入域模型(另一个单例?)并让 EJB 使用该模型。这是所有这些中最糟糕的,因为应用程序服务器往往有多个类加载器,一般来说容器支持较少,再加上这会受到所有 2. 的影响。
知道如何在 Java EE 中正确处理这种情况吗?
编辑:对这个问题的扩展:假设我决定像 ewernli 在他的解决方案 3 中建议的那样解决这个问题,我在 JCA 中这样做(使用自定义接口来添加内部线程)可以获得什么我不会从(精心设计)单身?虽然创建资源适配器看起来不像是一项艰巨的任务,但它似乎并不完全是微不足道的,并且可能会有点耗时(对于其他开发人员来说可能更难遵循)。