Olá ,
sou iniciante no uso JPA estou em duvida como implementar em uma plicação WEB um DAO.
Pois anteriormente usava ServiceLocator e tinha o uso tanto pool de conexão do Servidor de Aplicação
como acessava via local JDBC.
Pois fiz um teste conforme abaixo onde em cada DAO faço
- Persistence.createEntityManagerFactory("JPA9");
- factory.createEntityManager();
Em uma aplicação WEB não vai ficar lento toda hora fazer esse acesso no xml, minha duvida
tem outro jeito ???
public class UsuarioDAO {
private EntityManagerFactory factory = null;
private EntityManager manager = null;
public UsuarioDAO() {
factory = Persistence.createEntityManagerFactory("JPA9");
manager = factory.createEntityManager();
}
Se eu fosse fazer um ServiceLocator em JPA como ficaria seguindo esse raciocinio ???
Se alguém puder me ajudar agradeceria…
abs
public class ServiceLocator {
private static String POOLING_NAME = "local";
private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
private final static String DB_URL = "jdbc:mysql://localhost:3306/prova";
private final static String DB_USER_NAME = "root";
private final static String DB_PASSWORD = "pa";
private boolean usePool = true;
protected DataSource ds;
static { //Busca o datasource configurado no arquivo resources.application existente em WEB-INF\classes\resources
ResourceBundle prop = ResourceBundle.getBundle("resources.application");
try {
POOLING_NAME = prop.getString("geral.datasource");
} catch (Exception e) {
}
}
private static InitialContext initCtx = null;
private static ServiceLocator instance = new ServiceLocator();
public static ServiceLocator getInstance() {
return instance;
}
public Connection getConnection() throws Exception {
if (usePool) {
System.out.println("pool");
return getConnectionByPool();
} else {
System.out.println("manual");
return getConnectionManual();
}
}
public Connection getConnectionManual() throws Exception {
Connection conn = null;
try {
Class.forName(DRIVER_NAME);
conn=DriverManager.getConnection(DB_URL,DB_USER_NAME,DB_PASSWORD);
System.out.println("Conexão Aberta !!!");
} catch (Exception e) {
System.out.println("Conexão Não Aberta !!!");
e.printStackTrace();
throw new Exception("Erro ao obter conexao via JNDI: " ,e);
}
return conn;
}
public Connection getConnectionByPool() throws Exception {
Connection conn = null;
DataSource ds = null;
try {
if (initCtx == null) {
initCtx = new InitialContext();
}
System.out.println("PooLING="+POOLING_NAME);
ds = (DataSource) initCtx.lookup(POOLING_NAME); -->Dá erro nessa linha ao debugar
conn = ds.getConnection();
System.out.println("Conexao Aberta");
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Erro ao obter conexao via JNDI: "
+ POOLING_NAME, e);
}
return conn;
}
public void setUsePool(boolean usePool) {
this.usePool = usePool;
}
}