1
2
3
4
5
6
7
8
9
10
11 package org.mule.api;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.transformer.TransformerException;
15 import org.mule.util.concurrent.DaemonThreadFactory;
16
17 import java.util.List;
18
19 import edu.emory.mathcs.backport.java.util.concurrent.Callable;
20 import edu.emory.mathcs.backport.java.util.concurrent.ExecutionException;
21 import edu.emory.mathcs.backport.java.util.concurrent.Executor;
22 import edu.emory.mathcs.backport.java.util.concurrent.Executors;
23 import edu.emory.mathcs.backport.java.util.concurrent.FutureTask;
24 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
25 import edu.emory.mathcs.backport.java.util.concurrent.TimeoutException;
26
27
28
29
30
31
32
33 public class FutureMessageResult extends FutureTask
34 {
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 private static final Executor DefaultExecutor = Executors.newSingleThreadExecutor(
57 new DaemonThreadFactory("MuleDefaultFutureMessageExecutor"));
58
59
60 private Executor executor;
61
62
63 private List transformers;
64
65 protected MuleContext muleContext;
66
67 public FutureMessageResult(Callable callable, MuleContext muleContext)
68 {
69 super(callable);
70 this.executor = DefaultExecutor;
71 this.muleContext = muleContext;
72 }
73
74
75
76
77
78
79
80 public void setExecutor(Executor e)
81 {
82 if (e == null)
83 {
84 throw new IllegalArgumentException("Executor must not be null.");
85 }
86
87 synchronized (this)
88 {
89 this.executor = e;
90 }
91 }
92
93
94
95
96
97
98
99 public void setTransformers(List t)
100 {
101 synchronized (this)
102 {
103 this.transformers = t;
104 }
105 }
106
107 public MuleMessage getMessage() throws InterruptedException, ExecutionException, MuleException
108 {
109 return this.getMessage(this.get());
110 }
111
112 public MuleMessage getMessage(long timeout)
113 throws InterruptedException, ExecutionException, TimeoutException, MuleException
114 {
115 return this.getMessage(this.get(timeout, TimeUnit.MILLISECONDS));
116 }
117
118 private MuleMessage getMessage(Object obj) throws MuleException
119 {
120 MuleMessage result = null;
121 if (obj != null)
122 {
123 if (obj instanceof MuleMessage)
124 {
125 result = (MuleMessage)obj;
126 }
127 else
128 {
129 result = new DefaultMuleMessage(obj, muleContext);
130 }
131
132 synchronized (this)
133 {
134 if (transformers != null)
135 {
136 result.applyTransformers(null, transformers, null);
137 }
138 }
139
140 }
141 return result;
142 }
143
144
145
146
147 public void execute()
148 {
149 synchronized (this)
150 {
151 executor.execute(this);
152 }
153 }
154
155 }