private synchronized void handleNewJobRequest(TwisterMessage message) {
		NewJobRequest newJobRequest = null;
		try {
			newJobRequest = new NewJobRequest(message);
		} catch (SerializationException e) {
			e.printStackTrace();
		}
		if (newJobRequest == null) {
			return;
		}
		WorkerResponse response = new WorkerResponse(daemonNo, hostIP);
		// Client expects the daemonNo to be added to the refId.
		response.setRefMessageId(newJobRequest.getRefMessageId() + daemonNo);
		CustomClassLoader classLoader = null;
		// search existing classloader
		for (String friendJobID : newJobRequest.getFriendJobList()) {
			classLoader = classLoaders.get(friendJobID);
			if (classLoader != null) {
				if (daemonNo == 0) {
					logger.info("Class Loader is found.");
				}
				break;
			}
		}
		// create a new one
		if (classLoader == null) {
			try {
				classLoader = new CustomClassLoader();
			} catch (JarClassLoaderException e) {
				classLoader = null;
				response.setExceptionString("Could not initiate the class loader.");
				logger.error(e);
			}
		}
		// store the new classloader
		if (classLoader != null) {
			classLoader.increaseRef();
			classLoaders.put(newJobRequest.getJobId(), classLoader);
		}
		// reply to the driver
		try {
			this.pubSubService.send(newJobRequest.getResponseTopic(), response);
		} catch (PubSubException e) {
			e.printStackTrace();
		}
	}