Pessoal, estou comecando com Spring e gostaria de tirar uma duvida com vcs… tenho as seguintes classes:
@Component
public class Main {
public static void main(String[] args) {
// TODO code application logic here
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Tabela1FACADE tb = (Tabela1FACADE) ac.getBean("tabela1FACADE");
tb.novo("asa", "34");
}
}
Nessa ultima eu coloquei o tipo de Transacao como mandatory… pelo q eu li mandatory ele necessita de uma transacao ja aberta. senao ele da erro… agora pergunto eu… nao teria q dar um erro ali?
pq eu so abro a transacao ali para dar o save, e nao estou recebendo ela de algum outro lugar.
Não é você quem abre a transação. Se está funcionando é porque sua transação está sendo gerenciada pelo Spring (ou hibernate), de acordo com a configuração no seu applicationContext.xml. Poste-o para ficar mais claro o que está acontecendo.
Não é você quem abre a transação. Se está funcionando é porque sua transação está sendo gerenciada pelo Spring (ou hibernate), de acordo com a configuração no seu applicationContext.xml. Poste-o para ficar mais claro o que está acontecendo.
Como podemos ver, você declarou o hibernate como gerente de transação. Toda vez que um método do seu serviço é chamado uma transação é ligada à esse método.
Sim, entretanto como eu disse a cada chamada de método no seu serviço uma transação será criada e terminada no retorno do método. Se você estivesse utilizando Spring puro (sem um gerente de transação do hibernate) provavelmente ocorreria a exceção IllegalTransactionStateException, que é a sua dúvida.
E como eu faco para colocar o gerenciamento pelo spring?? pq eu estava testando aqui tbm. por exemplo um projeto chamando outro… e nao funciona o rollback tbm… gerei uma Exception so para testar, e ele nao deu rollback em lugar nenhum. e gostaria de o spring gerenciar isso pra mim
Veja bem, quando eu digo que é o hibernate que gerencia suas transações significa que isso ocorre sobre um proxy do spring. Quando nenhum transactionManager é declarado fica por conta do spring somente gerencias estas transações, mas isso só é usado quando se quer implementar funcionalidades específicas como o pattern OpenSessionInView.
Entao cara pq qual o meu problema, eu trabalho cmo desktop, entao tenho varios projetos diferentes, porem um pode utilizar o outro ou nao… e qdo um utilizar o outro eu quero q o filho participe da transacao do pai, por isso q estava testando essa parte do MANDATORY E tal, porem mesmo eu colocando mandatory, required, etc etc, ele salva no banco… tentei simular tbm um rollback, porem tambem nao obtive sucesso…
sera q vc poderia me dar uma luz de como fazer isso? pelo q vc falou com o gerenciamento de transacao pelo spring, eu conseguiria resolver isso atraves das configuracoes neh?
Entao bkn, o spring ja nao tem todo esse controle?? pelo q eu ouvi falar, pois o meu problema tbm e q por exemplo eu tenho diversos projetos, um pode usar o outro… porem todos podem rodar individualmente, e com essa parte de propagation, e tal… pelo q eu li, serve pra isso, se ja tiver uma transacao utiliza ela, se nao tiver cria outra… e como participa da mesma transacao eu precisar dar rollback em qualquer lguar ele desfaz as outras tbm…
ae mlkao consegui resolver um dos problemas, eu nao tinha posto a tag tx:annotation-driven/ no meu xml eheheheh coloquei e funcionou uma parte do meu problema