Me intrometendo aqui na sugest�o do Francisco Pinto Ara�jo J�nior.... acho que
ficou faltando definir o inico da transa��o.
try
{
con.setAutoCommit(false); // <========================
// inicio da transa��o
classeA.InclusaoClasseA( con );
classeB.InclusaoClasseB( con );
// Se chegar aqui, � por que tah tudo ok
con.commit(); // Efetiva a transa��o
}
catch( Exceptio e )
===========================================
Francisco Deisimar Nobre J�nior
Analista de Sistemas - CIT - M. Dias Branco
===========================================
-----Mensagem original-----
De: Carlo Giovano [mailto:cgiovano@;atlantico.com.br]
Enviada em: segunda-feira, 4 de novembro de 2002 09:17
Para: [EMAIL PROTECTED]
Assunto: RES: [cejug-discussao] Re: [cejug] Fw: D�vidas
S� para que o Clairton n�o fique em d�vida nas solu��es ( a enviada por mim e a do
Pinto): Na verdade elas s�o equivalentes. A diferen�a � que vc pode usar a minha no
caso de n�o querer deixar vis�vel o pacote de acesso a dados java.sql para classes de
neg�cio e deixar isso apenas para suas classes de dados. Imagine que um servlet, ou um
fa�ade ou uma janela Swing estejam usando suas classes A e B, nesse caso vc n�o
gostaria de "pular" uma camada e fazer esses caras se amarraram ao pacote sql. Da� a
id�ia do UserTransaction para esconder isso. No entanto, se voc� n�o tiver esse tipo
de requisitos ent�o use a solu��o do Pinto que � mais direta ao ponto.
Carlo Giovano
CEJUG
-----Mensagem original-----
De: Francisco Pinto Ara�jo J�nior [mailto:pinto@;softexport.com.br]
Enviada em: segunda-feira, 4 de novembro de 2002 09:54
Para: [EMAIL PROTECTED]
Assunto: Re: [cejug-discussao] Re: [cejug] Fw: D�vidas
Clairton,
Voce podia utilizar o conceito de transa��o.
A id�ia seria algo maisno menos assim:
class ClassA
{
public void InclusaoClasseA( Connection con )
throws Exception
{
// Aplica a tua atualiza��o em usando a conex�o passada (con)
}
}
class ClassB
{
public void InclusaoClasseB( Connection con )
throws Exception
{
// Aplica a tua atualiza��o em usando a conex�o passada (con)
}
}
Na classe (X) que faz a opera��o desejada (Y), de incluss�o nas duas tabelas.:
class X
{
void Y()
{
Connection con = getConnection() // Pega de algum forma uma conex�o
ClasseA classA = new ClasseA();
...
ClasseB classB = new ClasseB();
...
try
{
classeA.InclusaoClasseA( con );
classeB.InclusaoClasseB( con );
// Se chegar aqui, � por que tah tudo ok
con.commit(); // Efetiva a transa��o
}
catch( Exceptio e )
{
// Se chegar aqui � por que alguma das 2 opora��es teve problemas
con.rollback(); // Joga fora as opera��es realizadas.
throw e; // Propaga adiante, se for o caso, a exce��o que aconteceu
// aqui, de modo que a aplica��o saiba que n�o foi realizada
// com sucesso.
}
}
}
Francisco Pinto Ara�jo J�nior
Diretor de Tecnologia - Softexport Inform�tica
Msc. Ci�ncia da Computa��o
SCPJ2
Fone/Fax: +55 85 458 1947
[EMAIL PROTECTED]
www.softexport.com.br
----- Original Message -----
From: "Clairton" < <mailto:clairton@;pmenos.com.br> [EMAIL PROTECTED]>
To: < <mailto:discussao@;cejug.org> [EMAIL PROTECTED]>
Sent: Monday, November 04, 2002 8:17 AM
Subject: [cejug-discussao] Re: [cejug] Fw: D�vidas
>
> Caros senhores da lista:
>
> Tenho uma classe chamada de ClasseA, que tem o um metodo publico de
> inclus�o chamado InclusaoClasseA, e inseri na tabela TabelaClasseA.
> Tenho outra classe chamada de ClasseB, que tem o um metodo publico de
> inclus�o chamado InclusaoClasseB, e inseri na tabela TabelaClasseB.
> Ent�o a d�vida:
> Como fa�o para encapsular os dois metodos para aproveitar a mesma conex�o de
> banco de dados ? Ou seja : Se eu inserir na tabela TabelaClasseA e em
> seguida tentar inserir TabelaClasseB e na classe ClasseB der um erro no
> m�todo InclusaoClasseB, desfazer a minha inclus�o na InclusaoClasseA.
>
> Agradece
>
> <mailto:clairton@;pmenos.com.br> [EMAIL PROTECTED]
>