X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2FDetachedExecutionServerImpl.java;h=35b9d63d537ffb6d5ce15e792b04907a9588fa78;hb=f198cdf84f9c6b5312825672450f92bc8451ede3;hp=718809ec01689017332d5767ad5d67f6a2b924e2;hpb=055bb5d4c9fdf12878e7e5798569101a5c6e441c;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java index 718809ec0..35b9d63d5 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java @@ -9,15 +9,19 @@ import org.argeo.slc.detached.admin.CloseSession; import org.argeo.slc.detached.admin.OpenSession; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.springframework.context.ApplicationContext; +import org.springframework.osgi.context.BundleContextAware; -public class DetachedExecutionServerImpl implements DetachedExecutionServer { +public class DetachedExecutionServerImpl implements DetachedExecutionServer, + BundleContextAware { private final static Log log = LogFactory .getLog(DetachedExecutionServerImpl.class); private final DetachedContextImpl detachedContext; private final List sessions; - private int skipCount = 0; + private int skipCount = 1;// start skipCount at 1 since the first step is + // always an open session private BundleContext bundleContext; @@ -29,16 +33,20 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer { public synchronized DetachedAnswer executeRequest(DetachedRequest request) { DetachedAnswer answer = null; try { - // DetachedStep step = null; - // Find action ServiceReference[] refs = bundleContext.getAllServiceReferences( - StaticRefProvider.class.getName(), null); + ApplicationContext.class.getName(), null); Object obj = null; for (int i = 0; i < refs.length; i++) { - StaticRefProvider provider = (StaticRefProvider) bundleContext + ApplicationContext appContext = (ApplicationContext) bundleContext .getService(refs[i]); - obj = provider.getStaticRef(request.getRef()); + try { + obj = appContext.getBean(request.getRef()); + } catch (Exception e) { + // silent + if (log.isTraceEnabled()) + log.trace("Could not find ref " + request.getRef(), e); + } if (obj != null) { break; } @@ -61,23 +69,18 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer { throw new DetachedException("Unknown action type " + obj.getClass() + " for action with ref " + request.getRef()); - } else { - log.info("Processed '" + request.getRef() + "' (path=" - + request.getPath() + ")"); } - - } catch (DetachedException e) { + } catch (Exception e) { answer = new DetachedAnswer(request); answer.setStatus(DetachedAnswer.ERROR); answer.setLog(e.getMessage()); - } catch (Exception e) { - e.printStackTrace(); - throw new DetachedException( - "Unexpected exception while executing request " + request, - e); } getCurrentSession().getRequests().add(request); getCurrentSession().getAnswers().add(answer); + if (log.isDebugEnabled()) + log.debug("Processed '" + request.getRef() + "' (status=" + + answer.getStatusAsString() + ", path=" + + request.getPath() + ")"); return answer; } @@ -110,6 +113,19 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer { if (previousAnswer.getStatus() != DetachedAnswer.ERROR) { execute = false; + String msg = "Skipped path " + request.getPath() + + " (skipCount=" + skipCount + ")"; + skippedLog.append(msg); + log.info(msg); + skipCount++; + } else { + log + .info("Path " + + request.getPath() + + " was previously in error, executing it again." + + " (skipCount=" + skipCount + + "). Reset skip count to 1"); + skipCount = 1; } } else { // went further as skip count, doing nothing. @@ -121,8 +137,6 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer { DetachedStep step = (DetachedStep) obj; answer = step.execute(detachedContext, request); } else { - skippedLog.append("Skipped path " + request.getPath() - + " (skipCount=" + skipCount + ")"); answer = new DetachedAnswer(request); answer.setStatus(DetachedAnswer.SKIPPED); answer.setLog(skippedLog.toString()); @@ -178,7 +192,7 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer { return (DetachedSession) sessions.get(sessions.size() - 2); } - public void init(BundleContext bundleContext) { + public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; }