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.

Avalie esse artigo

Relevância
Estilo/Redação

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 mensagens dessa discussão
Comentários da comunidade

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

Receber mensagens dessa discussão

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

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.