| Autor |
Mensagem |
|
|
É provavelmente resolveria... porem no até 15 de dezembro não terei tempo para estudar uma ferramenta ORM, por isso decidi usar o pattern DAO, assim acredito que quando tiver mais tempo para estudar não terei muitos problemas migrando.
valeu
|
 |
|
|
Bom, neste caso utilizar uma interface não ajudaria já que nas classes ItemTexto e ItemImagem eu teria que implementar todos os gets e Sets, e neste caso, ItemTexto e ItemImagem são um Item.
A idéia de colocar o sql em um arquivo separado é boa, mas não resolve o problema pois eu teria 3 comandos sql usando join com a tabela de item, e se esta tabela mudar, altero os 3 comandos SQL.
ItemDAO já é uma classe concreta, a classe abstrata é a classe Item , assim sendo, nao posso passar item Para o construtor de ItemTexto e ItemImagem.
Estou aqui pensando... ItemDAO (Dao da classe abstrata Item) poderia ter o comando sql nela e eu executaria esse comando nos DAOS das classes concretas que são instanciados na ItemDAO, porem para isso eu preciso passar uma refenrência de ItemDAO ou então deixar um método estatico de obter o comando SQL, o que eu acredito não ser uma boa opção
o que vocês acham?
|
 |
|
|
Luiz, o que eu quis dizer foi que nos DAOS itemTextoDAO e itemImagemDAO eu acabo fazendo JOIN com a tabela ITEM para conseguir buscar os atributos que são da classe abstrata Item. Se futuramente eu tiver outra classe que extends item, o DAO tambem vai ter que fazer o join para buscar os atributos. E se minha tabela de item mudar? vou ter que alterar o comando SQL em todas os DAOS das classes que descendem de item.
Consegui passar a idéia?
valeu
|
 |
|
|
Boa Tarde Pessoal,
Estou começando a desenvolver utilizando o pattern Dao, e encontrei uma situação em que não sei qual a melhor alternativa.
Meu problema é o seguinte:
No modelo de Banco, eu tenho uma tabela Item, que é especializada em outras duas tabelas, itemTexto e itemImagem.
No diagrama de classes eu tenho uma classe Abstrata Item e as classes ItemTexto e ItemImagem são filhas da Classe Item.
Também tenho uma classe Pagina que é composta por diversos itens (sejam eles ItemTexto ou ItemImagem).
Qual seria a melhor alternativa para na classe Pagina criar um método que crie meus objetos Descendentes de Item a partir do Banco?
Inicialmente eu fiz um método "popularItens()" que instanciava um ItemDAO, e o ItemDAO instanciava ItemTextoDAO e ItemImagemDAO, que retornavam seus respectivos objetos criados a partir das tabelas itemImagem e ItemTexto.
Porem percebi que essa não é uma boa alternativa, pois nos Daos das classes descendentes(ItemTextoDAO e ItemImagemDAO) eu tenho que fazer Join com a tabela de Item para buscar os Campos que são da classe Abstrata Item. Isto me gera varios pontos de manutenção para a mesma consulta.
Bom espero ter sido claro o suficiente, pois descrever um problema assim através de texto é bem difícil. Estou anexando parte do diagrama de classes e do banco para ficar mais claro.
Podem me ajudar a pensar em uma alternativa melhor?
Valeu
|
 |
|
|
Parabéns Bruno,
Muito boa a fundamentação do projeto, o foco das equipes de desenvolvimento devem ser no problema que deve ser resolvido e ferramentas como essa não só facilitam a nossa vida mas permitem que nos preocupemos com outras coisas em relação ao projeto.
Espero que consiga colaboradores para o projeto.
Abraço
|
 |
|
|
|
Não uso o tomCat não... o pool de conexões foi implementado na mão aqui (não me pergunte porque).
|
 |
|
|
Sinceramente não faço idéia do que está acontecendo aqui, pois o pool de conexões foi implementado na mão, e a conexão é realmente fechada quando se chama o método close().
Mesmo fechando o statment e o resultset, os cursores não estão sendo fechados. Só quando a conexão é fechada.
Valeu pela ajuda pessoal
|
 |
|
|
Acredito que o problema não é fechar os Statments, pois até nas consultas feitas pelo DataProvider ocorre o problema, e o Statment é fechado. O que sobrou agora é o driver do oracle... porem eu baixei o mais recente hoje e continuo com o problema.
A unica coisa que realmente fecha os cursores é fechar a conexão...
falou
|
 |
|
|
estou com o mesmo problema.
Eu fecho os statments e resultset e libero as conexões pro pool. O problema que reparei é que ao fechar os Statments e resultsets seria para liberar os cursores, porem os cursores só são liberados quando a conexão é fechada.
Não há a menor possibilidade de fechar as conexões, pois de que adianta fechar uma para devolve-la ao pool? o pool teria que criar outra conexao e acaba perdendo o sentido utiliza-lo. (não sei por que diabos o pool do sistema foi criado na raça!)
Reparei que nos ResultsSets tem um método que é setHoldability. Neste método eu passo a constante CLOSE_CURSORS_AT_COMMIT mas ele não fecha os cursores de maneira nenhuma.
Não sei se é alguma limitação do driver jdbc, já entrei no site da oracle e baixei o ultimo e não mudou nada.
por enquanto, pra contornar a situação eu estou utilizando uma gambi, que quando lança uma SQLException e a mensagem é de maximo de cursores eu fecho a conexao, abro outra, executo o comando novamente e devolvo a conexao ao pool, porem isso é temporario mesmo, para ter como testar o sistema até encontar uma solução.
Se encontar a solução por favor poste, estou pesquisando e farei o mesmo.
Abraço
|
 |
|
|
Olá
Paulo, estou com o mesmo problema.
Eu fecho os statments e resultset e libero as conexões pro pool. O problema que reparei é que ao fechar os Statments e resultsets seria para liberar os cursores, porem os cursores só são liberados quando a conexão é fechada.
Não há a menor possibilidade de fechar as conexões, pois de que adianta fechar uma para devolve-la ao pool? o pool teria que criar outra conexao e acaba perdendo o sentido utiliza-lo.
Reparei que nos ResultsSets tem um método que é setHoldability. Neste método eu passo a constante CLOSE_CURSORS_AT_COMMIT mas ele não fecha os cursores de maneira nenhuma.
Não sei se é alguma limitação do driver jdbc, já entrei no site da oracle e baixei o ultimo e não mudou nada.
por enquanto, pra contornar a situação eu estou utilizando uma gambi, que quando lança uma SQLException e a mensagem é de maximo de cursores eu fecho a conexao, abro outra, executo o comando novamente e devolvo a conexao ao pool, porem isso é temporario mesmo, para ter como testar o sistema até encontar uma solução.
Se encontar a solução por favor poste, estou pesquisando e farei o mesmo.
Abraço
|
 |
|
|