public void startJobProcessing() {
        try {
            // config cmdArgs
            LOGGER.info("configure CmdArgs");
            this.availiableCmdLineOptions = this.genAvailiableCmdLineOptions();

            // parse cmdArgs
            LOGGER.info("parse CmdArgs");
            this.cmdLine = this.genCommandLineFromCmdArgs(this.cmdLineArgs, this.availiableCmdLineOptions);

            // check for unknown Args
            LOGGER.info("used CmdLineArgs: " + this.cmdLineArgs);
            if (this.cmdLine != null) {
                LOGGER.info("unknown CmdLineArgs: " + this.cmdLine.getArgs());
            }

            // validate cmdLine
            LOGGER.info("validate CmdLine");
            if (! this.validateCmdLine(this.cmdLine)) {
                logErrorMsg("Illegal CmdArgs: print Usage");
                this.printUsage();
                LOGGER.info("Exit: 1");
                System.exit(CONST_EXITCODE_FAILED_ARGS);
            }

            // print Usage
            if (this.cmdLine.hasOption("h")) {
                LOGGER.info("print Usage");
                this.printUsage();
                LOGGER.info("Exit: " + CONST_EXITCODE_OK);
                System.exit(CONST_EXITCODE_OK);
            }

            // load Config
            LOGGER.info("load Config");
            this.jobConfFile = this.cmdLine.getOptionValue("c");
            if (this.jobConfFile != null) {
                if (!loadConfigFile(this.jobConfFile)) {
                    logErrorMsg("cant load Config: " + this.jobConfFile);
                    logErrorMsg("Exit: " + CONST_EXITCODE_FAILED_CONFIG);
                    System.exit(CONST_EXITCODE_FAILED_CONFIG);
                }
            }

            LOGGER.info("start initJob");
            this.initJob();
            LOGGER.info("done initJob");

            LOGGER.info("start doJob");
            this.doJob();
            LOGGER.info("done doJob");

            LOGGER.info("start cleanUpAfterJob");
            this.cleanUpAfterJob();
            LOGGER.info("done cleanUpAfterJob");

        } catch(Throwable e) {
            // Catch Error
            try {
                LOGGER.info("start cleanUpAfterJob when Error");
                this.cleanUpAfterJob();
                LOGGER.info("done cleanUpAfterJob when Error");
            } catch (Throwable e2){
                // Log Error while cleanUp
                this.handleThrowable(e2, false);
            }

            // Log Error
            this.handleThrowable(e, true);
        }
    }