/**
*
*/
package org.jboss.test.cluster.web.persistent;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.Statement;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.sql.DataSource;
/**
*
*
* @author Brian Stansberry
*
* @version $Revision: $
*/
public class PersistentStoreTableSetup
{
private static final String DEFAULT_DS = "java:DefaultDS";
private static final String DEFAULT_DROP_DDL = "DROP TABLE httpsessions IF EXISTS";
private static final String DEFAULT_CREATE_DDL = "CREATE TABLE httpsessions (" +
"app VARCHAR(255) NOT NULL, " +
"id VARCHAR(255) NOT NULL, " +
"fullId VARCHAR(255) NOT NULL, " +
"creationtime BIGINT NOT NULL, " +
"maxinactive BIGINT NOT NULL, " +
"version INT NOT NULL, " +
"lastaccess BIGINT NOT NULL, " +
"isnew CHAR(1) NOT NULL, " +
"valid CHAR(1) NOT NULL, " +
"metadata VARBINARY NULL, " +
"attributes LONGVARBINARY NOT NULL " +
", CONSTRAINT app_id PRIMARY KEY (app, id)" +
")";
// --------------------------------------------------------- Instance Fields
private String jdbcURL;
private String jndiName;
private String createTableDDL;
private String dropTableDDL;
// ------------------------------------------------------------- Properties
public String getDataSourceJndiName()
{
return jndiName == null ? DEFAULT_DS : jndiName;
}
public void setDataSourceJndiName(String jndiName)
{
this.jndiName = jndiName;
}
public String getJdbcURL()
{
return jdbcURL;
}
public void setJdbcURL(String jdbcURL)
{
this.jdbcURL = jdbcURL;
}
public String getCreateTableDDL()
{
return createTableDDL == null ? DEFAULT_CREATE_DDL : createTableDDL;
}
public void setCreateTableDDL(String createTableDDL)
{
this.createTableDDL = createTableDDL;
}
public String getDropTableDDL()
{
return dropTableDDL == null ? DEFAULT_DROP_DDL : dropTableDDL;
}
public void setDropTableDDL(String dropTableDDL)
{
this.dropTableDDL = dropTableDDL;
}
// ------------------------------------------------------------------ Public
public void start() throws Exception
{
Connection conn = getConnection();
conn.setAutoCommit(false);
Statement stmt = null;
boolean success = false;
try
{
stmt = conn.createStatement();
stmt.execute(getDropTableDDL());
stmt.close();
stmt = conn.createStatement();
stmt.execute(getCreateTableDDL());
conn.commit();
success = true;
}
finally
{
if (!success)
{
conn.rollback();
}
if (stmt != null)
{
stmt.close();
}
conn.close();
}
}
private Connection getConnection() throws Exception
{
Connection conn = null;
if (jdbcURL != null)
{
Driver driver = org.hsqldb.jdbcDriver.class.newInstance();
Properties props = new Properties();
props.put("user", "sa");
conn = driver.connect(jdbcURL, props);
}
else
{
DataSource datasource = (DataSource) new InitialContext().lookup(getDataSourceJndiName());
conn = datasource.getConnection();
}
return conn;
}
}