Author: asoldano
Date: 2013-08-23 08:21:24 -0400 (Fri, 23 Aug 2013)
New Revision: 17886
Modified:
stack/cxf/trunk/modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/cxf/continuations/EndpointImpl.java
Log:
[JBWS-3695] Fixing concurrency issues in continuation testcase - thanks Petr Sakar for the
patch
Modified:
stack/cxf/trunk/modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/cxf/continuations/EndpointImpl.java
===================================================================
---
stack/cxf/trunk/modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/cxf/continuations/EndpointImpl.java 2013-08-23
11:47:32 UTC (rev 17885)
+++
stack/cxf/trunk/modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/cxf/continuations/EndpointImpl.java 2013-08-23
12:21:24 UTC (rev 17886)
@@ -38,37 +38,39 @@
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class EndpointImpl
{
- private Executor executor = Executors.newCachedThreadPool();
+ private final Executor executor = Executors.newCachedThreadPool();
private static final int TIMEOUT = 2000;
@Resource
- WebServiceContext ctx;
+ private WebServiceContext ctx;
public String echo(String user)
{
final ContinuationProvider cp = (ContinuationProvider)
ctx.getMessageContext().get(ContinuationProvider.class.getName());
final Continuation c = cp.getContinuation();
- if (c.isNew())
+ synchronized (c)
{
- FutureTask<String> task = new FutureTask<String>(new
MyCallable(user, c));
- c.setObject(task);
- executor.execute(task);
- c.suspend(TIMEOUT);
- }
- else
- {
- @SuppressWarnings("unchecked")
- FutureTask<String> task = (FutureTask<String>) c.getObject();
- if (task.isDone())
+ if (c.isNew())
{
- try
+ FutureTask<String> task = new FutureTask<String>(new
MyCallable(user, c));
+ c.setObject(task);
+ executor.execute(task);
+ }
+ else
+ {
+ @SuppressWarnings("unchecked")
+ FutureTask<String> task = (FutureTask<String>) c.getObject();
+ if (task.isDone())
{
- return task.get();
+ try
+ {
+ return task.get();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
}
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
}
c.suspend(TIMEOUT);
}
@@ -78,8 +80,8 @@
private class MyCallable implements Callable<String>
{
- private String user;
- private Continuation c;
+ private final String user;
+ private final Continuation c;
public MyCallable(String user, Continuation c)
{
Show replies by date