manipulação de dados em factories diferentes

5 respostas
F

e ai pessoal
tranquilo??

bom… to um problema do tamanho da dívida do brasil…

seguinte…
tenho em meu projeto um segundo projeto… chame de subprojeto se quiser… que obviamente é independente… senão estaria dentro de meu projeto…
porém… no meu primeiro projeto preciso fazer operações no subprojeto mas preciso que sejam integras as operações…
por exemplo…
se tentar excluir um registro do primeiro projeto que tenha relacionamento com o segundo projeto… preciso que, se caso de algum erro no subprojeto, para a operação do primeiro também, preciso que o hibernate faça rollback dos dados e assim exibo uma mensagem para o usuário.

pergunta… existe possibilidade (sem usar EJB3) de fazer isso sem ter que colocar dependencias do primeiro peojeto para o segundo? caso contrário,
cada vez que usar este subprojeto em algum outro projeto, precisarei reimplementar os métodos e factories…

alguem já teve algum problema parecido??

valeu galera…
abraços…

PS: caso não tenham entendido, eu explico novamente.

5 Respostas

louds

Você quer que as operações entre esses 2 projetos sejam atômicas, é isso?

Se ambos acessam a mesma base de dados, faça eles compartilharem a mesma conexão de banco de dados e pronto. Senão você precisa de um monitor de transações e usar JTA.

F

e ai louds
traquilo??
pois bem… esse é meu outro problema… são acessos a bases diferentes… e eu já trabalho com transação… uso JTM
JTA me obrigava a comitar e dar rollback na transação… usando JMT posso trablhar com a sessão aberta e solicitar quando quero abrir uma nova…

tentei usar uma session de faxada (é assmi que escreve?? me deu branco) mas não funcionou direito… alias… até funcionou… mas o hibernate não tá respeitando a ordem dos meus comandos em hql…

por exemplo…
preciso excluir alguns registros que um determinado usuario possui

no meu proj principal tenho as sessions, interfaces e interface com o usuário e inclusive a conexão com o banco que está relacionada aos registros e outras operações dos usuários e também as configurações do hibernate para este projeto

no meu subprojeto tenho as sessions, um frame compartilhado que será padrão sempre que utilizar este subprojeto em qualquer outro projeto, as sessions, interfaces e configurações do hibernate para este projeto

em determinado momento do meu proj principal… em uam das telas preciso excluir este usuário. Junto com ele preciso apagar todos os registros que tem relacionamento com este usuário. porém tenho que tratar tudo isso dentro de uma única sessão do contrário o hibernate se perder e tenta apagar coisas antes das outras… mesmo eu determinando a ordem as coisas…
se eu tentar fazer isso em sessões diferentes, o sql retorna erro de violação de constraints… se forçar o hibernate apagar ascosias certas na ordem certa… quando vou apagar o usuário (não sei quem) ele fica pindurado, como se tivesse feito um lock dele na sessão, sendo o erro que o mysql me retorna… SQL Error 1205 Lock wait timeout. try restarting transaction…

já tentei inúmeras coisas… será que não existiria uma forma de criar uma factory de fachada? ou alguma coisa semelhante para que nada fique pindurado e as coisas posasm fluir naturalmente?
o engraçado é que se eu não executar os métodos adequados dentro da minha session de fachada, tudo ocorre bem… mas perco a segurança e integridade da operação…

alguem sabe como fazer??

louds

O que você me falou não fez o menor sentido para mim.

Vamos aos poucos. Um checklist primeiro.

:arrow: São duas bases de dados distintas, servidores distintos?
:arrow: Cada projeto possui SessionFactories do hibernate distintas?
:arrow: Existe constaints entre as bases? Se elas forem remotas não tem problema desde que não sejam cíclicas.

Como falei, para garantir atomicidade quando envolve mais de uma transação você precisa de um monitor e um banco que suporte XA.

pcalcado

Oi,

Em vez de fazer commit/rollback na mão tente utilizar algo declarativo como Spring:
http://static.springframework.org/spring/docs/1.2.x/reference/transaction.html

Demarque suas transações nele ou entõa você pode usar EJBs, mas acredite o Spring é uma solução menos masoquista.

F

louds:
O que você me falou não fez o menor sentido para mim.

Vamos aos poucos. Um checklist primeiro.

:arrow: São duas bases de dados distintas, servidores distintos?
:arrow: Cada projeto possui SessionFactories do hibernate distintas?
:arrow: Existe constaints entre as bases? Se elas forem remotas não tem problema desde que não sejam cíclicas.

Como falei, para garantir atomicidade quando envolve mais de uma transação você precisa de um monitor e um banco que suporte XA.

muito bem louds…
:arrow: sim, são duas bases mas não em servidores distintos.
:arrow: sim, possuem…
:arrow: sim existem constraints… mas não sei dizer se são ciclicas…

e muito bem… como fuciona esse monitor? o que tenho que fazer para que os sessionbeans se comuniquem?

se ainda não ficou claro explico de novo com outro exemplo…
valeu por ajudar…

então… as minhas transações já são automatizadas com a JMT… se fosse JTA precisaria controlar na mão… mas naum preciso
… esqueci de mencionar que é uma aplicação swing… posso usar spring nesse caso?? e outra… para esta versão da aplicação ficaria inviável mudar tudo agora… já estamos quase concluindo…
mas fica a sugestão para uma versão futura

Criado 3 de maio de 2006
Ultima resposta 3 de mai. de 2006
Respostas 5
Participantes 3