package org.jboss.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.jboss.system.ServiceMBeanSupport;
public class DerbyDatabase
extends ServiceMBeanSupport
implements DerbyDatabaseMBean, MBeanRegistration
{
private static final String DEFAULT_PASSWORD = "";
private static final String DEFAULT_USER = "sa";
private static final String JDBC_DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver";
private static final String JDBC_URL_PREFIX = "jdbc:derby:";
private static final String DERBY_DATA_DIR = "derby";
private static final String DEFAULT_DATABASE_NAME = "default";
String name = DEFAULT_DATABASE_NAME;
private String user = DEFAULT_USER;
private String password = DEFAULT_PASSWORD;
private Connection connection;
public void setDatabase(String name)
{
if (name == null)
{
name = DEFAULT_DATABASE_NAME;
}
this.name = name;
}
public String getDatabase()
{
return name;
}
public String getPassword()
{
return password;
}
public String getUser()
{
return user;
}
public void setPassword(String password)
{
if (password == null)
{
password = DEFAULT_PASSWORD;
}
this.password = password;
}
public void setUser(String user)
{
if (user == null)
{
user = DEFAULT_USER;
}
this.user = user;
}
protected ObjectName getObjectName(MBeanServer server, ObjectName name)
throws MalformedObjectNameException
{
return name == null ? OBJECT_NAME : name;
}
protected void startService() throws Exception
{
String dbURL = JDBC_URL_PREFIX + System.getProperty("jboss.server.data.dir") +
'/' + DerbyDatabase.DERBY_DATA_DIR +
'/' + name + ";create=true";
log.info("starting derby " + dbURL);
connection = getConnection(dbURL);
}
protected void stopService() throws Exception
{
try
{
getConnection("jdbc:derby:;shutdown=true");
log.error("According to the docs, should have caught an exception!");
}
catch(SQLException e)
{
log.info("Derby shutdown successfully.", e);
}
connection = null;
}
private synchronized Connection getConnection(String dbURL) throws Exception
{
if (connection == null)
{
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class.forName(JDBC_DRIVER_CLASS, true, cl).newInstance();
connection = DriverManager.getConnection(dbURL, user, password);
}
return connection;
}
}