JPA...uso de DAO ....para acesso?

0 respostas
P

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);  --> 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;   
    }   
  
}
Criado 22 de dezembro de 2008
Respostas 0
Participantes 1