BCEL e EJBs

Salvem,

 Fiz alguns testes com a API BCEL da Apache e achei MUITO interessante.
 Surgiram algumas dúvidas que gostaria de comentar com quem usa ou conhece melhor esta API.
 Para modificar uma classe que já exista no CLASSPATH eu posso usar uma classe do pacote org.apache.bcel.util.ClassLoader que é nada mais que um ClassLoader especial que já nos dá um objeto JavaClass pronto.
 O problema com esta estrutura é que para usar classes transformadas eu devo sempre obter o objeto .class da mesma usando o Class.forName passando o ClassLoader especial como argumento, e se a classe 'original' estiver na CLASSPATH ou for conhecida de alguma forma pelo system class loader os objetos das mesmas não serão 'castable' ( se é que essa palavra existe ).
 Existe uma outra classe utilitária chamada JavaWrapper que faz exatamente o que o nome diz, ela carrega a classe de entrada com um class loader especial ( o que tem o método modifyClass disponivel ) e invoca o método main da mesma. Isso faz com que todo o resto use o mesmo class loader.
  Isso funciona com aplicações pequenas e talvez com aplicações Desktop, mas acho que isso fatalmente falharia com Web Containers e EJB Containers, pois todos sabemos que estes aplicativos usam class loaders proprios e sostificados.
  A pergunta seria como alterar a classe de um EJB e fazer com que o container a use quando da instanciação dos objetos deste tipo.
  Já pensei em forçar o uso de um ClassLoader definindo-o como o ClassLoader de contexto de uma Thread, talvez poderia colocar isso na thread que invocou o façade, mas se o façade estiver em outra VM não funcionaria, e eu estaria bagunçando com os class loaders do container EJB.
 Agradeço qualquer tipo de ajuda.

Em EJBs voce nao poderia, em tese, nem usar threads, pra comecar :wink:

Acho que a unica maneira de fazer alteracoes numa classe em runtime dentro da J2EE eh usando recursos do proprio application server, recursos da VM (de uma olhada no AspectWerkz, e o que ele faz com a JRockit), ou desistindo da ideia de mexer direto no bytecode e usando java.lang.reflect.Proxy, os famosos dynamic proxies :wink:

Já ouví falar no AspectWerkz e tenho um artigo aqui sobre ele, vou dar uma olhada no que pode ser feito… mas será que consigo encaixar isso no JBoss ?
Obrigado pela dica.