@Override
	public final void run() {
		// Reset, Job Object Data
		this.failureObject = null;
		this.returnObject = null;
		this.finished = false;
		this.success = false;
		
		// ---------------------- EXECUTION ---------------------- //
		System.out.println("[JOB] Execution of Job -> " + this.jobName);
		
		Object jobFailureReturnObject = null;
		
		try
		{
			jobFailureReturnObject = this.execute();
		}
		catch(Throwable e)
		{
			jobFailureReturnObject = e;
		}
		
		this.failureObject = jobFailureReturnObject;
		
		if(jobFailureReturnObject == null)
		{
			// ---------------------- SUCCESS ---------------------- //
			System.out.println("[JOB] Finished Job -> " + this.jobName);
			
			if(this.returnObject != null)
			{
				System.out.println("[JOB] Job Result: " + this.returnObject);;
			}
			
			this.success = true;;
		}
		else
		{
			// ---------------------- FAILURE ---------------------- //
			if(jobFailureReturnObject instanceof Exception)
			{
				System.out.println("[JOB] The Job '"+this.jobName+"' failed because of an Exception.");
				System.out.println("[JOB] Job Failure Exception -> " + ((Exception) jobFailureReturnObject).getLocalizedMessage());
				((Exception) jobFailureReturnObject).printStackTrace();
			}
			else
			{
				System.out.println("[JOB] The Job '"+this.jobName+"' failed because it reported a error object.");
				System.out.println("[JOB] Job Error Object Class -> " + jobFailureReturnObject.getClass().getName());
				System.out.println("[JOB] Job Error Object -> " + jobFailureReturnObject);
			}
			
			this.success = false;;
		}
		
		this.finished = true;
		return;
	}