首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Executor框架的Weblogic SOAP SOAP服务后台线程创建

基于Executor框架的Weblogic SOAP SOAP服务后台线程创建
EN

Stack Overflow用户
提问于 2015-10-21 13:09:24
回答 2查看 497关注 0票数 2

我们在Weblogic服务器上部署了一个SOAP We服务,流程如下所示。

SOAP客户端将向Webservice发送消息,Webservice验证消息并将确认作为服务的响应发送。但是,应该在后台执行一个SocketConnection,以进一步异步地处理消息。

提供的实现是在后台使用ChildThread生成一个ExecutorService.newFixedThreadPool。这是正在使用的代码(并不是webservice实现文件的所有代码都在这里发布)。

代码语言:javascript
复制
  if ("103".equals(requestType)) {
    ExecutorService executorService = Executors.newFixedThreadPool(1);
    executorService.submit(new MessageProcessing103(coreMsg, otherDetails));
  } else if ("104".requestType) {
         ExecutorService executorService = Executors.newFixedThreadPool(1);
         executorService.submit(new MessageProcessing104(coreMsg, otherDetails));
    }

有了上面的实现,可伸缩性肯定是个问题,但到目前为止,我们可以接受它。不过,你能帮我做以下的查询吗?

  1. 由于后台线程的活动时间很长,这是否意味着将使用相同的派生线程来执行所有请求?
  2. 如果两个请求间隔在几秒钟内到达,那么第二个请求是处于等待状态还是会生成新线程?
  3. 我们不是要关闭遗嘱执行人,所以在这种情况下会遇到什么问题呢?
EN

回答 2

Stack Overflow用户

发布于 2015-10-21 15:39:28

  1. 对于每个请求,创建一个只执行该请求的新线程。
  2. 一样的。
  3. 很快,您就会遇到一个由OutOfMemoryError创建并没有关闭的执行程序,它占用了所有内存。

我的建议不是为每个请求创建新的执行器,而是重用相同的执行器。让执行者包含几个线程。一个都没有。

票数 1
EN

Stack Overflow用户

发布于 2015-10-22 05:04:47

这就是我为上述问题设计的方法。

请有人验证并确认这是否仍会导致内存不足或线程问题。

首先,创建一个ThreadPool来服务于平均并行线程。

代码语言:javascript
复制
public static final ExecutorService executorService = Executors.newFixedThreadPool(3);

接下来,为消息类型103或104调用相应的MessageProcessor实例。

代码语言:javascript
复制
  if ("103".equals(requestType)) {
       executorService.submit(new MessageProcessing103(coreMsg, otherDetails));
  } else if ("104".requestType) {
       executorService.submit(new MessageProcessing104(coreMsg, otherDetails));
    }

最后,如果Webservice上下文破坏,请关闭executorService。为此,将在web.xml中配置侦听器。

代码语言:javascript
复制
 <listener>
<listener-class>com.saurav.listener.AppContextListener</listener-class></listener>

AppContextListener --> contextDestroyed()函数中的代码

代码语言:javascript
复制
ImplClass.executorService.shutdown();

如果出现任何异常,将处理相同的事件并执行shutdownNow()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33260246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档