public static VirtualNetworkChannel connect(Positive<Network> sourcePort, Negative<Network> deadLetterBox) { VirtualNetworkChannel vnc = new VirtualNetworkChannel(sourcePort, deadLetterBox); sourcePort.addChannel(vnc); deadLetterBox.addChannel(vnc); return vnc; }
if (mainCore != null) { if (mainCore.state == State.ACTIVE) { mainCore.control().doTrigger(Kill.event, mainCore.wid, mainCore);
public FRComponent(FRInit init) { self = init.frAddr; acker = init.ackerAddr; Component netw = nGen.generate(myProxy, self); connect(netw.provided(Network.class), net.getPair()); subscribe(startHandler, control); subscribe(ackHandler, net); }
logger().debug("Slowly dying..."); state = Component.State.STOPPING; ((PortCore<ControlPort>) getControl().getPair()).cleanEvents(); // if multiple kills are queued up just ignore everything for (ComponentCore child : children) { if (child.state() != Component.State.ACTIVE) { logger().debug("dying..."); state = Component.State.PASSIVE; ((PortCore<ControlPort>) getControl().getPair()).cleanEvents(); // if multiple kills are queued up just ignore everything component.tearDown(); if (parent != null) {
@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); } }
public static VirtualNetworkChannel connect(Positive<Network> sourcePort, Negative<Network> deadLetterBox, ChannelSelector<?, ?> selector) { VirtualNetworkChannel vnc = new VirtualNetworkChannel(sourcePort, deadLetterBox); sourcePort.addChannel(vnc, selector); deadLetterBox.addChannel(vnc); return vnc; }
@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); } } };