我开始遇到weblogic 10.3.4中部署的webservice的问题。在这个Web服务中,我创建了一个新的Callable类来处理命令:
public class CommandById implements Callable<DataBean> {
private String docId = null;
private String folder = null;
public CommandById(final String docId, final String folder) {
this.docId = docId;
this.folder = folder;
}
@Override
public DataBean call() throws Exception {
// Do something with docId and folder
}
}
所以,我以这种方式在另一个类中使用这个类:
ExecutorService executor = Executors.newFixedThreadPool(NTHREADS);
Callable<DataBean> worker = new CommandById(docId,folder);
Future<DataBean> submit = executor.submit(worker);
DataBean doc = null;
try {
doc = submit.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
第一次使用,process命令成功。但是,当我再次打电话时,我开始学习java.util.concurrent.RejectedExecutionException,当我写executor.submit(worker)
时指向该行。
stacktrace:
Error: [ServletContext@1747534847[app:BancoChile-Url module:reports path:/reports spec-version:2.5]] Servlet failed with Exception
cl.xxx.yyy.Exception: java.util.concurrent.RejectedExecutionException
at cl.xxx.yyy.servlet.Worker.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
Caused by: java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1774)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:768)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:656)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
at cl.xxx.yyy.zzz.aaa.getDocument(aaa.java:252)
at cl.xxx.yyy.bbb.processId(bbb.java:941)
at cl.xxx.yyy.zzz.getResultsById(zzz.java:692)
at cl.xxx.yyy.zzz.getResults(zzz.java:384)
... 16 more
答案 0 :(得分:0)
缺少一些东西。
如果超过允许的最大线程数(RejectedExecutionException
多少),您可以获得NTHREADS
?或者在线程池处于关闭过程中。
你总是使用相同的线程池吗?如果是这样,你的finally块中的executor.shutdown()
可以解释这一点。