Desculpe, sim, tinha feito errado…
fiz da seguinte maneira e os erros sumiram:
@PostConstruct
public void abre() {
this.session = proxifier.proxify(Session.class, new MethodInvocation<Session>() {
private Session sessionDoSpring;
public Object intercept(Session proxy, Method method, Object[] args, SuperMethod superMethod) {
//Session sessionDoSpring = SessionFactoryUtils.doGetSession(factory, true);
if (this.sessionDoSpring == null) {
this.sessionDoSpring = SessionFactoryUtils.doGetSession(factory, true);
}
return new Mirror().on(this.sessionDoSpring).invoke().method(method).withArgs(args);
}
});
}
MAS…
mas o objeto nao eh deletado do banco de dados…
debugando o metodo ‘carrega’ (este metodo nao tem a anotaçao @Transactional, precisa?) da classe ProdutoDao public Produto carrega(Long id){
return (Produto) this.session.load(Produto.class, id);
} encontrei dentro de this.session > CGLIB$CALLBACK_0 > valShandler > sessionDoSpring = null
e assim ao executar a linha do metodo ‘load’ eh retornado um objeto Produto contendo id = null, nome = null, descricao = null e preco = null (sem erros)
***o estranho é que isso acontece também quando o produto é carregado para edição, por exemplo, e os valores são carregados e exibidos para edição normalmente…
a aplicaçao continua a execuçao das linhas de codigo ateh chegar no metodo ‘remove’ da classe ProdutoDao @Transactional
public void remove(Produto produto) {
this.session.delete(produto);
} onde recebe aquele produto com os atributos nulos e executa o metodo ‘delete’ da session que agora sim tem como valor um objeto SessionImpl this.session > CGLIB$CALLBACK_0 > valShandler > sessionDoSpring = SessionImpl e que por sua vez nao ocorre erro mas acaba por nao deletar o produto!
Notei mais algumas situaçoes:
- todas as outras operaçoes da aplicaçao que acessam o banco (exceto a operaçao de deletar) funcionam normalmente, que sao as operaçoes onde o valor de session eh this.session > CGLIB$CALLBACK_0 > valShandler > sessionDoSpring = null…
- o metodo ‘remove’ da classe ProdutosController eh o unico dos metodos que acessa o dao mais de uma vez:
@Restrito
@Delete @Path("/produtoRemove/{id}")
public void remove(Long id) {
Produto produto = dao.carrega(id);
dao.remove(produto);
result.redirectTo(this).lista();
}ou seja, na primeira passada pelo dao a sessionDoSpring eh null… mas na segunda (no metodo remove) nao…
Obs.: minhas classes ProdutosController e ProdutoDao ja foram postadas acima…
nao tenho muito conhecimento sobre isso, mas acredito que com essas informaçoes ja eh possivel ter um diagnostico…
alguem pode me ajudar?