/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.mysql;
import org.apache.commons.dbcp.BasicDataSource;
import org.openrdf.sail.SailException;
import org.openrdf.sail.rdbms.RdbmsStore;
import org.openrdf.sail.rdbms.exceptions.RdbmsException;
/**
* A convenient way to initialise a MySql RDF store.
*
* @author James Leigh
*
*/
public class MySqlStore extends RdbmsStore {
private String name = genName();
private String serverName = "localhost";
private String databaseName;
private int portNumber;
private String user;
private String password;
public MySqlStore() {
super();
}
public MySqlStore(String databaseName) {
setDatabaseName(databaseName);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
}
public String getDatabaseName() {
return databaseName;
}
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
public int getPortNumber() {
return portNumber;
}
public void setPortNumber(int portNumber) {
this.portNumber = portNumber;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public void initialize()
throws SailException
{
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException e) {
throw new RdbmsException(e.toString(), e);
}
StringBuilder url = new StringBuilder();
url.append("jdbc:mysql:");
if (serverName != null) {
url.append("//").append(serverName);
if (portNumber > 0) {
url.append(":").append(portNumber);
}
url.append("/");
}
url.append(databaseName);
url.append("?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true");
BasicDataSource ds = new BasicDataSource();
ds.setUrl(url.toString());
ds.setMaxActive(64);
ds.setValidationQuery("SELECT 1 FROM DUAL");
/* Based on http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html */
ds.setTestOnBorrow(true);
ds.setTestOnReturn(true);
ds.setTestWhileIdle(true);
ds.setTimeBetweenEvictionRunsMillis(10000);
ds.setMinEvictableIdleTimeMillis(30000); /* must correspond to the server's wait_timeout setting! */
if (user != null) {
ds.setUsername(user);
}
else {
ds.setUsername(System.getProperty("user.name"));
}
if (password != null) {
ds.setPassword(password);
}
MySqlConnectionFactory factory = new MySqlConnectionFactory();
factory.setSail(this);
factory.setDataSource(ds);
setConnectionFactory(factory);
super.initialize();
}
private String genName() {
String hex = Integer.toHexString(System.identityHashCode(this));
return getClass().getSimpleName() + "#" + hex;
}
}