SlideShare a Scribd company logo
Introdução ao Byteman
Filippe Spolti
Software Engineer - Red Hat
TDC2016POA | Trilha Java - Introdução ao Byteman
Resolvendo o problema
RULE setRequestsRecovery
CLASS org.jbpm.process.core.timer.impl.QuartzSchedulerService
METHOD internalSchedule
AT WRITE $jobq
IF TRUE
DO
traceln("[BYTEMAN] Current Value for requestsRecovery: " + $jobq.requestsRecovery() +
" ---------- UPDATING");
$jobq.setRequestsRecovery(true);
traceln("[BYTEMAN] New value for requestsRecovery: " + $jobq.requestsRecovery());
ENDRULE
Primeiros Passos
• Como Ativar o Byteman?
• -javaagent:/$BYTEMAN_HOME/lib/byteman.jar=script:$BYTEMAN_HOME/scripts/MyCo
olScript.btm
• sys - Adiciona o byteman ao System classloader.
• boot - Adiciona o byteman ao bootstrap classloader.
• Load/Unload Byteman em Runtime
• bminstall.sh - Cuidado!
• bmsubmit.sh - Load/Unload de Scripts Byteman.
• Integrações
• Principais framework de testes: Junit e TestNG.
• Maven/ant (Annotations).
• Validando o script
• bmcheck.sh
ECA - Event Conditions Action
• Where (onde)
• CLASS java.lang.Thread
• METHOD start()
• AT ENTRY
• Whether (se)
• IF true
• What (Qual)
• DO traceln("*** Hello TDC POA ***")
Esqueleto do Script Byteman
RULE @X regra feliz
COMPILE|NOCOMPILE (Opcional)
CLASS|INTERFACE br.com.tdcpoa.MinhaClasseLegal
METHOD NaoMeModifique (Para construtores <init>)
HELPER br.com.tdcpoa.MeuAjudanteNota10 (Opcional)
AT WRITE $objetoA (Opcional)
BIND nome:type = valor (Opcional)
feliz:boolean = $objetoA.Feliz();
IF feliz == true
DO //faça algo legal
minhaOperacaoBuiltInParaImprimir(“Feliz“);
ENDRULE - Fim da definição da regra
Especificadores de Localização
AT ENTRY AFTER INVOKE [ type .] method [ ( argtypes ) ][count | ALL ]
AT EXIT AT SYNCHRONIZE [count | ALL ]
AT LINE number AFTER SYNCHRONIZE [count | ALL ]
AT READ [type .] field [count | ALL ] AT THROW [count | ALL ]
AT READ $var-or-idx [count | ALL ] AT EXCEPTION EXIT
AFTER READ [ type .] field [count | ALL ]
AFTER READ $var-or-idx [count | ALL ]
AT WRITE [ type .] field [count | ALL ]
AT WRITE $var-or-idx [count | ALL ]
AFTER WRITE [ type .] field [count | ALL ]
AFTER WRITE $var-or-idx [count | ALL ]
AT INVOKE [ type .] method [ ( argtypes ) ] [count | ALL ]
O que é um Helper?
• Auxiliar
• Helper.java
• Subdivido em três categorias:
• coordenação de threads
• Gerenciamento do ciclo de vida das regras
• Debug e Tracing
import org.jboss.byteman.rule.helper.Helper;
public class MeuAjudanteNota10 extends Helper {
public void printHello(){
System.out.println(“Hello TDC POA);
}
}
Expressões de Referência
$!, $^, $#, $*, $@, $CLASS e $METHOD
$0, $1, $x, $this
CLASS ^javax.naming.InitialContext
Operadores
OR (||), LE (< =), NE (!=) TIMES (*) MINUS (-)
AND (&&), LT (<) GE (>=) DIVIDE (/) MOD (%)
NOT (!), EQ (==), GT (>) PLUS (+)
Principais Expressões
Compilar ou Interpretar as regras?
● Interpretadas
● Vale a pena?
● Quando usar regras compiladas?
● org.jboss.byteman.compile.to.bytecode
ClassNotFound?
● IMPORTS
● JBoss Modules
● OSGI e JigSaw (java 9)
BMunit
Código Java
@RunWith(org.jboss.byteman.contrib.bmunit.BMUnitRunner.class)
@BMUnitConfig(loadDirectory="target/test-classes")
@BMScript(value="check.btm")
public class MavenBMUnitTest {
@Test
...
}
A regra:
RULE check head
CLASS WebWriter
METHOD makeHeader
AT EXIT
BIND result = $builder.toString()
IF (NOT result.contains("<HEAD>") || NOT result.contains("</HEAD>"))
DO
THROW new RuntimeException("Header Inválido, Byteman got you. :)");
ENDRULE
Verificando Regras
• Sempre verifique
• Livre de erros e warnings
• bmcheck
• bmcheck.sh -p br.com.tdcpoa -cp .
../../src/test/resources/check.btm
• maven
• configurar plugin byteman-rulecheck-maven-plugin
Ativando o Byteman no WildFly 10!
• Arquivos standalone.conf e domain.conf
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"
fi
Modo Standalone:
JAVA_OPTS="$JAVA_OPTS
-javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:/dados/presentations/byteman/demo/byteman-web-app/src/resources/th
read.btm,boot:$BYTEMAN_HOME/lib/byteman.jar,boot:/dados/presentations/byteman/demo/byteman-helper/target/byteman-
helper-1.0-SNAPSHOT.jar -Dorg.jboss.byteman.transform.all"
Domain:
<jvm-options>
<option
value="-javaagent:/${jboss.home.dir}/byteman/lib/byteman.jar=script:${jboss.home.dir}/byteman/scripts/org.jboss.re
moting3.EndpointImpl.btm,boot:${jboss.home.dir}/byteman/lib/byteman.jar"/>
<option value="-Dorg.jboss.byteman.transform.all=true"/>
</jvm-options>
Trabalhando com Regras em Runtime
● Instalando o byteman em uma JVM em execução:
> bminstall.sh 13101
> bminstall.sh -b -Dorg.jboss.byteman.transform.all
$JBOSS_HOME/jboss-modules.jar
● Carregando regras em runtime:
> bmsubmit.sh -l thread.btm
Descarregando regras:
> bmsubmit.sh -u thread.btm
Opções disponíveis do agente java
script:scriptfile
resourcescript:scriptfile
listener:boolean
port:portnum
address:host
manager:classname
modules:classname
sys:jarfile
boot:jarfile
policy:boolean
prop:name=value
Opções extra de configuração
Algumas configurações avançadas
• org.jboss.byteman.compileToBytecode
• org.jboss.byteman.dump.generated.classes
• org.jboss.byteman.dump.generated.classes.directory
• org.jboss.byteman.dump.generated.classes.intermediate
• org.jboss.byteman.debug
• org.jboss.byteman.transform.all
• org.jboss.byteman.skip.overriding.rules
• org.jboss.byteman.allow.config.updates
• org.jboss.byteman.sysprops.strict
Exemplo de Configuração
JAVA_OPTS="$JAVA_OPTS
-javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:/dados/presentations/byteman/demo/byteman-web-app/s
rc/resources/rule.btm,boot:$BYTEMAN_HOME/lib/byteman.jar,boot:/dados/presentations/byteman/demo/byte
man-helper/target/byteman-helper-1.0-SNAPSHOT.jar -Dorg.jboss.byteman.transform.all"
Detalhando:
● -javaagent:/$BYTEMAN_HOME/lib/byteman.jar
○ É responsável por ativar o Byteman, Qualquer coisa depois do ‘=’ são as configurações do Byteman
separadas por vírgula.
● script:$BYTEMAN_HOME/scripts/script.btm
○ /dados/presentations/byteman/demo/byteman-web-app/src/resources/thread.btm
● boot:$BYTEMAN_HOME/lib/byteman.jar
○ diz ao Byteman que ele deve ser carregado no classloader bootstrap para acessar até classes da JVM.
● boot:$BYTEMAN_HOME/lib/byteman-helpers.jar
○ Define o helper no classloader bootstrap.
QuickStarts e tutoriais
● https://developer.jboss.org/wiki/FaultInjectionTestingWithByteman
● $BYTEMAN_HOME/contrib
● https://developer.jboss.org/wiki/BMUnitUsingBytemanWithJUnitOrTestNGFr
omMavenAndAnt
● https://developer.jboss.org/wiki/CheckingYourBytemanRuleScriptsUnderMav
en
● https://developer.jboss.org/wiki/FaultInjectionTestingWithByteman
● https://developer.jboss.org/wiki/BMUnitUsingBytemanWithJUnitOrTestNGFr
omMavenAndAnt#how_do_i_inject_trace_into_junit_tests
Demonstração
That’s it Folks
Obrigado!
http://byteman.jboss.org/
https://github.com/bytemanproject/byteman
IRC - Servidor: freenode - Canal: #byteman
https://www.gitbook.com/book/jboss-books/byteman-guia-do-programador/details
https://www.gitbook.com/@jboss-books/
https://github.com/jbug-brasil/byteman-repo
Telegram - Grupo JBug Brasil
IRC - Servidor: freenode - Canal: #jbug-brasil

More Related Content

What's hot (20)

PDF
You Don't Know Query - WordCamp Portland 2011
andrewnacin
 
PDF
MySQL in Go - Golang NE July 2015
Mark Hemmings
 
KEY
dotCloud and go
Flavio Poletti
 
PDF
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
Faysal Shahi
 
PDF
Ansible tips & tricks
bcoca
 
PDF
Hd insight programming
Casear Chu
 
KEY
Fatc
Wade Arnold
 
PPT
Working with databases in Perl
Laurent Dami
 
ODP
Europython 2011 - Playing tasks with Django & Celery
Mauro Rocco
 
PDF
Unit Testing Lots of Perl
Workhorse Computing
 
PDF
Puppet Camp 2012
Server Density
 
KEY
Bake by cake php2.0
株式会社バンシステムズ
 
PDF
Smolder @Silex
Jeen Lee
 
PDF
Effective Benchmarks
Workhorse Computing
 
PDF
Go database/sql
Artem Kovardin
 
PDF
Power shell examples_v4
JoeDinaso
 
PDF
Django Celery - A distributed task queue
Alex Eftimie
 
PDF
Django - 次の一歩 gumiStudy#3
makoto tsuyuki
 
PDF
Asynchronous I/O in PHP
Thomas Weinert
 
PDF
Perl Bag of Tricks - Baltimore Perl mongers
brian d foy
 
You Don't Know Query - WordCamp Portland 2011
andrewnacin
 
MySQL in Go - Golang NE July 2015
Mark Hemmings
 
dotCloud and go
Flavio Poletti
 
WordPress Security - ওয়ার্ডপ্রেসের সিকিউরিটি
Faysal Shahi
 
Ansible tips & tricks
bcoca
 
Hd insight programming
Casear Chu
 
Working with databases in Perl
Laurent Dami
 
Europython 2011 - Playing tasks with Django & Celery
Mauro Rocco
 
Unit Testing Lots of Perl
Workhorse Computing
 
Puppet Camp 2012
Server Density
 
Smolder @Silex
Jeen Lee
 
Effective Benchmarks
Workhorse Computing
 
Go database/sql
Artem Kovardin
 
Power shell examples_v4
JoeDinaso
 
Django Celery - A distributed task queue
Alex Eftimie
 
Django - 次の一歩 gumiStudy#3
makoto tsuyuki
 
Asynchronous I/O in PHP
Thomas Weinert
 
Perl Bag of Tricks - Baltimore Perl mongers
brian d foy
 

Viewers also liked (20)

PPT
BIG DATA, de Fabiana Andrade
bibliocampsp
 
PPTX
Big Data, JVM e Redes Sociais
José Renato Pequeno
 
PDF
Cidades Inteligentes e Big Data
Diego Lusa
 
PPT
Big Data em 8 perguntas - 09.10.2014 - DATANORTE / GOV RN
Marcos Luiz Lins Filho
 
PDF
Big Data na Nuvem
Amazon Web Services LATAM
 
PDF
Mongo db no mundo real slides
Suissa
 
PDF
Hadoop, Big Data e Cloud Computing
Amazon Web Services LATAM
 
PDF
Big data e mineração de dados
Elton Meira
 
PDF
Big Data e Governança de Dados, via DMM-Data Management Maturiy Model
Carlos Barbieri
 
PDF
Big Data, Analytics, Aplicações, Aspectos Práticos e o Cientista de Dados
Dan S. Reznik, PhD
 
PPTX
Big Data e Análise de Dados Massivos
Francisco Oliveira
 
PPTX
Big data apresentacao
Rodrigo kiko (Rodrigo Afonso)
 
PDF
Big Data Analytics - Do MapReduce ao dashboard com Hadoop e Pentaho
Ambiente Livre
 
PDF
TDC 2015 - Torne-se um programador melhor
Fernando Hamasaki de Amorim
 
PDF
Como o Big Data pode tornar a publicidade mais relevante entre marcas e pessoas
Rafael da Silva
 
PPT
Big Data
Carlos Silva
 
PDF
TDC2016POA | Trilha IoT - Desenvolvendo Coisas Colaborativas
tdc-globalcode
 
PDF
TDC2016POA | Trilha IoT - Iot no Mercado Publicitário
tdc-globalcode
 
PDF
TDC2016POA | Trilha IoT - IoT Surfboard: o que aprendemos com o primeiro pro...
tdc-globalcode
 
PDF
TDC2016POA | Trilha IoT - Dando voz aos seus dispositivos com a Amazon Alexa
tdc-globalcode
 
BIG DATA, de Fabiana Andrade
bibliocampsp
 
Big Data, JVM e Redes Sociais
José Renato Pequeno
 
Cidades Inteligentes e Big Data
Diego Lusa
 
Big Data em 8 perguntas - 09.10.2014 - DATANORTE / GOV RN
Marcos Luiz Lins Filho
 
Big Data na Nuvem
Amazon Web Services LATAM
 
Mongo db no mundo real slides
Suissa
 
Hadoop, Big Data e Cloud Computing
Amazon Web Services LATAM
 
Big data e mineração de dados
Elton Meira
 
Big Data e Governança de Dados, via DMM-Data Management Maturiy Model
Carlos Barbieri
 
Big Data, Analytics, Aplicações, Aspectos Práticos e o Cientista de Dados
Dan S. Reznik, PhD
 
Big Data e Análise de Dados Massivos
Francisco Oliveira
 
Big data apresentacao
Rodrigo kiko (Rodrigo Afonso)
 
Big Data Analytics - Do MapReduce ao dashboard com Hadoop e Pentaho
Ambiente Livre
 
TDC 2015 - Torne-se um programador melhor
Fernando Hamasaki de Amorim
 
Como o Big Data pode tornar a publicidade mais relevante entre marcas e pessoas
Rafael da Silva
 
Big Data
Carlos Silva
 
TDC2016POA | Trilha IoT - Desenvolvendo Coisas Colaborativas
tdc-globalcode
 
TDC2016POA | Trilha IoT - Iot no Mercado Publicitário
tdc-globalcode
 
TDC2016POA | Trilha IoT - IoT Surfboard: o que aprendemos com o primeiro pro...
tdc-globalcode
 
TDC2016POA | Trilha IoT - Dando voz aos seus dispositivos com a Amazon Alexa
tdc-globalcode
 
Ad

More from tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
tdc-globalcode
 
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
tdc-globalcode
 
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
tdc-globalcode
 
PPT
Trilha .Net - Programacao funcional usando f#
tdc-globalcode
 
PDF
TDC2018SP | Trilha Go - Case Easylocus
tdc-globalcode
 
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
tdc-globalcode
 
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
tdc-globalcode
 
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
tdc-globalcode
 
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
tdc-globalcode
 
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
tdc-globalcode
 
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
tdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
tdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
tdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
tdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
tdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
tdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
tdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
tdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
tdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
tdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
tdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
tdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
tdc-globalcode
 
Ad

Recently uploaded (20)

PPTX
10CLA Term 3 Week 4 Study Techniques.pptx
mansk2
 
PPTX
I INCLUDED THIS TOPIC IS INTELLIGENCE DEFINITION, MEANING, INDIVIDUAL DIFFERE...
parmarjuli1412
 
PPTX
Digital Professionalism and Interpersonal Competence
rutvikgediya1
 
DOCX
Modul Ajar Deep Learning Bahasa Inggris Kelas 11 Terbaru 2025
wahyurestu63
 
PPTX
20250924 Navigating the Future: How to tell the difference between an emergen...
McGuinness Institute
 
PPTX
Virus sequence retrieval from NCBI database
yamunaK13
 
PPTX
Cleaning Validation Ppt Pharmaceutical validation
Ms. Ashatai Patil
 
PDF
The-Invisible-Living-World-Beyond-Our-Naked-Eye chapter 2.pdf/8th science cur...
Sandeep Swamy
 
DOCX
Unit 5: Speech-language and swallowing disorders
JELLA VISHNU DURGA PRASAD
 
PPTX
Constitutional Design Civics Class 9.pptx
bikesh692
 
PPTX
PROTIEN ENERGY MALNUTRITION: NURSING MANAGEMENT.pptx
PRADEEP ABOTHU
 
PPTX
Rules and Regulations of Madhya Pradesh Library Part-I
SantoshKumarKori2
 
PPTX
HEALTH CARE DELIVERY SYSTEM - UNIT 2 - GNM 3RD YEAR.pptx
Priyanshu Anand
 
PPTX
The Future of Artificial Intelligence Opportunities and Risks Ahead
vaghelajayendra784
 
PDF
EXCRETION-STRUCTURE OF NEPHRON,URINE FORMATION
raviralanaresh2
 
PPTX
ENGLISH 8 WEEK 3 Q1 - Analyzing the linguistic, historical, andor biographica...
OliverOllet
 
PPTX
Sonnet 130_ My Mistress’ Eyes Are Nothing Like the Sun By William Shakespear...
DhatriParmar
 
PPTX
THE JEHOVAH’S WITNESSES’ ENCRYPTED SATANIC CULT
Claude LaCombe
 
PPTX
Translation_ Definition, Scope & Historical Development.pptx
DhatriParmar
 
PPTX
YSPH VMOC Special Report - Measles Outbreak Southwest US 7-20-2025.pptx
Yale School of Public Health - The Virtual Medical Operations Center (VMOC)
 
10CLA Term 3 Week 4 Study Techniques.pptx
mansk2
 
I INCLUDED THIS TOPIC IS INTELLIGENCE DEFINITION, MEANING, INDIVIDUAL DIFFERE...
parmarjuli1412
 
Digital Professionalism and Interpersonal Competence
rutvikgediya1
 
Modul Ajar Deep Learning Bahasa Inggris Kelas 11 Terbaru 2025
wahyurestu63
 
20250924 Navigating the Future: How to tell the difference between an emergen...
McGuinness Institute
 
Virus sequence retrieval from NCBI database
yamunaK13
 
Cleaning Validation Ppt Pharmaceutical validation
Ms. Ashatai Patil
 
The-Invisible-Living-World-Beyond-Our-Naked-Eye chapter 2.pdf/8th science cur...
Sandeep Swamy
 
Unit 5: Speech-language and swallowing disorders
JELLA VISHNU DURGA PRASAD
 
Constitutional Design Civics Class 9.pptx
bikesh692
 
PROTIEN ENERGY MALNUTRITION: NURSING MANAGEMENT.pptx
PRADEEP ABOTHU
 
Rules and Regulations of Madhya Pradesh Library Part-I
SantoshKumarKori2
 
HEALTH CARE DELIVERY SYSTEM - UNIT 2 - GNM 3RD YEAR.pptx
Priyanshu Anand
 
The Future of Artificial Intelligence Opportunities and Risks Ahead
vaghelajayendra784
 
EXCRETION-STRUCTURE OF NEPHRON,URINE FORMATION
raviralanaresh2
 
ENGLISH 8 WEEK 3 Q1 - Analyzing the linguistic, historical, andor biographica...
OliverOllet
 
Sonnet 130_ My Mistress’ Eyes Are Nothing Like the Sun By William Shakespear...
DhatriParmar
 
THE JEHOVAH’S WITNESSES’ ENCRYPTED SATANIC CULT
Claude LaCombe
 
Translation_ Definition, Scope & Historical Development.pptx
DhatriParmar
 
YSPH VMOC Special Report - Measles Outbreak Southwest US 7-20-2025.pptx
Yale School of Public Health - The Virtual Medical Operations Center (VMOC)
 

TDC2016POA | Trilha Java - Introdução ao Byteman

  • 1. Introdução ao Byteman Filippe Spolti Software Engineer - Red Hat
  • 3. Resolvendo o problema RULE setRequestsRecovery CLASS org.jbpm.process.core.timer.impl.QuartzSchedulerService METHOD internalSchedule AT WRITE $jobq IF TRUE DO traceln("[BYTEMAN] Current Value for requestsRecovery: " + $jobq.requestsRecovery() + " ---------- UPDATING"); $jobq.setRequestsRecovery(true); traceln("[BYTEMAN] New value for requestsRecovery: " + $jobq.requestsRecovery()); ENDRULE
  • 4. Primeiros Passos • Como Ativar o Byteman? • -javaagent:/$BYTEMAN_HOME/lib/byteman.jar=script:$BYTEMAN_HOME/scripts/MyCo olScript.btm • sys - Adiciona o byteman ao System classloader. • boot - Adiciona o byteman ao bootstrap classloader. • Load/Unload Byteman em Runtime • bminstall.sh - Cuidado! • bmsubmit.sh - Load/Unload de Scripts Byteman. • Integrações • Principais framework de testes: Junit e TestNG. • Maven/ant (Annotations). • Validando o script • bmcheck.sh
  • 5. ECA - Event Conditions Action • Where (onde) • CLASS java.lang.Thread • METHOD start() • AT ENTRY • Whether (se) • IF true • What (Qual) • DO traceln("*** Hello TDC POA ***")
  • 6. Esqueleto do Script Byteman RULE @X regra feliz COMPILE|NOCOMPILE (Opcional) CLASS|INTERFACE br.com.tdcpoa.MinhaClasseLegal METHOD NaoMeModifique (Para construtores <init>) HELPER br.com.tdcpoa.MeuAjudanteNota10 (Opcional) AT WRITE $objetoA (Opcional) BIND nome:type = valor (Opcional) feliz:boolean = $objetoA.Feliz(); IF feliz == true DO //faça algo legal minhaOperacaoBuiltInParaImprimir(“Feliz“); ENDRULE - Fim da definição da regra
  • 7. Especificadores de Localização AT ENTRY AFTER INVOKE [ type .] method [ ( argtypes ) ][count | ALL ] AT EXIT AT SYNCHRONIZE [count | ALL ] AT LINE number AFTER SYNCHRONIZE [count | ALL ] AT READ [type .] field [count | ALL ] AT THROW [count | ALL ] AT READ $var-or-idx [count | ALL ] AT EXCEPTION EXIT AFTER READ [ type .] field [count | ALL ] AFTER READ $var-or-idx [count | ALL ] AT WRITE [ type .] field [count | ALL ] AT WRITE $var-or-idx [count | ALL ] AFTER WRITE [ type .] field [count | ALL ] AFTER WRITE $var-or-idx [count | ALL ] AT INVOKE [ type .] method [ ( argtypes ) ] [count | ALL ]
  • 8. O que é um Helper? • Auxiliar • Helper.java • Subdivido em três categorias: • coordenação de threads • Gerenciamento do ciclo de vida das regras • Debug e Tracing import org.jboss.byteman.rule.helper.Helper; public class MeuAjudanteNota10 extends Helper { public void printHello(){ System.out.println(“Hello TDC POA); } }
  • 9. Expressões de Referência $!, $^, $#, $*, $@, $CLASS e $METHOD $0, $1, $x, $this CLASS ^javax.naming.InitialContext Operadores OR (||), LE (< =), NE (!=) TIMES (*) MINUS (-) AND (&&), LT (<) GE (>=) DIVIDE (/) MOD (%) NOT (!), EQ (==), GT (>) PLUS (+) Principais Expressões
  • 10. Compilar ou Interpretar as regras? ● Interpretadas ● Vale a pena? ● Quando usar regras compiladas? ● org.jboss.byteman.compile.to.bytecode ClassNotFound? ● IMPORTS ● JBoss Modules ● OSGI e JigSaw (java 9)
  • 11. BMunit Código Java @RunWith(org.jboss.byteman.contrib.bmunit.BMUnitRunner.class) @BMUnitConfig(loadDirectory="target/test-classes") @BMScript(value="check.btm") public class MavenBMUnitTest { @Test ... } A regra: RULE check head CLASS WebWriter METHOD makeHeader AT EXIT BIND result = $builder.toString() IF (NOT result.contains("<HEAD>") || NOT result.contains("</HEAD>")) DO THROW new RuntimeException("Header Inválido, Byteman got you. :)"); ENDRULE
  • 12. Verificando Regras • Sempre verifique • Livre de erros e warnings • bmcheck • bmcheck.sh -p br.com.tdcpoa -cp . ../../src/test/resources/check.btm • maven • configurar plugin byteman-rulecheck-maven-plugin
  • 13. Ativando o Byteman no WildFly 10! • Arquivos standalone.conf e domain.conf if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman" fi Modo Standalone: JAVA_OPTS="$JAVA_OPTS -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:/dados/presentations/byteman/demo/byteman-web-app/src/resources/th read.btm,boot:$BYTEMAN_HOME/lib/byteman.jar,boot:/dados/presentations/byteman/demo/byteman-helper/target/byteman- helper-1.0-SNAPSHOT.jar -Dorg.jboss.byteman.transform.all" Domain: <jvm-options> <option value="-javaagent:/${jboss.home.dir}/byteman/lib/byteman.jar=script:${jboss.home.dir}/byteman/scripts/org.jboss.re moting3.EndpointImpl.btm,boot:${jboss.home.dir}/byteman/lib/byteman.jar"/> <option value="-Dorg.jboss.byteman.transform.all=true"/> </jvm-options>
  • 14. Trabalhando com Regras em Runtime ● Instalando o byteman em uma JVM em execução: > bminstall.sh 13101 > bminstall.sh -b -Dorg.jboss.byteman.transform.all $JBOSS_HOME/jboss-modules.jar ● Carregando regras em runtime: > bmsubmit.sh -l thread.btm Descarregando regras: > bmsubmit.sh -u thread.btm
  • 15. Opções disponíveis do agente java script:scriptfile resourcescript:scriptfile listener:boolean port:portnum address:host manager:classname modules:classname sys:jarfile boot:jarfile policy:boolean prop:name=value
  • 16. Opções extra de configuração Algumas configurações avançadas • org.jboss.byteman.compileToBytecode • org.jboss.byteman.dump.generated.classes • org.jboss.byteman.dump.generated.classes.directory • org.jboss.byteman.dump.generated.classes.intermediate • org.jboss.byteman.debug • org.jboss.byteman.transform.all • org.jboss.byteman.skip.overriding.rules • org.jboss.byteman.allow.config.updates • org.jboss.byteman.sysprops.strict
  • 17. Exemplo de Configuração JAVA_OPTS="$JAVA_OPTS -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:/dados/presentations/byteman/demo/byteman-web-app/s rc/resources/rule.btm,boot:$BYTEMAN_HOME/lib/byteman.jar,boot:/dados/presentations/byteman/demo/byte man-helper/target/byteman-helper-1.0-SNAPSHOT.jar -Dorg.jboss.byteman.transform.all" Detalhando: ● -javaagent:/$BYTEMAN_HOME/lib/byteman.jar ○ É responsável por ativar o Byteman, Qualquer coisa depois do ‘=’ são as configurações do Byteman separadas por vírgula. ● script:$BYTEMAN_HOME/scripts/script.btm ○ /dados/presentations/byteman/demo/byteman-web-app/src/resources/thread.btm ● boot:$BYTEMAN_HOME/lib/byteman.jar ○ diz ao Byteman que ele deve ser carregado no classloader bootstrap para acessar até classes da JVM. ● boot:$BYTEMAN_HOME/lib/byteman-helpers.jar ○ Define o helper no classloader bootstrap.
  • 18. QuickStarts e tutoriais ● https://developer.jboss.org/wiki/FaultInjectionTestingWithByteman ● $BYTEMAN_HOME/contrib ● https://developer.jboss.org/wiki/BMUnitUsingBytemanWithJUnitOrTestNGFr omMavenAndAnt ● https://developer.jboss.org/wiki/CheckingYourBytemanRuleScriptsUnderMav en ● https://developer.jboss.org/wiki/FaultInjectionTestingWithByteman ● https://developer.jboss.org/wiki/BMUnitUsingBytemanWithJUnitOrTestNGFr omMavenAndAnt#how_do_i_inject_trace_into_junit_tests
  • 20. That’s it Folks Obrigado! http://byteman.jboss.org/ https://github.com/bytemanproject/byteman IRC - Servidor: freenode - Canal: #byteman https://www.gitbook.com/book/jboss-books/byteman-guia-do-programador/details https://www.gitbook.com/@jboss-books/ https://github.com/jbug-brasil/byteman-repo Telegram - Grupo JBug Brasil IRC - Servidor: freenode - Canal: #jbug-brasil