BT

Byteman 2.0.0: Manipulação de bytecode, testes, injeção de exceções e logging

por Bienvenido David III , traduzido por Rafael Sakurai em 06 Fev 2012 |

[Esta tradução incorpora atualizações e correções apontadas pela equipe do projeto nos comentários do texto original.]

A JBoss lançou o Byteman 2.0.0, uma ferramenta open source de manipulação de bytecode Java e licenciada sob a GNU LGPL 2.1. O Byteman é um agente Java que ajuda em testes, mapeamento e monitoramento do código. Permite que os desenvolvedores mudem as operações das aplicações Java, enquanto são carregadas ou durante a execução. O Byteman remove a necessidade de reescrever ou recompilar a aplicação, e pode modificar até mesmo as classes da plataforma Java, como String, Thread e outras.

Estas são as principais novidades na versão 2.0.0:

  • Informações de arquivos e de depuração: Regras compiladas do Byteman agora contêm informações de arquivos e de número de linhas. Este é um passo na direção de fornecer suporte completo à depuração. (Estão sendo criadas extensões para IDEs e depuradores, especificamente o Eclipse e o IntelliJ Idea, para fornecer suporte para desenvolvimento e execução com o Byteman, mas ainda não foram concluídas.)
  • Importação da BMunit do TestNG: As classes do TestNG agora podem importar os comportamentos do BMUnit usando a anotação @Listener. As versões anteriores obrigavam que as classes de TestNG herdassem de BMNGRunner, o que causava conflitos quando as classes de testes já estendiam outras classes de testes.
  • Regra para lançamento de erros. Uma nova regra permite lançar exceções não-checadas na aplicação e no código, em tempo de execução da JVM. (O código injetado pelo Byteman é type-checked e type-safe, portanto o lançamento de exceções não pode quebrar o contrato dos métodos.)

O Byteman usa uma linguagem de script simples, chamada Event Condition Action (ECA) para especificar onde, quando e como os códigos Java podem ser manipulados. A execução do código continua normalmente após a execução do código injetado, mesmo seja lançada uma exceção ou fornecido um retorno antecipadamente. O exemplo a seguir demonstra um script simples:

# script.btm
RULE trace main entry
CLASS App
METHOD main
AT ENTRY
IF true
DO traceln("Entrando no main")
ENDRULE

Este script informa que o Byteman deve imprimir "Entrando no main" no início do método App.main(). Para habilitar o Byteman na sua aplicação e especificar o script, adicione o agente Java nos argumentos para a JVM:

-javaagent:<BYTEMAN-DIR>\lib\byteman.jar=script:script.btm

Também é possível adicionar o Byteman em aplicações em execução, através do script bminstall.sh. Para regras mais complexas e para a injeção de código, é possível construir os scripts usando os "Rule Helpers" do Byteman, ou criar uma classe POJO e usá-la como plug-in.

De forma similar ao Byteman, a programação orientada a aspectos (AOP) é capaz de controlar classes e injeção de código. Com o Byteman, no entanto, não há necessidade de se criar classes ou compilar código. Ném é preciso se prever 100% do código que deve ser escrito, pois é possível decidir posteriormente o código que deve ser injetado. O Byteman também é mais fácil de usar e alterar, especialmente para testes e necessidades eventuais de logging.

Para saber mais sobre o Byteman, a JBoss disponibiliza um guia do programador bem detalhado, a documentação oficial, um fórum e também as notas de release, informando todas as novidades da versão 2.0.0. O Byteman pode ser baixado no site da JBoss e o código fonte está disponível no GitHub.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT