diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-08-07 14:36:07 -0230 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-08-07 14:36:07 -0230 |
commit | b36ae21c88735cbd2c39c5ccde2572a8fcc4e928 (patch) | |
tree | dfd5eee6e7d61a9c6efcbaabe916639009aaa9af /java/test/Ice/interrupt/TestControllerI.java | |
parent | Add @Override where possible, and remove trailing white space. (diff) | |
download | ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.tar.bz2 ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.tar.xz ice-b36ae21c88735cbd2c39c5ccde2572a8fcc4e928.zip |
ICE-1593 Handling thread interrupts in Java
- Added Ice.BackgroundIO property to perform all IO in a non-user
thread. This makes Ice for Java interrupt safe. This is implemented
by the QueueRequestHanbler.
- EndpointHostResolver now uses an executor instead of a thread.
- Added java/demo/Ice/interrupt and java/test/Ice/interrupt.
- Made several changes that must be ported to C++ & C#.
- InvocationTimeout exceptions can hang forever.
- Connection establishment is always asynchronous.
- RequestHandler.requestTimeout and asyncRequestTimeout have been
renamed to requestCancel and asyncRequestCancel.
Diffstat (limited to 'java/test/Ice/interrupt/TestControllerI.java')
-rw-r--r-- | java/test/Ice/interrupt/TestControllerI.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/java/test/Ice/interrupt/TestControllerI.java b/java/test/Ice/interrupt/TestControllerI.java new file mode 100644 index 00000000000..c3b9088393f --- /dev/null +++ b/java/test/Ice/interrupt/TestControllerI.java @@ -0,0 +1,69 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +package test.Ice.interrupt; + +import java.util.ArrayList; +import java.util.List; + +class TestControllerI extends test.Ice.interrupt.Test._TestIntfControllerDisp +{ + synchronized void + addUpcallThread() + { + _threads.add(Thread.currentThread()); + } + + synchronized void + removeUpcallThread() + { + _threads.remove(Thread.currentThread()); + // + // Clear the interrupted state after removing the thread. + // + Thread.interrupted(); + } + + @Override + synchronized public void + interrupt(Ice.Current __current) + throws test.Ice.interrupt.Test.CannotInterruptException + { + if(_threads.isEmpty()) + { + throw new test.Ice.interrupt.Test.CannotInterruptException(); + } + for(Thread t : _threads) + { + t.interrupt(); + } + } + + @Override + public void + holdAdapter(Ice.Current current) + { + _adapter.hold(); + } + + @Override + public void + resumeAdapter(Ice.Current current) + { + _adapter.activate(); + } + + TestControllerI(Ice.ObjectAdapter adapter) + { + _adapter = adapter; + } + + final private Ice.ObjectAdapter _adapter; + final private List<Thread> _threads = new ArrayList<Thread>(); +} |