pessoal,
Uso a seguinte classe ServiceLocator para mapear a conexão com o banco de dados.
package anaman.locator;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.activation.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import anaman.exception.AnamanException;
public class ServiceLocator {
private final String driver = "org.hsqldb.jdbcDriver";
private final String dbPath = "C:\\Documents and Settings\\user\\Desktop\\build\\Anaman\\WebContent\\hsqldb\\anaman";
//private final String dbPath = "hsql://localhost:59999/anaman";
private final String url = "jdbc:hsqldb:" + dbPath;
private final String user = "sa";
private final String password = "";
private static ServiceLocator instance = new ServiceLocator();
private ServiceLocator() {
}
public static ServiceLocator getInstance() {
return instance;
}
public Connection getConnection() throws AnamanException {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException driver) {
System.out.println("Driver not found: " + driver.getMessage());
} catch (SQLException dataSource) {
System.out.println("Error in connecting to data source: "
+ dataSource.getMessage());
}
return conn;
}
public DataSource getDataSource() throws AnamanException {
DataSource datasource = null;
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
datasource = (DataSource)envContext.lookup("jdbc/AnamanDB");
} catch (NamingException e) {
System.out.println("[AnamanServiceLocator] - error connecting to datasource: " +
e.getExplanation());
}
return datasource;
}
}[/code]
Também postei essa classe no pastebin [url=http://pastebin.com/f2b22a0f4]aqui[/url] para facilitar o debugging =)
Hoje tenho que iniciar e parar o banco de dados na unha e gostaria que a conexão fosse controlada por essa classe. Tenho uma DAO que já usa essa classe para "falar" com o banco de dados, mas infelizmente não estou usando qualquer abstração de persistência.
Também tentei, como podem ver, implementar um datasource mas não tive êxito. Mapeei a conexão ao datasource no web.xml assim:
[code]<!-- Datasource mapping -->
<resource-ref>
<description>Anaman HSQLDB</description>
<res-ref-name>jdbc/AnamanDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Obrigado desde já,
Gustavo