| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/02/2008 00:04:00
|
Alessandro Lazarotti
Virtual Machine Man
![[Avatar]](/images/avatar/2aaaddf27344ee54058548dc081c6541.jpg)
Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline
|
microfilo wrote: Aí eu não tenho um mecanismo que gerencia a transação. Seria o mesmo que controlar a UserTransaction na mão. Da muito trabalho e obriga os meus objetos de dominio a lidar com transação, algo que eu não acho legal.
Exatamente, o controle é explícito programaticamente, embora a abstração da API transacional através da estratégia lhe garanta um Gateway no domínio isolado da tecnologia. Quanto ao domínio lhe dar com a transação, mesmo se você colocasse metadados nas entidades, como as annotations @Transaction, o controle continuaria no Domínio.
microfilo wrote:
Mas seria a "entity" o local mais adequado para demarcar as transações? e se eu for utilizar uma mesma "entity" em um outro contexto em que o isolamento transacional é diferente?
Transações são ações bem particulares dos casos de uso. Fatalmente, se você possui um domínio rico e ubiquitous, o comportamento da entidade reflete diretamente estas ações. Se um comportamento explícito em um ou mais métodos requer determinado tratamento, por consequência toda chamada a este método/comportamento deve ser executada de mesma forma, caso contrário é uma ação diferente.
Se isso estiver em um Service (o controle de transações), não muda nada. Services também são objetos de negócio pertencentes ao domínio, assim como Aggregates, ValueObjects, Entities, etc. Da mesma forma que você pode utilizar um Entity em lugares distintos, você também poderia utilizar um service. A questão é, se em lugares diferentes eles podem possuir comportamentos diferentes, então alguma coisa na modelagem pode não estar legal.
Claro, outra alternativa é deixar a cargo da Application Layer (Actions, Commands, ManagedBeans e afins). Em vista que a transação possa ser encarada como serviço do sistema, a própria camada de aplicação pode resolver este problema... a questão é, será que isso é interessante para todos os casos? Eu acredito que não.
microfilo wrote:
Lezinho wrote: Em caso de transações atômicas uso flushMode manual do hibernate ...
O flush em si não resolve... Mesmo que você faça o flush, se você fizer o rollback da transação, o seu update não sera refletido no banco de dados.
Isso é o que espero, note que me referi as transações atômicas e não em isolamentos.
microfilo wrote: Acho que a gente se confundiu, heheh. Para invocações client-side é bem parecido com DWR.
Pois é, hehe. Mas com o DWR eu posso invocar diretamente um EJB na página?
[]'s
|
... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/02/2008 02:44:30
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Desculpa, eu me perdi na troca de mensagens e não entendi alguma coisa que fez o resto todo perder sentido: estamos falando de criação de Entities ou de demarcação de transação?
Não há problema em demarcadores de transação ficarem em qualquer lugar, creio. Esse tipo de metadado -apesar de intrusivo- não influencia no domínio.
Que tal algo como:
- Façade: demarca inicio da transação, recebe dados e passa para repositório.cria
- Repositório.cria : exige uma trnasação já existente, cria o usuário
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/02/2008 09:40:37
|
Alessandro Lazarotti
Virtual Machine Man
![[Avatar]](/images/avatar/2aaaddf27344ee54058548dc081c6541.jpg)
Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline
|
A discussão era sobre onde gerenciar a transação e como isso poderia se dar em situações onde o repositório esta diretamente na Entity e como fazer isso.
Resumidamente eu acho que depende da situação. Se existir façade, que se faça nela... se o processo se inicia em um Service, que seja nele... caso for na entidade, que seja nela.
Outra discussão foi de "como" fazer isso, quando o controle esta diretamente na Entidade...
|
... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/
|
|
|
 |
|
|
|
|