package net.sf.lab3f.hsqldb;
import java.lang.reflect.Method;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import net.sf.lab3f.jdbc.Multiconnectionable;
public class Main {
private Multiconnectionable multiConn;
private Thread mainThread;
private boolean hasHsqldb = false;
public void start () throws Exception{
final Properties props = new Properties();
System.out.println("[INFO] Srarting hsqldb service...");
Class.forName("org.hsqldb.jdbc.JDBCDriver");
if(!(new File("conf/jdbc.properties").exists()))return;
props.load(new FileInputStream("conf/jdbc.properties"));
final StringBuffer sb = new StringBuffer();
sb.append("--address "); sb.append(props.getProperty("hsqldb.address", "localhost") + ' ');
sb.append("--port "); sb.append(props.getProperty("hsqsdb.port", "9001") + ' ');
sb.append("--tls "); sb.append(props.getProperty("hsqldb.tls", "false") + ' ');
for(int i = 0; props.getProperty("dbname." + i) != null; i++){
if(!props.getProperty("dbtype." + i).equals("hsqldb"))continue;
hasHsqldb = true;
String dbName = props.getProperty("dbname." + i);
String dBase = props.getProperty("database." + i, "db/hsqldb/" + dbName);
sb.append("--database." + i + " " + dBase + ' ');// sb.append("file:db/hsqldb/" + props.getProperty("database." + i, "test" + i) + ' ');
sb.append("--dbname." + i + " " + dbName + ' ');// sb.append(props.getProperty("dbname." + i, "test" + i) + ' ');
String url = "jdbc:hsqldb:file:" + dBase + ";default_schema=true";
String usr = props.getProperty("user." + i);
String pwd = props.getProperty("password." + i);
Connection conn = DriverManager.getConnection(url, usr, pwd);
multiConn.setConnection(dbName, conn);
}
mainThread = new Thread(
new Runnable(){
public void run(){
if(new Boolean(props.getProperty("hsqldb.autostart", "false")) && hasHsqldb)org.hsqldb.server.WebServer.main(sb.toString().split("\\s+"));
}
}
);
mainThread.start();
}
public void stop() throws Exception {if(mainThread != null)mainThread.interrupt();}
}