88import com .github .bordertech .taskmaster .TaskMasterException ;
99import com .github .bordertech .taskmaster .cache .CacheHelper ;
1010import com .github .bordertech .taskmaster .service .CallType ;
11+ import com .github .bordertech .taskmaster .service .ExceptionUtil ;
1112import com .github .bordertech .taskmaster .service .ResultHolder ;
1213import com .github .bordertech .taskmaster .service .ServiceAction ;
1314import com .github .bordertech .taskmaster .service .ServiceException ;
@@ -46,7 +47,7 @@ public final class ServiceHelperDefault implements ServiceHelper {
4647 private static final Duration DEFAULT_PROCESSING_DURATION = new Duration (TimeUnit .SECONDS , DEFAULT_PROCESSING_DURATION_SECONDS );
4748
4849 @ Override
49- public <S , T > ResultHolder <S , T > handleServiceCall (final S criteria , final ServiceAction <S , T > action ) {
50+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleServiceCall (final S criteria , final ServiceAction <S , T > action ) {
5051 // Check action provided
5152 if (action == null ) {
5253 throw new IllegalArgumentException ("No service action has been provided. " );
@@ -55,22 +56,21 @@ public <S, T> ResultHolder<S, T> handleServiceCall(final S criteria, final Servi
5556 // Do service call
5657 try {
5758 T resp = action .service (criteria );
58- return new ResultHolder <> (criteria , resp );
59+ return new ResultHolder (criteria , resp );
5960 } catch (Exception e ) {
60- ServiceException excp = new ServiceException ("Error calling service." + e .getMessage (), e );
61- return new ResultHolder <>(criteria , excp );
61+ return new ResultHolder (criteria , ExceptionUtil .getSerializableException (e ));
6262 }
6363 }
6464
6565 @ Override
66- public <S , T > ResultHolder <S , T > handleServiceCallType (final Cache <String , ResultHolder > cache ,
66+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleServiceCallType (final Cache <String , ResultHolder > cache ,
6767 final String cacheKey , final S criteria , final ServiceAction <S , T > action , final CallType callType )
6868 throws RejectedTaskException {
6969 return handleServiceCallType (cache , cacheKey , criteria , action , callType , null );
7070 }
7171
7272 @ Override
73- public <S , T > ResultHolder <S , T > handleServiceCallType (final Cache <String , ResultHolder > cache ,
73+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleServiceCallType (final Cache <String , ResultHolder > cache ,
7474 final String cacheKey , final S criteria , final ServiceAction <S , T > action , final CallType callType , final String pool )
7575 throws RejectedTaskException {
7676 if (callType == null ) {
@@ -90,7 +90,7 @@ public <S, T> ResultHolder<S, T> handleServiceCallType(final Cache<String, Resul
9090 }
9191
9292 @ Override
93- public <S , T > ResultHolder <S , T > handleCachedServiceCall (final Cache <String , ResultHolder > cache ,
93+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleCachedServiceCall (final Cache <String , ResultHolder > cache ,
9494 final String cacheKey , final S criteria , final ServiceAction <S , T > action ) {
9595
9696 // Check cache and cache key provided
@@ -115,13 +115,13 @@ public <S, T> ResultHolder<S, T> handleCachedServiceCall(final Cache<String, Res
115115 }
116116
117117 @ Override
118- public <S , T > ResultHolder <S , T > handleAsyncServiceCall (final Cache <String , ResultHolder > cache ,
118+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleAsyncServiceCall (final Cache <String , ResultHolder > cache ,
119119 final String cacheKey , final S criteria , final ServiceAction <S , T > action ) throws RejectedTaskException {
120120 return handleAsyncServiceCall (cache , cacheKey , criteria , action , null );
121121 }
122122
123123 @ Override
124- public <S , T > ResultHolder <S , T > handleAsyncServiceCall (final Cache <String , ResultHolder > cache ,
124+ public <S extends Serializable , T extends Serializable > ResultHolder <S , T > handleAsyncServiceCall (final Cache <String , ResultHolder > cache ,
125125 final String cacheKey , final S criteria , final ServiceAction <S , T > action , final String pool ) throws RejectedTaskException {
126126
127127 // Check cache and cache key provided
@@ -151,16 +151,16 @@ public <S, T> ResultHolder<S, T> handleAsyncServiceCall(final Cache<String, Resu
151151 }
152152
153153 // Setup the bean to hold the service result
154- final ProcessingServiceResult <S , T > result = new ProcessingServiceResult (cacheKey );
154+ final ProcessingMutableResult <S , T > result = new ProcessingMutableResult (cacheKey );
155155 Runnable task = new Runnable () {
156156 @ Override
157157 public void run () {
158158 try {
159159 T resp = action .service (criteria );
160160 result .setResult (resp );
161161 } catch (Exception e ) {
162- ServiceException excp = new ServiceException ( "Error calling service." + e . getMessage (), e );
163- result .setException (excp );
162+ // Check exception is serializable to be held in the cache (sometimes they arent)
163+ result .setException (ExceptionUtil . getSerializableException ( e ) );
164164 }
165165 }
166166 };
@@ -177,7 +177,7 @@ public void run() {
177177 }
178178
179179 @ Override
180- public synchronized <S , T > ResultHolder <S , T > checkASyncResult (final Cache <String , ResultHolder > cache ,
180+ public synchronized <S extends Serializable , T extends Serializable > ResultHolder <S , T > checkASyncResult (final Cache <String , ResultHolder > cache ,
181181 final String cacheKey ) {
182182
183183 // Check cache and cache key provided
@@ -191,7 +191,7 @@ public synchronized <S, T> ResultHolder<S, T> checkASyncResult(final Cache<Strin
191191 String processingKey = getProcessingKey (cache .getName (), cacheKey );
192192
193193 // Get the future
194- TaskFuture <ProcessingServiceResult > future = getProcessingCache ().get (processingKey );
194+ TaskFuture <ProcessingMutableResult > future = getProcessingCache ().get (processingKey );
195195
196196 // Future has expired or been removed from the Cache
197197 if (future == null ) {
@@ -220,7 +220,7 @@ public synchronized <S, T> ResultHolder<S, T> checkASyncResult(final Cache<Strin
220220
221221 // Done, so Extract the result
222222 try {
223- ProcessingServiceResult serviceResult = future .get ();
223+ ProcessingMutableResult serviceResult = future .get ();
224224 ResultHolder result ;
225225 if (serviceResult .isException ()) {
226226 result = new ResultHolder (serviceResult .getMetaData (), serviceResult .getException ());
@@ -288,12 +288,12 @@ protected String getProcessingKey(final String cacheName, final String cacheKey)
288288 }
289289
290290 /**
291- * Used to hold the service result with the ASync processing.
291+ * Used to hold the service result with the ASync processing cache .
292292 *
293293 * @param <M> the meta data type
294294 * @param <T> the result type
295295 */
296- public static final class ProcessingServiceResult < M , T > implements Serializable {
296+ public static final class ProcessingMutableResult < M extends Serializable , T extends Serializable > implements Serializable {
297297
298298 private final M metaData ;
299299 private T result ;
@@ -302,7 +302,7 @@ public static final class ProcessingServiceResult<M, T> implements Serializable
302302 /**
303303 * @param metaData the meta data
304304 */
305- public ProcessingServiceResult (final M metaData ) {
305+ public ProcessingMutableResult (final M metaData ) {
306306 this .metaData = metaData ;
307307 }
308308
0 commit comments