/** Start the standalone (in process) database. */
  private void startStandaloneDatabase() throws Exception {
    // Get the server data directory
    File dataDir = null;

    if (dbDataDir == null) dataDir = ServerConfigLocator.locate().getServerDataDir();
    else dataDir = new File(dbDataDir);

    // Get DB directory
    File hypersoniDir = new File(dataDir, HYPERSONIC_DATA_DIR);

    if (!hypersoniDir.exists()) {
      hypersoniDir.mkdirs();
    }

    if (!hypersoniDir.isDirectory()) {
      throw new IOException("Failed to create directory: " + hypersoniDir);
    }

    dbPath = new File(hypersoniDir, name);

    String dbURL = JDBC_URL_PREFIX + getDatabasePath();

    // hold a connection so hypersonic does not close the database
    connection = getConnection(dbURL);
  }
  /** Start the remote database. */
  private void startRemoteDatabase() throws Exception {
    // Get the server data directory
    File dataDir = null;
    if (dbDataDir == null) dataDir = ServerConfigLocator.locate().getServerDataDir();
    else dataDir = new File(dbDataDir);

    // Get DB directory
    File hypersoniDir = new File(dataDir, HYPERSONIC_DATA_DIR);

    if (!hypersoniDir.exists()) {
      hypersoniDir.mkdirs();
    }

    if (!hypersoniDir.isDirectory()) {
      throw new IOException("Failed to create directory: " + hypersoniDir);
    }

    dbPath = new File(hypersoniDir, name);

    // Start DB in new thread, or else it will block us
    serverThread =
        new Thread("hypersonic-" + name) {
          public void run() {
            try {
              // Create startup arguments
              String[] args =
                  new String[] {
                    "-database", dbPath.toString(),
                    "-port", String.valueOf(port),
                    "-address", address,
                    "-silent", String.valueOf(silent),
                    "-trace", String.valueOf(trace),
                    "-no_system_exit", String.valueOf(no_system_exit),
                  };

              // Start server
              ClassLoader cl = Thread.currentThread().getContextClassLoader();
              Class clazz = Class.forName(serverClass, true, cl);
              Method main = clazz.getMethod("main", new Class[] {args.getClass()});
              main.invoke(null, new Object[] {args});
            } catch (Exception e) {
              log.error("Failed to start database", e);
            }
          }
        };
    serverThread.start();
  }
  public void destroy() {
    System.out.println("Destruyendo instancia");
    try {
      if (Prodandes.darInstancia() != null) {
        ServerConfig config = ServerConfigLocator.locate();
        File dataDir = config.getServerDataDir();
        File tmp = new File(dataDir + RUTA_ARCHIVO_SERIALIZADO);
        System.out.println("Nombre=" + tmp.getName());
        System.out.println("Path=" + tmp.getPath());
        System.out.println("Abs. Path=" + tmp.getAbsolutePath());

        FileOutputStream fos = new FileOutputStream(tmp);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(Prodandes.darInstancia());
        oos.close();
        fos.close();
        System.out.println("Album Serializado");
      }
    } catch (Exception e) {
      System.out.println("Error de persistencia en Servidor");
    }
  }