相关疑难解决方法(0)

为什么不鼓励在Java EE容器中生成线程?

我学到的关于Java EE开发的第一件事就是我不应该在Java EE容器中生成我自己的线程.但是当我开始思考它时,我不知道原因.

你能清楚地解释为什么气馁吗?

我相信大多数企业应用程序都需要某种异步工作,如邮件守护进程,空闲会话,清理工作等.

因此,如果确实不应该生成线程,那么在需要时执行它的正确方法是什么?

java multithreading java-ee

118
推荐指数
4
解决办法
5万
查看次数

Java EE规范和多线程

我正在使用Struts和Spring编写Java EE应用程序.在其中一个操作中,存在大量数据库处理,因此存在性能问题.我想知道的是我可以在这里使用多线程吗?我认为Java EE规范不允许创建自定义线程,而不是由Server创建的线程(我使用Weblogic).请指导我完成这个.

java multithreading java-ee

28
推荐指数
3
解决办法
3万
查看次数

无状态会话bean中的多线程?

EJB 3.0规范不允许无状态会话bean的业务方法创建新线程.这是为什么?创建仅执行原始计算并且从不调用应用程序服务器的其他工作线程有什么问题?

比如说,我的会话bean实现了一个允许用户上传图像的服务,而业务方法对这些图像进行了cpu密集型图像处理.那么即使机器有8个或更多核心,它也只能使用一个cpu核心来完成这项工作?如果我利用第三方图像处理库,在内部创建工作线程,我也会违反EJB规范,即使该库和这些线程根本不与EJB容器有关.这似乎不对.

如果我忽略EJB规则并仍然创建一些工作线程来进行cpu密集处理会发生什么?当然这些线程永远不会触及任何app服务器对象,bean线程会在返回之前加入它们.还能发生什么不好的事吗?

java multithreading ejb java-ee ejb-3.0

8
推荐指数
1
解决办法
1万
查看次数

Java EE:从域模型动态创建和删除套接字侦听器

我正在创建一个Java EE应用程序,允许用户从Web界面添加/删除"socketinfo"表(存储在数据库中).如果用户从Web界面启用"socketinfo",则应用程序服务器必须为传入的数据包创建套接字侦听器并处理数据.如果用户禁用或删除"socketinfo",则必须删除套接字侦听器.整个产品必须包含在一只耳朵中,并且最好是顺从的.我考虑过但遇到问题的一些方法是:

  1. 为套接字创建JCA资源适配器并使用MDB作为侦听器.我遇到的问题是,当用户添加MDB时,我无法弄清楚如何以编程方式为不同的套接字部署MDB.

  2. 创建一个@ Singleton/@ Service ejb,通过仔细同步来管理守护程序线程.单例ejb可以注入业务层,以便在正确的工作流程中进行CRUD操作和套接字操作.这里的问题是,据说从EJB创建线程被认为是一种不好的做法,并且不符合规范(即使正确处理了单例生命周期并且有适当的同步机制?).

  3. 将线程放在域模型中(另一个单例?)并让EJB使用该模型.这是所有这些中最糟糕的,因为应用程序服务器往往有多个类加载器,一般来说容器支持较少,而且这样做会受到影响.

知道如何在Java EE中正确处理这种情况吗?

编辑:这个问题的扩展:假设我决定像ewernli在他的解决方案3中所建议的那样处理这个问题,我在JCA(使用自定义接口添加内部线程)中做到这一点,我不会从中获得(精心设计的单身人士?虽然创建一个资源适配器看起来并不是一个可怕的任务,但它似乎并不是完全无关紧要的,可能需要花费一些时间(对于其他开发人员来说可能更难以遵循).

java domain-driven-design ejb jca java-ee

5
推荐指数
1
解决办法
819
查看次数