|
1 |
| package net.sf.crispy.concurrent; |
|
2 |
| |
|
3 |
| import java.lang.reflect.Method; |
|
4 |
| |
|
5 |
| import net.sf.crispy.InvocationException; |
|
6 |
| import net.sf.crispy.impl.ServiceManager; |
|
7 |
| |
|
8 |
| |
|
9 |
| |
|
10 |
| |
|
11 |
| |
|
12 |
| |
|
13 |
| |
|
14 |
| |
|
15 |
| |
|
16 |
| public class ThreadWorker { |
|
17 |
| |
|
18 |
| private ThreadController threadController = null; |
|
19 |
| |
|
20 |
872
| public ThreadWorker(ThreadController pvThreadController) {
|
|
21 |
872
| threadController = pvThreadController;
|
|
22 |
| } |
|
23 |
| |
|
24 |
312
| protected Thread createNewThread(Runnable pvRunnable) {
|
|
25 |
312
| Thread lvThread = new Thread(pvRunnable);
|
|
26 |
| |
|
27 |
312
| return lvThread;
|
|
28 |
| } |
|
29 |
| |
|
30 |
312
| public void executeAsynchrone (final Object pvObject, final Method pvMethod, final Object[] pvArgs,
|
|
31 |
| final ExecuteCallback pvExecutorCallback, final AsynchronousCallback pvAsynchroneCallback) { |
|
32 |
| |
|
33 |
312
| Runnable lvRunnable = new Runnable() {
|
|
34 |
| |
|
35 |
312
| public void run() {
|
|
36 |
312
| String lvMethodName = (pvMethod == null ? "NoMethodName" : pvMethod.getName());
|
|
37 |
312
| try {
|
|
38 |
312
| Object lvResult = pvExecutorCallback.execute(pvObject, pvMethod, pvArgs);
|
|
39 |
306
| pvAsynchroneCallback.handleResult(lvResult, lvMethodName);
|
|
40 |
| } catch (Exception e) { |
|
41 |
| if (ServiceManager.DEBUG_MODE_ON == true) { |
|
42 |
| e.printStackTrace(); |
|
43 |
| } |
|
44 |
6
| InvocationException lvException = new InvocationException("Exception by execution the method" +
|
|
45 |
| pvMethod + " with parameter: " + pvArgs, e); |
|
46 |
6
| pvAsynchroneCallback.handleError(lvException, lvMethodName);
|
|
47 |
| } |
|
48 |
| finally { |
|
49 |
312
| threadController.releasThreadWorker(ThreadWorker.this);
|
|
50 |
| } |
|
51 |
| } |
|
52 |
| |
|
53 |
| }; |
|
54 |
312
| createNewThread(lvRunnable).start();
|
|
55 |
| } |
|
56 |
| |
|
57 |
| } |