+
+ @Override
+ public UUID monitLongRunningMethod(final RuntimeException ex, final List<String> feedbacks, final long feedbackWaitTimeout) {
+
+ RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
+ @Override
+ public Serializable doRun(IRemotingProgressMonitor monitor) {
+ Serializable result = longRunningMethod(monitor, ex, feedbacks, feedbackWaitTimeout);
+ if(!monitor.isCanceled()) {
+ monitor.addReport("Report");
+ }
+ return result;
+ }
+ };
+
+ UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
+ monitorThread.setPriority(3);
+ monitorThread.start();
+ return uuid;
+ }
+
+ @Override
+ public String longRunningMethod(IRemotingProgressMonitor monitor,
+ RuntimeException ex,
+ List<String> feedbacks,
+ long feedbackWaitTimeout) {
+ int noOfSteps = 10;
+ int stepToThrowException = noOfSteps / 2;
+ int stepToWaitForFeedback = noOfSteps / 2;
+ monitor.beginTask("Long Running Task", noOfSteps);
+ for(int i=0; i<noOfSteps; i++) {
+ try {
+ Thread.sleep(1000);
+ if(i == stepToThrowException && ex != null) {
+ throw ex;
+ }
+ if(feedbacks != null && feedbacks.size() > 0 && i == stepToWaitForFeedback) {
+ for(String feedback : feedbacks) {
+ logger.warn("Monitor waiting for feedback");
+ if(feedbackWaitTimeout <= 0) {
+ monitor.waitForFeedback();
+ } else {
+ monitor.waitForFeedback(feedbackWaitTimeout);
+ }
+ logger.warn(" .. feedback received : " + monitor.getFeedback());
+ monitor.addReport(feedback);
+ }
+ }
+ if(monitor.isCanceled()) {
+ return "Cancelled";
+ }
+ } catch (InterruptedException e) {
+ throw ex;
+ }
+ monitor.worked(1);
+ }
+ monitor.done();
+ return "Success";
+ }
+