sca-j message
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]
Subject: [NEW ISSUE] Problem with Java CAA Test Case JCA_11017
- From: Mike Edwards <mike_edwards@uk.ibm.com>
- To: "OASIS Java" <sca-j@lists.oasis-open.org>
- Date: Tue, 13 Sep 2011 12:07:44 +0100
Target:
sca-j-caa-1.1-testcases-csd02.zip
Description:
Testcase JCA_11017 has a problem which
has recently been revealed by a fix to the Apache Tuscany runtime.
11017 is a test of Asynchronous capabilities
and as a result has code that is concerned with synchronization between
the activities of multiple threads.
In the class /JCA_General_POJO/src/main/java/org/oasisopen/sca/test/service1AsyncRefImpl.java,
there is code that
handles an SCA asynchronous service
using callbacks and the synchronization between the invoking thread and
the
callback is handled by means of a CountDownLatch.
However, the latch is potentially used
multiple times, with multiple calls to the service being made. This
requires a
new latch for each request - however,
the current code only allocates a single latch for all subsequent invocations.
This fails causing the incorrect result
to be returned to the test runner client.
Current code:
private
CallbackHandler callback = new
CallbackHandler();
private
volatile
String asyncResponse = null;
private
CountDownLatch theLatch = new
CountDownLatch(1);
private
class
CallbackHandler implements
AsyncHandler<String> {
public
void
handleResponse(Response<String> arg0) {
try
{
asyncResponse = (String)arg0.get();
} catch
(ExecutionException e) {
//
An ExecutionException signals that the invocation of the target service
threw the exception
Throwable t = e.getCause();
asyncResponse = "Exception
received when Response.get() invoked: "
+ t.toString();
} catch
(Exception e) {
asyncResponse = "Exception
received when Response.get() invoked: "
+ e.getClass().toString() + "
" + e.getMessage();
} //
end try
theLatch.countDown();
} //
end handleResponse
} //
end class CallbackHandler
......
if(
invoke.equals("asyncCallback"))
{
//
Invoke async callback method...
Future<?> theFuture = reference1.operation1Async(inputs.next(),
callback);
if(
theFuture == null
) {
result
+= "No Future returned
";
} else
{
result
+= "Future returned
";
} //
end if
// Wait
for the asynchronous return of the response data from the invoked service
operation
try
{
theLatch.await(10,
TimeUnit.SECONDS);
} catch
(InterruptedException e) {
result
+= "Interrupted
exception received when waiting for the async callback";
} //
end try
result += asyncResponse;
} //
end if
Proposal:
Update the code to allocate a new latch
for each invocation that expects an async callback response:
private
CallbackHandler callback
= new
CallbackHandler();
private
volatile
String asyncResponse
= null;
private
volatile
CountDownLatch theLatch
= null;
private
class
CallbackHandler implements
AsyncHandler<String> {
public
void
handleResponse(Response<String> arg0) {
try
{
asyncResponse
= (String)arg0.get();
} catch
(ExecutionException e) {
//
An ExecutionException signals that the invocation of the target service
threw the exception
Throwable t = e.getCause();
asyncResponse
= "Exception
received when Response.get() invoked: "
+ t.toString();
} catch
(Exception e) {
asyncResponse
= "Exception
received when Response.get() invoked: "
+ e.getClass().toString() + "
" + e.getMessage();
} //
end try
theLatch.countDown();
} //
end handleResponse
}
// end class CallbackHandler
........
if(
invoke.equals("asyncCallback"))
{
//
Create a new latch to coordinate between this invoking method and the callback
method
theLatch
= new
CountDownLatch(1);
//
Invoke async callback method...
Future<?> theFuture = reference1.operation1Async(inputs.next(),
callback);
if(
theFuture == null
) {
result
+= "No Future
returned ";
} else
{
result
+= "Future returned
";
} //
end if
//
Wait for the asynchronous return of the response data from the invoked
service operation
try
{
theLatch.await(10,
TimeUnit.SECONDS);
} catch
(InterruptedException e) {
result
+= "Interrupted
exception received when waiting for the async callback";
} //
end try
result += asyncResponse;
} //
end if
Yours, Mike
|
|
Dr Mike Edwards
| Mail Point 137, Hursley
Park
|
|
STSM
| Winchester, Hants SO21
2JN
|
SCA, Cloud Computing
& Services Standards
| United Kingdom
|
Co-Chair OASIS SCA
Assembly TC
|
|
|
Chair UK ISO SC38
mirror committee (Cloud & SOA)
|
|
|
IBM Software Group
|
|
|
Phone:
| +44-1962 818014
|
|
|
Mobile:
| +44-7802-467431 (274097)
|
|
|
e-mail:
| mike_edwards@uk.ibm.com
|
|
|
|
|
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]