Interceptar um EAR/WAR e acrescentar um componente

18 respostas
pcalcado

Olá,

Seguinte,

Estou iniciando um projeto 9sim, mais um) de testes funcionais e blablabla,a URL está aqui:

https://funky.dev.java.net/

Mas o ponto é um problema que encontrei.

Eu tenho um componente (um JAR ou um WAR) com o componente do Funky. Este componente pode ter uma aplicação web 9mais fácil) ou simplesmente abrir um socket.

O problema é que não quero incluir este componente no código-fonte e configurações da aplicação em si, ele não faz parte do deploy, é usado apenas para testes de caixa-preta dos componentes.

Como eu posso inicializar meu componente se não posso alterar as configurações do aplicativo original?

Ficou confuso isso… :roll:

minha idéia é algo como processar um EAR/WAR e incluir uma configuração (não sei exatamente onde) para inicializar uma classe do Funky quando o pacote for deployado, mas isso vai acabar ficando dependente do AS.

Alguma idéia?

18 Respostas

Luca

Olá

AOP e JMX

[]s
Luca

pcalcado

Não entendi como usar AOP :roll: . Eu não quero interceptar objetos, eu quero que determinado método de um objeto meu seja chamado quando a aplicação subir interferindo o minimo possivel na aplicação real.

Luca

Olá

Explique melhor o que quer fazer. Pelo que entendi, tanto AOP como JMX poderiam ajudar. Acho que não entendi nada.

[]s
Luca

louds

Você não pode simplesmente acionar essa classe a partir do test runner?

pcalcado

não :frowning:

A aplicação vai subir normalmente, e uma porta vai ficar aberta no servidor.

Nesta porta eu vou conectar um cliente que manda o funky executar testes e recebe o resultado.

Eu preciso que o objeto que levanta essa porta seja iniciado junto com a aplicação.

O

Olá,

Pelo que entendi você quer subir um componente junto com a aplicação sem precisar alterar código fonte. Tente adicionar um Listener da aplicação alterando apenas o web.xml.

Segue um exemplo abaixo:

<listener>
     <listener-class>com.arconsulting.imodule.basic.Loader</listener-class>
</listener>

Neste exemplo o container iria instancia a classe Loader, portanto o construtor da classe Loader poderia fazer o q fosse necessário.

Espero que possa ser util.

Abraços.

pcalcado

Obrigado, oandrade, mas o problema é que preciso inicializar uma aplicação que pode ou não ter uma interface web e preciso fazer a configuração automaticamente. :frowning:

O

Então o jeito é sofrer mesmo… :smiley:

louds

phillip, ainda não tá claro oque você quer fazer.

pelo que eu entendi vc quer:

-deploy funky.ear (nada de mais)
-deploy vítima.ear <- aciona o funky.ear para fazer algum trêm.

Isso?

Você vai precisar fazet algo proprietario pro teu AS eu acredito. Mas será que se for j2ee 1.4, a JSR 88 - J2EE Application Deployment não resolve (tou chutando alto).

pcalcado

Sim, exceto por funky não ser um EAR, mas um JAR.

Resumindo meu problema: como isntanciar uma classe automaticamente quando uma aplicação (EAR ou WAR) subir com o mínimo possível de itnromissão nas configurações da aplicação (preferencialmente sem nenhuma :P)?

louds

Hmm, esse jar tem que executar no mesmo contexto da tua aplicação, eu imagino. Então você tem que fazer algum tipo de alteração do deploy mesmo.

Da uma olhada na JSR 88. Quem sabe tua solução seja escrever um deployer que injeta a tralha toda no JAR/EAR/WAR/RAR.

O

PCalcado, lembro q uma vez precisei de algo parecido no JBoss, criei um arquivo .SAR (se não me engano) denomidado Service Archive. Não te serve?

Mauricio_Linhares

Automaticamente é complicado, mas eu acho que o Luca e oandrade já deram a idéia.

Quando a aplicação for web, você usa o filtro e pega o contextInitialized e o contextDestroyed diretamente (usando um filtro seu) ou via pointcuts, já se a aplicação é desktop, normalmente toda a ui é inicializada em uma única classe, pega o fim da execução do contrutor dela no pointcut.

pcalcado

É, acho que em vez de um utilitario oud e algum hack vai rolar um bom e velho HOW-TO para cada AS :frowning:

Mauricio_Linhares

Eita, acho que acendeu uma luz aqui, teria como fazer isso usando o classloader pra saber se a aplicação já carregou?

pcalcado

E quem inciava o classloader, o ovo ou a galinha? :frowning:

O

A galinha :smiley: rs

Mauricio_Linhares

Pois é, também não tem como saber se o classloader já carregou tudo… ô coisa complicada…

Mas eu ainda voto nos aspectos, você “elegeria” uma classe pra definir se a aplicação já terminou de inicializar, aí o resto era fazer os testes :mrgreen:

Criado 22 de junho de 2005
Ultima resposta 22 de jun. de 2005
Respostas 18
Participantes 5