package net.jxta.impl.cm.sql;
import java.io.IOException;
import java.net.URI;
import java.sql.SQLException;
import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
import org.apache.derby.jdbc.EmbeddedDataSource;
public class DerbyAdvertisementCache extends JdbcAdvertisementCache {
public DerbyAdvertisementCache(URI storeRoot, String areaName) throws IOException {
super(storeRoot, areaName);
}
public DerbyAdvertisementCache(URI storeRoot, String areaName, long gcinterval, boolean trackDeltas) throws IOException {
super(storeRoot, areaName, gcinterval, trackDeltas);
}
@Override
protected EmbeddedConnectionPoolDataSource createDataSource() {
if(!loadDbDriver( "org.apache.derby.jdbc.EmbeddedDriver")) {
throw new RuntimeException("Unable to loadDB driver: org.apache.derby.jdbc.EmbeddedDriver");
}
EmbeddedConnectionPoolDataSource dataSource = new EmbeddedConnectionPoolDataSource();
dataSource.setDatabaseName(dbDir.getAbsolutePath());
dataSource.setCreateDatabase("create");
System.err.println("Created derby cache");
return dataSource;
}
@Override
protected void shutdownDb() throws SQLException {
// annoyingly, shutting down a derby instance involves catching an exception
// and checking error codes to make sure it shut down "normally"
try {
EmbeddedDataSource dataSource = new EmbeddedDataSource();
dataSource.setDatabaseName(dbDir.getAbsolutePath());
dataSource.setShutdownDatabase("shutdown");
dataSource.getConnection();
} catch(SQLException e) {
// make sure we get the correct error codes
if(e.getErrorCode() != 45000 || !"08006".equals(e.getSQLState())) {
throw e;
}
}
}
}