	private Object docreate(Configuration config) throws Exception {
		ensureSecurityManager();
		Object proxy = null;
		HTTPDStatus.httpdWarning(getCodebase());
		String defaultDir = null;
		String fs = File.separator;
		String sorcerHome = SorcerEnv.getHomeDir().getPath();
		if (sorcerHome == null) {
			logger.info("'sorcer.home' not defined, no default platformDir");
		} else {
			defaultDir = sorcerHome+fs+"configs"+fs+"platform"+fs+"sorcer";
		}
		CommonClassLoader commonCL = CommonClassLoader.getInstance();
        if (!platformLoaded) {
            loadPlatform(config, defaultDir, commonCL);
            platformLoaded = true;
        }
        Thread currentThread = Thread.currentThread();
		ClassLoader currentClassLoader = currentThread.getContextClassLoader();
		ClassAnnotator annotator = null;
        if (getCodebase() != null) {
            annotator = new ClassAnnotator(ClassLoaderUtil
                    .getCodebaseURLs(getCodebase()), new Properties());
        }
		ServiceClassLoader jsbCL = new ServiceClassLoader(ServiceClassLoader
				.getURIs(ClassLoaderUtil.getClasspathURLs(getClasspath())),
				annotator, commonCL);
		if (logger.isLoggable(Level.FINE))
			ClassLoaderUtil.displayClassLoaderTree(jsbCL);
		new ClassPathVerifier().verifyClassPaths(jsbCL);
		currentThread.setContextClassLoader(jsbCL);
		ProxyPreparer servicePreparer = (ProxyPreparer) Config.getNonNullEntry(
				config, COMPONENT, "servicePreparer", ProxyPreparer.class,
				new BasicProxyPreparer());
		synchronized (SorcerServiceDescriptor.class) {
			if (globalPolicy == null) {
				initialGlobalPolicy = Policy.getPolicy();
				globalPolicy = new AggregatePolicyProvider(initialGlobalPolicy);
				Policy.setPolicy(globalPolicy);
				if (logger.isLoggable(Level.FINEST))
					logger.log(Level.FINEST, "Global policy set: {0}",
							globalPolicy);
			}
			DynamicPolicyProvider service_policy = new DynamicPolicyProvider(
					new PolicyFileProvider(getPolicy()));
			LoaderSplitPolicyProvider splitServicePolicy = new LoaderSplitPolicyProvider(
					jsbCL, service_policy, new DynamicPolicyProvider(
							initialGlobalPolicy));
			splitServicePolicy.grant(SorcerServiceDescriptor.class, null,
					new Permission[] { new AllPermission() });
			globalPolicy.setPolicy(jsbCL, splitServicePolicy);
		}
		Object impl;
		try {
			Class implClass;
			implClass = Class.forName(getImplClassName(), false, jsbCL);
			if (logger.isLoggable(Level.FINEST))
				logger.finest("Attempting to get implementation constructor");
			Constructor constructor = implClass
					.getDeclaredConstructor(actTypes);
			if (logger.isLoggable(Level.FINEST))
				logger
						.log(Level.FINEST,
								"Obtained implementation constructor: ",
								constructor);
			constructor.setAccessible(true);
			impl = constructor.newInstance(getServerConfigArgs(), lifeCycle);
			if (logger.isLoggable(Level.FINEST))
				logger.log(Level.FINEST,
						"Obtained implementation instance: {0}", impl);
			if (impl instanceof ServiceProxyAccessor) {
				proxy = ((ServiceProxyAccessor) impl).getServiceProxy();
			} else if (impl instanceof ProxyAccessor) {
				proxy = ((ProxyAccessor) impl).getProxy();
			} else {
				proxy = null; 
			}
			if (proxy != null) {
				proxy = servicePreparer.prepareProxy(proxy);
			}
			if (logger.isLoggable(Level.FINEST))
				logger.log(Level.FINEST, "Proxy =  {0}", proxy);
            proxy = (new MarshalledObject(proxy)).get();
            currentThread.setContextClassLoader(currentClassLoader);
        } finally {
			currentThread.setContextClassLoader(currentClassLoader);
		}
		return (new Created(impl, proxy));
	}

	private Object docreate(Configuration config) throws Exception {
		ensureSecurityManager();
		Object proxy = null;
        {
            String codebase = getCodebase();
            if (codebase != null && codebase.startsWith("http"))
                HTTPDStatus.httpdWarning(codebase);
        }
		String defaultDir = null;
		String fs = File.separator;
		String sorcerHome = SorcerEnv.getHomeDir().getPath();
		if (sorcerHome == null) {
			logger.info("'sorcer.home' not defined, no default platformDir");
		} else {
			defaultDir = sorcerHome+fs+"configs"+fs+"platform"+fs+"sorcer";
		}
		CommonClassLoader commonCL = CommonClassLoader.getInstance();
        if (!platformLoaded) {
            loadPlatform(config, defaultDir, commonCL);
            platformLoaded = true;
        }
        Thread currentThread = Thread.currentThread();
		ClassLoader currentClassLoader = currentThread.getContextClassLoader();
		ClassAnnotator annotator = null;
        if (getCodebase() != null) {
            annotator = new ClassAnnotator(ClassLoaderUtil
                    .getCodebaseURLs(getCodebase()), new Properties());
        }
		ServiceClassLoader jsbCL = new ServiceClassLoader(ServiceClassLoader
				.getURIs(ClassLoaderUtil.getClasspathURLs(getClasspath())),
				annotator, commonCL);
		if (logger.isLoggable(Level.FINE))
			ClassLoaderUtil.displayClassLoaderTree(jsbCL);
		new ClassPathVerifier().verifyClassPaths(jsbCL);
		currentThread.setContextClassLoader(jsbCL);
		ProxyPreparer servicePreparer = (ProxyPreparer) Config.getNonNullEntry(
				config, COMPONENT, "servicePreparer", ProxyPreparer.class,
				new BasicProxyPreparer());
		synchronized (SorcerServiceDescriptor.class) {
			if (globalPolicy == null) {
				initialGlobalPolicy = Policy.getPolicy();
				globalPolicy = new AggregatePolicyProvider(initialGlobalPolicy);
				Policy.setPolicy(globalPolicy);
				if (logger.isLoggable(Level.FINEST))
					logger.log(Level.FINEST, "Global policy set: {0}",
							globalPolicy);
			}
			DynamicPolicyProvider service_policy = new DynamicPolicyProvider(
					new PolicyFileProvider(getPolicy()));
			LoaderSplitPolicyProvider splitServicePolicy = new LoaderSplitPolicyProvider(
					jsbCL, service_policy, new DynamicPolicyProvider(
							initialGlobalPolicy));
			splitServicePolicy.grant(SorcerServiceDescriptor.class, null,
					new Permission[] { new AllPermission() });
			globalPolicy.setPolicy(jsbCL, splitServicePolicy);
		}
		Object impl;
		try {
			Class implClass;
			implClass = Class.forName(getImplClassName(), false, jsbCL);
			if (logger.isLoggable(Level.FINEST))
				logger.finest("Attempting to get implementation constructor");
			Constructor constructor = implClass
					.getDeclaredConstructor(actTypes);
			if (logger.isLoggable(Level.FINEST))
				logger
						.log(Level.FINEST,
								"Obtained implementation constructor: ",
								constructor);
			constructor.setAccessible(true);
			impl = constructor.newInstance(getServerConfigArgs(), lifeCycle);
			if (logger.isLoggable(Level.FINEST))
				logger.log(Level.FINEST,
						"Obtained implementation instance: {0}", impl);
			if (impl instanceof ServiceProxyAccessor) {
				proxy = ((ServiceProxyAccessor) impl).getServiceProxy();
			} else if (impl instanceof ProxyAccessor) {
				proxy = ((ProxyAccessor) impl).getProxy();
			} else {
				proxy = null; 
			}
			if (proxy != null) {
				proxy = servicePreparer.prepareProxy(proxy);
			}
			if (logger.isLoggable(Level.FINEST))
				logger.log(Level.FINEST, "Proxy =  {0}", proxy);
            proxy = (new MarshalledObject(proxy)).get();
            currentThread.setContextClassLoader(currentClassLoader);
        } finally {
			currentThread.setContextClassLoader(currentClassLoader);
		}
		return (new Created(impl, proxy));
	}
