001
014
015 package com.liferay.portal.kernel.concurrent;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.util.LoggingTimer;
020
021
024 public abstract class ThrowableAwareRunnable implements Runnable {
025
026 public Throwable getThrowable() {
027 return _throwable;
028 }
029
030 public boolean hasException() {
031 if (_throwable != null) {
032 return true;
033 }
034
035 return false;
036 }
037
038 @Override
039 public void run() {
040 try (LoggingTimer loggingTimer = new LoggingTimer()) {
041 doRun();
042 }
043 catch (Exception e) {
044 _log.error("Unable to process runnable: " + e.getMessage(), e);
045
046 _throwable = e;
047 }
048 }
049
050 protected abstract void doRun() throws Exception;
051
052 private static final Log _log = LogFactoryUtil.getLog(
053 ThrowableAwareRunnable.class);
054
055 private Throwable _throwable;
056
057 }