Tem como eu converter um java.sql.Connection para um javax.persistence.EntityManagerFactory ?
cara,
explique melhor o que vc quer fazer, explique seu cenario.
t+
Na empresa em que trabalho, não tenho flexibilidade de linguagem, esto utilizando jsp + tomcat e estou tentando implementar o JPA. Como temos acesso massivo tive que criar um pool de conexões com o DBCP que resulta em um objeto do tipo java.sql.Connection.
Esta é a classe:
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class Intranet {
public static DataSource conectarDataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUsername("root");
ds.setPassword("");
ds.setUrl("jdbc:mysql://localhost:3306/intranet");
return ds;
}
public static void imprimirStatusDataSource(DataSource ds) {
BasicDataSource bds = (BasicDataSource) ds;
System.out.println("NumAtivos: " + bds.getNumActive());
System.out.println("NumInativos: " + bds.getNumIdle());
}
public static void desligarDataSource(DataSource ds) throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}
}
jara eu conseguir utilizar o JPA eu preciso de um objeto do tipo EntityManagerFactory que se conecte à este pool, por isso que estou tentando converter o meu Connection em um EntityManagerFactory.
O teste já está funcional, não utilizando jpa:
public class teste {
public static void main(String ... args){
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try {
conn = Intranet.conectarDataSource().getConnection();
stmt = conn.createStatement();
rset = stmt.executeQuery("select * from funcionario limit 20");
int numcols = rset.getMetaData().getColumnCount();
while(rset.next()) {
for(int i=1;i<=numcols;i++) {
System.out.print("\t" + rset.getString(i));
}
System.out.println("");
}
} catch (SQLException ex) {
Logger.getLogger(teste.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try { if (rset != null) rset.close(); } catch(Exception e) { }
try { if (stmt != null) stmt.close(); } catch(Exception e) { }
try { if (conn != null) conn.close(); } catch(Exception e) { }
}
}
}
cara,
do jeito que vc ta querendo, acho que nao vai ter jeito nao, mas vc pode criar o EntityManager independente do Connection. vc pode fazer assim
EntityManager entityManager = Persistence.createEntityManagerFactory("PERSIST_UNIT").createEntityManager();
t+
Desta forma eu não me disponho do meu pool, eu preciso utilizá-lo para acessar a base de dados. Tenho experiência com JPA, mas nunca topei com algo desse tipo, de ter que capturar um Connection e lança-lo para um EMF, eu preciso encontrar uma forma de fazê-lo.
cara,
mas vc pode configurar um Pool Conexão com Jpa (Hibernate), basta colocar nas configurações do arquivo persistence.xml.
da uma olhada nesse link,
http://www.mkyong.com/hibernate/how-to-configure-the-c3p0-connection-pool-in-hibernate/
http://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool
t+
O hibernate está sendo o que estamos querendo nos livrar kkkkk, ja utilizamos essa opção por cerca de 1 ano para nunca mais utilizar rs rs
cara,
mas o hibernate utiliza a JPA como sua implementação. Entao vc vai cair no mesmo caso.
t+
Eu to utilizando toplink pra fazer minha persistência, da muito menos problema que o hibernate kkkkk, existem várias formas de persistir com JPA, hibernate, toplink, eclipselink, etc.
toplink agora é eclipselink,
mas vc pode procurar no eclipselink que existe as mesmas configurações para ele.
t+
Estou matutando aqui e creio que a unica forma de eu conseguir fazer isso funcionar é criar um JNDI, mas não sei como fazer isso sem ser pelo context do tomcat, não quero modificar o tomcat
cara,
nao estou vendo sua dificuldade, basta vc criar o arquivo persistence.xml e configura-lo de acordo com sua necessidade e depois so usar o codigo q te passei assim para criar um entityManager.
t+
[quote=alissonvla]cara,
nao estou vendo sua dificuldade, basta vc criar o arquivo persistence.xml e configura-lo de acordo com sua necessidade e depois so usar o codigo q te passei assim para criar um entityManager.
t+[/quote]
Concordo com o colega, nao estou entendendo a dificuldade.
Voce tem o pool de conexoes. Ok.
Voce precisa criar uma conexão a partir dele. Ok.
Voce precisa utilizar o EntityManager com essa conexão atrelada ao pool. Certo. O código que o colega postou é a maneira de se fazer, basta configurar o datasource no seu persistence.xml.
O que voce nao quer é que o Tomcat gerencie o seu pool de conexões, é isso?
depois de incessante busca encontrei o que estava precisando kkkkkk. Segue o link para vocês.
assim eu não preciso me dispor de hibernate, não preciso configurar um JNDI no context do tomcat e eu uso direto o datasource que eu apontar pelo persistence-unit name
cara,
veja q vc queria uma coisa e fez outra.
mas bom que vc conseguiu resolver seu problema.
t+