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;
}