Remover/Não executar uma linha de programação usando Reflection ou/e AspectJ [Resolvido]

9 respostas
marcoamv3000

Estou desenvolvendo uma rotina para o blazeds mas preciso remover/não executar uma linha de uma classe java
dentro do Hibernate segue a classe abaixo:

package org.hibernate;

import org.slf4j.LoggerFactory;

public class LazyInitializationException extends HibernateException {

	public LazyInitializationException(String msg) {
		super(msg);
		LoggerFactory.getLogger( LazyInitializationException.class ).error( msg, this ); // ESSA É A LINHA QUE PRECISO REMOVER OU NÃO DEIXAR EXECUTAR.
	}

}

Código AspectJ para capturar a cath:

pointcut lazyInitializationException(LazyInitializationException e): handler(LazyInitializationException+) && args(e);
	before(LazyInitializationException e) : lazyInitializationException(e) {
		// ATÉ AQUI EU CONSIGO CAPTURAR ANTES DE EXECUTAR A EXCEPTION MAS NÃO DESCOBRIR UMA FORMA DE NÃO DEIXAR EXECUTAR O LoggerFactory.
	}

Código do try:

try {
// MINHAS VALIDAÇÕES
} catch (LazyInitializationException e) {
// AQUI EU FAÇO OUTROS CÓDIGOS MAS EU PRECISO QUE O LoggerFactory NÃO EXECUTE.
}

OBS: EU UTILIZO O SLF4J JUNTO COM O LOG4J E FAÇO VÁRIAS VALIDAÇÕES ENTÃO A OPÇÃO DE DESABILITAR ELE
NÃO É UMA SOLUÇÃO CASO ALGUEM DE A SUGESTÃO EU SÓ PRECISO QUE ESSA LINHA DO LOGGER NÃO EXECUTE.

DESDE JÁ AGRADEÇO PELA AJUDA… :smiley:

9 Respostas

Mikhas

Bem cara… acho que deva existir alguma alternativa melhor do que logar quando a exception é criada.

Por que você faz assim ? O que você quer com isso ?

marcoamv3000

Isso que estou desenvolvendo faz parte de um estudo para o Blazeds do Flex e preciso de um solução conforme foi explicado acima para não precisar usar de outros recursos espero que alguem possa me ajudar continuo aguardando resposta…

F

Olá, se estiver com problemas de integracao entre flex , blaseds e hibernate, considere utilizar gilead ou dphibernate , se nao quiser usar frameworks, crie seu proprio adaptador para hibernate e troque pelo default do blazeds, lempre-se o blazeds funciona com adptadores plugaveis em seu canal de comunicacao rpc. Recompilar o codigo fonte do hibernate e modifica-lo te levara a serios problemas, nao siga esse caminho. Lembre-se tambem que ao utilizar um aspecto em seu objeto, ele nao sera mais um simples objeto, se tornara um proxy o que pode te levar a mais problemas.

Espero ter ajudado.

marcoamv3000

Agradeço pela informação mas ainda gostaria de uma solução para o problema que propus.

esmiralha

Se é só um estudo como vc diz, remova a linha do código fonte e recompile o Hibernate. Ele é open source, lembra??

F

Olá , desculpe por ser evasivo a sua pergunta. Sim eh possivel modificar o corpo do metodo, e linhas no codigo, muitas frameworks o fazem implicitamente inclusive o aspectj, tera que trabalhar com instrumentacao de bytecode, procure bibliotecas como javassist e asm.

marcoamv3000

Gostaria de saber se você possui alguma documentação ou exemplo que possa me ajudar… acredito que me pouparia um bom tempo…
Desde já agradeço…

F

Olá, aqui esta um bom material em ingles:
http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html

Aqui tem um otimo tutorial em portugues:

the.modelprogrammer.com/port/recursos/javassist.ppt

marcoamv3000

Agradeço pela ajuda muito obrigado…

Criado 24 de janeiro de 2011
Ultima resposta 30 de jan. de 2011
Respostas 9
Participantes 4