Galera, to com o seguinte problema,
tenho q passar uma classe como parametro pra um ejb, e por isso implemento a interface Serializable, so q nessa classe eu tenho um objeto Connection e esta dando o seguinte erro:
error marshalling arguments; nested exception is:
java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcConnection
como posso passar esse driver como parametro? Por favor eh urgente!!
obrigado!!! :?: :?:
seguinte, vou explicar meu sistema pra vcs entenderem meu problema.
O ejb faz parte de um sistema q originalmente trabalhava e ainda traba com servlet.
O negocio eh o seguinte, eu tenho uma classe java chamada table q se conecta ao banco, essa conecçao eh passada pra ela na hora q ela eh instanciada em uma outra classe. Eu passo uma classe que junto com varias outras faz essa connecçao. Entao ao passar essa classe como parametro pra minha table minha conecçao esta aberta. Isso eh feito pq essa conecçao varia, pode ser de varios bancos.
agora entra o ejb em cena, o ejb vai fazer o papel dessa table, onde tenho q fazer as mesmas coisas so q com ejb, vou precisar usar essa mesma classe para abrir a conecçao, entao precisaria passa-la pro ejb, mas parece q isso nao eh possivel, estou usando BMP e estou com esse problema, pois nao sei como abrir a conecçao com o banco. Se alguem entendeu agora, me ajude.
valeu
Se você precisa usar EJB na sua aplicação, utilize também o pool de conexões do seu servidor de aplicações como maneira de obter a conexão. Além disso, mantenha a conexão aberta pelo menor período de tempo possível e abra somente dentro do seu EJB.
Crie dois ejbs um colaborando com o outro pois não há a necessidade de passar um objeto grande por que ta mandando a conexão inteira se vc pode apenas mandar as informações para um bean que sera sua conexão e o outro que poderá ser a sua table que vc diz e sendo os dois locais fica mais rapido a comunicação e ficaria separado e organizado sua aplicação.
Amigos, obrigado pelas ajudas, mas infelizmente meu problema ainda existe, vou me resumir a exatamente o ponto q esta me dando dor de cabeça pra ver se alguem me ajuda, seguinte, como estou usando BMP eu tenho q incluir no banco, nao o conteiner, nao eh isso? Entao seguinte, como em td jdbc tenho a seguinte linha:
isso q esta me tirando o sono, como nao posso passar a connection pro ejb, como vou poder criar um statement e dar um executeUpdate se esses valores chegam nulos no meu ejb. So isso q quero saber como abrir a conexao fora do ejb e usa-la dentro dele?
obrigado
Como o pessoal lhe disse, você não pode enviar uma conexão para um EJB. Se o seu EJB atualiza uma tabela, por exemplo, você deve enviar os dados para esse EJB, não a conexão em si.
E é o EJB que deve (usando uma classe auxiliar, é lógico - todos os EJBs BMPs vão fazer algo semelhante…) obter a conexão (de preferência via JNDI - DataSource - uma conexão obtida a partir de um pool de conexões) e gravar os dados.
Se você ouviu falar de DAOs, POJOs e outras coisas mais esquisitas, mas nunca quis saber o que são, agora você vai precisar saber.
ok, entao o que eu vou precisar saber? Poderia me dar um caminho, DAO? Estou usando jboss, como obter a conexao de um pool? alguem ja fez isso? embora ache q isso nao resolveria meus problemas.
se por exemplo eu criar a conexao dentro do ejb tenho q passar o driver, posso fazer isso?
Desculpa a inssitencia mas realmente preciso resolver isso, e por enquanto estou com mais duvidas q respostas…
valeu
Bom, não necessidade de passar o conection inteiro pra ele o conection pode ser criado em qualquer lugar basta ter os parametros e um acesso ativo a base de dados. O driver tem que estar na maquina que fara a comunicação e acesso as informações da base de dados. Se vc quer utilizar parametros dinamicos use jndi ou um arquivo de propriedades e carrega ele para fazer a coneção é simples não tem mistério.
Saulo, isso realmente me ajudari, mas onde coloco o arquivo sql.properties, pois coloco dentro do jar da erro e dentro da lib da minha aplicaçao tb, onde devo colocar???valeu
Bom no diretorio de lib poderia ser interessante, pois vc sabe que sempre irá existir este diretorio e não coloca dentro de jar não. Esse arquivo é de texto simples entao ele vai ser lido e não tem a capacidade de ser achado dentro de jar não. Coloque num diretorio simples, que vc sabe que vc vai saber na logica que esta lá e que seja seguro pois, as informações de db tão lá , então não dê bobera.
Olha esta foi apenas uma sugestão , mas existem outras formas , como colocar no arquivo xml de configuração da aplicação , que pode ser acessado tbm com uma api blz.
Obs: o lib é mesmo uma boa opção mas pode ser no web-inf entre outros , até mesmo um que vc pode criar e configurar com segurança certinho e tal blz.