public static int test(Object channel, long action, Object ... args) {
        System.out.println("Sending action:" + action + " across channel:'" + channel.toString() + "'");
        int returnCode = 0;

        if(args.length > 0) {
            System.out.println("   Arguments:");
            for(Object arg:args)
                System.out.println("      " + arg.getClass().getName() + ": " + arg.toString());
        } else {
            System.out.println("   No Arguments");
        }

        EventActionSendResult sendResult = EventRouter.send(channel, action, args);

        if(sendResult.getResults() != null && sendResult.getResults().size() > 0) {
            System.out.println("   Results:");
            for(EventActionResult result:sendResult.getResults()) {
                System.out.println("      Got: " + result.getResult());
                System.out.println("         by calling: " + result.getMethod().getName());
                System.out.println("         on: " + result.getObjectInvoked().toString());
            }
        } else {
            returnCode++;
            System.out.println("   No Results");
        }

        if(sendResult.getErrors() != null && sendResult.getErrors().size() > 0) {
            System.out.println("   Errors:");
            for(EventActionError error:sendResult.getErrors()) {
                System.out.println("      Exception: " + error.getException().getClass().getName());
                System.out.println("         with message: " + error.getException().getMessage());
                System.out.println("         by calling: " + error.getMethod().getName());
                System.out.println("         on: " + error.getReceivingObject().toString());
            }
        } else {
            returnCode++;
            System.out.println("   No Errors");
        }

        System.out.println();

        return returnCode;
    }