Olá:
É possível acessar um Banco de Dados diretamente? Sem a intermediação do Conteiner e do EJB-QL (eca!)?
Sei que um dos atrativos dos EJB´s é justamente o código não se "preocupar" com o Banco de Dados, usando no lugar os findByQualqueCoisa e os Selects com o EJB-QL escrito em um arquivo XML à parte. Entretanto o EJB-QL é muito limitado. Sei que vai ser incrementado na próxima versão. Mas até lá tenho que me virar de outra forma.
Por exemplo: tenho o meu SessionBean (ou EntityBean). Tenho que usar um Objeto java.sql.Connection para entrar em contato com o BD. Fora do universo dos EJB´s eu faria java.sql.DriverManeger.getConnection(), depois de passar a classe do driver JDBC. E num EJB como faria?
Grato,
EJB´s e JDBC
R
2 Respostas
F
Olá,
vc pode usar um framework de persistência. O meu preferido é o OJB(http://db.apache.org/ojb) Ele tbm trabalha com EJBs, apesar de eu nunca ter usado esta feature.
Abraço,
Franklin Samir
"Diga não ao EJB! :-)"
P
Ola, Rafael.
Se tudo o que voce quer saber eh como obter uma Connection a partir de um EJB, aqui a resposta:
Voce deve obter um DataSource a partir do contexto JNDI do seu servidor de aplicacoes. Por exemplo, suponha que voce tenha um DataSource instalado no nome java:/DefaultDS. Voce faria o seguinte codigo para obter uma conexao direta com o banco de dados:
import java.sql.Connection;
import javax.naming.InitialContext;
import javax.sql.DataSource;
InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup(java:/DefaultDS");
Connection conn = ds.getConnection();
Se o seu servidor de aplicacoes for capaz de prover DataSources atraves de multiplas JVMs, o objeto retornado pelo lookup pode precisar ser estreitado. Dica: se o nome JNDI que voce esta procurando comecar com "java:", significa que o objeto deve estar na mesma JVM, portanto nao precisa ser estreitado. Se nao comecar, pode precisar. E aqui esta o codigo pra isso:
import java.sql.Connection;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.sql.DataSource;
InitialContext context = new InitialContext();
Object obj = context.lookup("DefaultDS");
DataSource ds = (DataSource) PortableRemoteObject.narrow(obj, DataSource.class);
Connection conn = ds.getConnection();
O ideal eh voce colocar o codigo para obter a conexao em algum metodo privado do seu bean (ou em uma classe mae de todos os beans) e entao utiliza-lo sempre que precisor de uma conexao. Se voce comecar a usar isso muito, pense em utilizar o padrao de projeto conhecido como "<a>Data Access Object</a>" para abstrair o acesso ao banco de dados.
[ Esta mensagem foi editada por: pazu em 24-03-2003 09:57 ]
Criado 26 de fevereiro de 2003
Ultima resposta 24 de mar. de 2003
Respostas 2
Participantes 3
Alura Git Flow: entenda o que é, como e quando utilizar Entenda o que é Git Flow, como funciona seu fluxo com branches como Master, Develop, Feature, Release e Hotfix, além de vantagens e desvantagens.
Casa do Codigo Desmistificando WebAssembly: Alta performance,... Por Raphael Amorim — Casa do Codigo