@Override
public void startNewRemoteFragment(PlanFragment fragment){
logger.debug("Received remote fragment start instruction", fragment);
FragmentContext context = new FragmentContext(bee.getContext(), fragment.getHandle(), null, null,new FunctionImplementationRegistry(bee.getContext().getConfig()));
BitTunnel tunnel = bee.getContext().getBitCom().getTunnel(fragment.getForeman());
RemoteFragmentRunnerListener listener = new RemoteFragmentRunnerListener(context, tunnel);
try{
FragmentRoot rootOperator = bee.getContext().getPlanReader().readFragmentOperator(fragment.getFragmentJson());
RootExec exec = ImplCreator.getExec(context, rootOperator);
FragmentRunner fr = new FragmentRunner(context, exec, listener);
bee.addFragmentRunner(fr);
}catch(IOException e){
listener.fail(fragment.getHandle(), "Failure while parsing fragment execution plan.", e);
}catch(ExecutionSetupException e){
listener.fail(fragment.getHandle(), "Failure while setting up execution plan.", e);
} catch (Exception e) {
listener.fail(fragment.getHandle(), "Failure due to uncaught exception", e);
} catch (OutOfMemoryError t) {
if(t.getMessage().startsWith("Direct buffer")){
listener.fail(fragment.getHandle(), "Failure due to error", t);
}else{
throw t;
}
}