Gerenciamento de transações. Porque não no DAO?  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
noelrocha
Thread.start()

Membro desde: 12/07/2005 12:46:51
Mensagens: 32
Offline

Me falaram e ja li nesse forum quem um erro que muitos cometem é colocar no DAO o gerenciamento de transações ...

Nao consigo ver o que existe de errado nisso:



no meu caso, não uso DAOs sigleton e não uso ThreadLocal, cada dao pega uma sessão e faz oq tem q fazer ....

Me falaram p/ colocar o controle de transaçoes em outra camada da aplicação ...

mas aonde? Algo concreto ...

i pq assim não é aconselhavel?

[]´s
________
Noel R. Morais
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Se você tá chamando "commit()" no Dao, qual a diferença de chamar "commit()" no banco? O que foi que você abstraiu fazendo isso? A lógica do banco de dados está vazando pro código cliente, que nem deveria saber que tem um banco relacional "do outro lado do espelho".

Se você quer algo concreto, é só ver tudo o que já foi falado sobre ThreadLocal e filtros nos últimos dias, ou dar uma olhada no controle de transações do Spring:

http://static.springframework.org/spring/docs/1.2.x/reference/index.html

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
noelrocha
Thread.start()

Membro desde: 12/07/2005 12:46:51
Mensagens: 32
Offline

Isso eu entendo ...

oq faço, não sei se eh certo, eh colocar algo do tipo no save do meu DAO:




é certo isso?

e se eu precisar ter o controle da transação ??

aonde eu colocaria isso?

numa aplicação web, filtros p/ controlar as transações eu concordo e uso quando estou trabalhando com ThreadLocal....

mas e p/ aplicações desktop?


This message was edited 1 time. Last update was at 17/07/2005 20:30:08


[]´s
________
Noel R. Morais
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Usa o Spring ou então cria interceptors pra fazer do mesmo jeito que o filtro faria em uma aplicação web, usando AOP é barbada.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Não é correto colocar o controle dentro do seu DAO, mesmo pq, se você precisar de uma transação que envolva mais de um DAO, vc tá ferrado.

Eu fiz algo assim:



Internamente usei ThreadLocal. Meus DAOs pegam a conexão da transação que é compartilhada por eles, via ThreadLocal. Caso não exista uma transação, ele pega um conexão default do DAO.

A conexão retornada pela Transaction é uma casca sobre a Connection original, pois eu desativei coisas como commit(), rollback() e close(), delegando esta função para a Transaction. Por isso é obrigatório chamar o t.end().

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

O código cliente tem que inicializar as transações Daniel? Não seria melhor que isso fosse feito externamente não? Usando interceptors?

O controle saiu de dentro do DAO mas foi parar no código que usa diretamente os DAOs, não parece melhorar muita coisa não.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

O que você sugere, numa aplicação web, por exemplo, é que toda a ação do action, em um request, é uma transação, correto?

Ao meu ver isso prende demais a gente. Posso ter mais de uma transação ocorrendo no meu negócio e quero poder ter este controle.

Pelo menos meu código de negócio sabe onde começa e termina sua transação. O que fiz foi simplesmente achar uma forma de desacoplar e abstrair o uso de transação para um modelo mais genérico do que acessar recursos indevidamente, além de ser uma forma mais elegante de controle.

Como em EJB você pode criar um método que atenda a uma nova transação, mas como não uso EJB, fiz usando essa camada de controle.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

danieldestro wrote:O que você sugere, numa aplicação web, por exemplo, é que toda a ação do action, em um request, é uma transação, correto?

Ao meu ver isso prende demais a gente. Posso ter mais de uma transação ocorrendo no meu negócio e quero poder ter este controle.


Ora, o Spring dá esse controle sem deixar a transação aparecer pro código cliente

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Mas num sistema onde, nos recursos tecnologicos, não pode aplicar coisas como EJB, Spring e SuperSoluçãoInovadora (tm), a melhor solução foi aquela.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

danieldestro wrote:Mas num sistema onde, nos recursos tecnologicos, não pode aplicar coisas como EJB, Spring e SuperSoluçãoInovadora (tm), a melhor solução foi aquela.


Nesse caso num tem muita escolha né

Mas ainda existem os iinterceptadores com AOP né, ninguém vai reclamar de um bytecode a mais (num vai nem perceber)

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

heheehe... vc não sabe metada da história lá.
por isso já estou de saco cheio.
em 6 dias pego 40 dias de férias.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

danieldestro wrote:heheehe... vc não sabe metada da história lá.
por isso já estou de saco cheio.
em 6 dias pego 40 dias de férias.


Bem que eu queria ficar de saco cheio de férias

Quer trocar por dois cursos superiores e um estágio miserável?

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

2 faculs + estágio? Você tá fudido. que estuda?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

danieldestro wrote:2 faculs + estágio? Você tá fudido. que estuda?


Jornalismo e Desenvolvimento de Software.

O estágio pelo menos eu resolvo em casa mesmo (eles nem iam ter PC pra rodar o Eclipse mesmo...).

Mas pelo menos tá mais perto do que longe, ano que vem eu termino as duas

O povo por aí proíbe de usar frameworks é?

This message was edited 1 time. Last update was at 18/07/2005 01:18:53


Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Pelo que eu entendí você não trabalha, né?

Então, depende da empresa/gestor, é complicado. Se eles fecham um escopo de tecnologia, é bem difícil sair daquilo e usar outras coisas. Ainda mais em grandes empresas com grandes projetos. Eles têm de gerenciar os detalhes, e é aí que às vezes podem limitar nossa capacidade e inovação.

Lá eu consigo usar muita coisa nova. Eu, quando posso, fica colocando algo pra ajudar, mas não fico inventando muito fora daquilo, ainda mais pq usamos um framework in-house, que fede.

Como nunca usei AOP, não fico tentando inventar e, de repente, perder muito tempo aprendendo algo que pode fadar ao fracasso.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team