public synchronized Instance createInstance()

in gshell/gshell-admin/src/main/java/org/apache/servicemix/kernel/gshell/admin/internal/AdminServiceImpl.java [87:144]


    public synchronized Instance createInstance(String name, int port, String location) throws Exception {
        if (instances.get(name) != null) {
            throw new IllegalArgumentException("Instance '" + name + "' already exists");
        }
        File serviceMixBase = new File(location != null ? location : ("instances/" + name)).getCanonicalFile();
        int sshPort = port;
        if (sshPort <= 0) {
            try {
                Preferences prefs = preferences.getUserPreferences("AdminServiceState");
                sshPort = prefs.getInt("port", defaultPortStart + 1);
                prefs.putInt("port", sshPort + 1);
                prefs.flush();
                prefs.sync();
            } catch (Exception e) {
                try {
                    ServerSocket ss = new ServerSocket(0);
                    sshPort = ss.getLocalPort();
                    ss.close();
                } catch (Exception t) {
                }
            }
            if (sshPort <= 0) {
                sshPort = defaultPortStart;
            }
        }
        println("Creating new instance on port " + sshPort + " at: @|bold " + serviceMixBase + "|");

        mkdir(serviceMixBase, "bin");
        mkdir(serviceMixBase, "etc");
        mkdir(serviceMixBase, "system");
        mkdir(serviceMixBase, "deploy");
        mkdir(serviceMixBase, "data");

        copyResourceToDir(serviceMixBase, "etc/config.properties", true);
        copyResourceToDir(serviceMixBase, "etc/org.apache.servicemix.features.cfg", true);
        copyResourceToDir(serviceMixBase, "etc/users.properties", true);
        copyResourceToDir(serviceMixBase, "etc/org.ops4j.pax.logging.cfg", true);
        copyResourceToDir(serviceMixBase, "etc/org.ops4j.pax.url.mvn.cfg", true);
        copyResourceToDir(serviceMixBase, "etc/startup.properties", true);

        HashMap<String, String> props = new HashMap<String, String>();
        props.put("${servicemix.name}", name);
        props.put("${servicemix.home}", System.getProperty("servicemix.home"));
        props.put("${servicemix.base}", serviceMixBase.getPath());
        props.put("${servicemix.sshPort}", Integer.toString(sshPort));
        copyFilteredResourceToDir(serviceMixBase, "etc/system.properties", props);
        copyFilteredResourceToDir(serviceMixBase, "etc/org.apache.servicemix.shell.cfg", props);
        if( System.getProperty("os.name").startsWith("Win") ) {
            copyFilteredResourceToDir(serviceMixBase, "bin/servicemix.bat", props);
        } else {
            copyFilteredResourceToDir(serviceMixBase, "bin/servicemix", props);
            chmod(new File(serviceMixBase, "bin/servicemix"), "a+x");
        }
        Instance instance = new InstanceImpl(this, name, serviceMixBase.toString());
        instances.put(name, instance);
        saveState();
        return instance;
    }