Package net.sourceforge.javautil.database.derby

Source Code of net.sourceforge.javautil.database.derby.DerbyDatabaseServer

package net.sourceforge.javautil.database.derby;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource40;

import net.sourceforge.javautil.common.io.impl.SystemDirectory;
import net.sourceforge.javautil.common.password.IPassword;
import net.sourceforge.javautil.database.DatabaseServerAbstract;
import net.sourceforge.javautil.datasource.IDataSourceDescriptor;
import net.sourceforge.javautil.datasource.DataSourceDescriptorStandard;
import net.sourceforge.javautil.lifecycle.ILifecycle.PhaseType;
import net.sourceforge.javautil.lifecycle.annotation.Phase;

/**
* The main implementation for using Apache Derby as an internal database server.
*
* @author elponderador
* @author $Author: ponderator $
* @version $Id: DerbyDatabaseServer.java 2297 2010-06-16 00:13:14Z ponderator $
*/
public class DerbyDatabaseServer extends DatabaseServerAbstract {

  public DerbyDatabaseServer(SystemDirectory root) {
    super("Apache Derby Database", root);
  }

  @Phase(value=PhaseType.START) public void startDerby() {}

  @Phase(value=PhaseType.DESTROY) public void stopDerby() {
    try { DriverManager.getConnection("jdbc:derby:;shutdown=true"); } catch (SQLException e) {}
  }

  public boolean isDatabaseExists(String name) { return new File(this.root.getRealArtifact(), name).exists(); }
 
  public boolean createDatabase(String name, String username, IPassword password) {
    File databaseDir = new File(this.root.getRealArtifact(), name);
    if (databaseDir.exists()) return false;
   
    try {
      this.createConnection(name, username, password);
      return true;
    } catch (SQLException e) {
      return false;
    }
  }

  public String getUsername() { return null; }

  public Connection createConnection(String databaseName, String username, IPassword password) throws SQLException {
    String url = this.createConnectionURL(databaseName, username, password);
    return username == null ? DriverManager.getConnection(url) : DriverManager.getConnection(url, username, new String(password.getPassword()));
  }

  public IDataSourceDescriptor createDescriptor(String name, String databaseName, String username) {
    return new DataSourceDescriptorStandard(name, "org.apache.derby.jdbc.EmbeddedDriver",
        this.createConnectionURL(databaseName, username, null), username);
  }
 
  public DataSource createDataSource(String databaseName, String username, IPassword password) throws SQLException {
    EmbeddedConnectionPoolDataSource pooled = new EmbeddedConnectionPoolDataSource40();
    pooled.setDatabaseName(databaseName);
    pooled.setUser(username);
    pooled.setPassword(new String(password.getPassword()));
   
    if (!this.isDatabaseExists(databaseName)) {
      pooled.setCreateDatabase("create");
    }
   
    return pooled;
  }

  /**
   * Central place for URL connection generation
   */
  protected String createConnectionURL (String databaseName, String username, IPassword password) {
    File databaseDir = new File(this.root.getRealArtifact(), databaseName);
    String url = "jdbc:derby:directory:" + databaseDir.getPath();
    if (!databaseDir.exists()) {
      url += ";create=true";
      if (username != null) url += "user=" + username + ";password=" + new String(password.getPassword());
    }
    return url;
  }

}
TOP

Related Classes of net.sourceforge.javautil.database.derby.DerbyDatabaseServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.