if (mainCore != null) { if (mainCore.state == State.ACTIVE) { mainCore.control().doTrigger(Kill.event, mainCore.wid, mainCore);
@Override public void run() { ResolveAction ra = fh.handle(f); switch (ra) { case RESOLVED: Kompics.logger.info("Fault {} was resolved by user.", f); break; case IGNORE: Kompics.logger.info("Fault {} was declared to be ignored by user. Resuming component...", f); f.source.markSubtreeAs(Component.State.PASSIVE); f.source.control().doTrigger(Start.event, 0, mainCore); break; case DESTROY: Kompics.logger.info("User declared that Fault {} should quit Kompics...", f); Kompics.forceShutdown(); { try { Kompics.waitForTermination(); } catch (InterruptedException ex) { Kompics.logger.error("Interrupted while waiting for Kompics termination..."); System.exit(1); } } Kompics.logger.info("finished quitting Kompics."); break; default: Kompics.logger.info("User declared that Fault {} should quit JVM...", f); System.exit(1); } }
@Override public void escalateFault(Fault fault) { if (parent != null) { parent.control().doTrigger(fault, wid, this); } else { // StackTraceElement[] stackTrace = throwable.getStackTrace(); // System.err.println("Kompics isolated fault: " // + throwable.getMessage()); // do { // for (int i = 0; i < stackTrace.length; i++) { // System.err.println(" " + stackTrace[i]); // } // throwable = throwable.getCause(); // if (throwable != null) { // stackTrace = throwable.getStackTrace(); // System.err.println("Caused by: " + throwable + ": " // + throwable.getMessage()); // } // } while (throwable != null); logger().error("A fault was escalated to the root component: \n{} \n\n", fault); Kompics.handleFault(fault); // System.exit(1); } }
@Override public void handle(Fault event) { ResolveAction ra = component.handleFault(event); switch (ra) { case RESOLVED: logger().info("Fault {} was resolved by user.", event); break; case IGNORE: logger().info("Fault {} was declared to be ignored by user. Resuming component...", event); markSubtreeAtAs(event.source, State.PASSIVE); event.source.control().doTrigger(Start.event, wid, JavaComponent.this); break; case DESTROY: logger().info("User declared that Fault {} should destroy component tree...", event); destroyTreeAtParentOf(event.source); logger().info("finished destroying the subtree."); break; default: escalateFault(event); } } };