SlideShare a Scribd company logo
EXTENSIONS, WHICH YOU HAVE TO TAKE WITH YOU TO A
DESERTED ISLAND
Michał Matłoka / @mmatloka
ABOUT ME
EXAMPLE SITUATION
Company with traditions
JPA
JSF
No tests

Kajtek
JBOSS ARQUILLIAN
Manages the lifecycle of the container (or containers)
Deploys archive (or archives) to the container (or
containers)
Executes the tests inside (or against) the container
Captures the results and returnes them to the test runner
for reporting
CONTAINER ADAPTERS
JBoss AS/WildFly
GlassFish
WebLogic
WebSphere
Jetty
Tomcat
OSGi
Resin
OpenShift
Cloudbees
...
CONTAINER TYPES
Embedded
Managed
Remote
JBOSS ARQUILLIAN
@uWt(rulincas
RnihAqila.ls)
pbi casSmTs {
ulc ls oeet
@elyet
Dpomn
pbi sai Acie? cetDpomn( {rtr ..}
ulc ttc rhv<> raeelyet)
eun .
@net
Ijc
piaeSmtigsmtig
rvt oehn oehn;
@et
Ts
pbi vi sol.( {
ulc od hud.)
..
.
}
}
SHRINKWRAP
Bundle the dependent classes and resources into an archive
Wbrhv wbrhv =SrnWa.raeWbrhv.ls)
eAcie eAcie
hikrpcet(eAciecas
.dCasUe.ls)
adls(srcas
.dAMnfsRsuc(mtAstISAC,"en.m";
adsaieteoreEpyse.NTNE basxl)
Wbrhv wbrhv =SrnWa.raeWbrhv.ls)
eAcie eAcie
hikrpcet(eAciecas
.dCassUe.ls,..
adlse(srcas .)
.dAMnfsRsuc(mtAstISAC,"en.m";
adsaieteoreEpyse.NTNE basxl)
Wbrhv wbrhv =SrnWa.raeWbrhv.ls)
eAcie eAcie
hikrpcet(eAciecas
.dPcaeUe.ls.ePcae)
adakg(srcasgtakg()
.dAMnfsRsuc(mtAstISAC,"en.m";
adsaieteoreEpyse.NTNE basxl)
SHRINKWRAP RESOLVER
Fl[ fls=Mvnrsle(
ie] ie
ae.eovr)
.eov(GAV)
rsle"::"
.ihrniiiy)
wtTastvt(
.sie)
aFl(;
Fl[ fls=Mvnrsle(
ie] ie
ae.eovr)
.odoFoFl(/aht/o.m"
laPmrmie"pt/opmxl)
.eov(GA)
rsle":"
.ihrniiiy)
wtTastvt(
.sie)
aFl(;
Fl[ fls=Mvnrsle(
ie] ie
ae.eovr)
.odoFoFl(/aht/o.m"
laPmrmie"pt/opmxl)
.motutmDpnece(
iprRnieeednis)
.eov(.ihrniiiy)
rsle)wtTastvt(
.sie)
aFl(;
Wbrhv wbrhv =SrnWa.raeMvnmotrcas
eAcie eAcie
hikrpcet(aeIpre.ls)
.odoFoFl(/aht/o.m"
laPmrmie"pt/opmxl)
.motulOtu(
iprBidupt)
.sWbrhv.ls)
a(eAciecas;
Wbrhv wbrhv =SrnWa
eAcie eAcie
hikrp
.raeEbdeGalIpre.ls)
cet(meddrdemotrcas
.oPoetietr(i)
frrjcDrcoydr
.motulOtu(
iprBidupt)
.sWbrhv.ls)
a(eAciecas;
SHRINKWRAP DESCRIPTORS
The goal is to provide most of the Java EE
deployment descriptors. Each descriptor
follows the same API style and allows to
manipulate all elements as the specification
describes.
SHRINKWRAP DESCRIPTORS - PERSISTENCE.XML

<essec>
pritne
<essec-ntnm=map>
pritneui ae"yp"
<rvdroghbraeebHbraeessec<poie>
poie>r.ient.j.ientPritne/rvdr
<t-aasuc>aa/ealD<jadt-ore
jadt-orejv:DfutS/t-aasuc>
<rpris
poete>
<rprynm=hbraedaet vle"r.ient.ilc.SLilc
poet ae"ient.ilc" au=oghbraedaetHQDae
<rprynm=hbraehmdlat"vle"raedo"
poet ae"ient.b2d.uo au=cet-rp>
<poet>/rpry<poete>
/rpry<poet>/rpris
<pritneui>
/essec-nt
<pritne
/essec>
SHRINKWRAP DESCRIPTORS - CODE
fnlPritneecitrpritne=Dsrpos
ia essecDsrpo essec
ecitr
.raePritneecitrcas
cet(essecDsrpo.ls)
.raeessecUi(
cetPritnent)
.ae"yp"
nm(map)
.rvdr"r.ient.j.ientPritne)
poie(oghbraeebHbraeessec"
.tDtSuc(jv:DfutS)
jaaaore"aa/ealD"
.eOCetPoete(
gtrraerpris)
.raerpry)nm(hbraedaet)
cetPoet(.ae"ient.ilc"
.au(oghbraedaetHQDaet)u(
vle"r.ient.ilc.SLilc".p)
.raerpry)nm(hbraehmdlat"
cetPoet(.ae"ient.b2d.uo)
.au(cet-rp)u(
vle"raedo".p)
.p)u(
u(.p)
ARQUILLIAN PERSISTENCE EXTENSION
Wrapping each test in the seperated transaction
Database seeding using: DBUnit (XML, XLS, YAML, JSON),
SQL scripts
DB state comparing with dataset at the end of the test
Eviction JPA second level cache between test method
invocation
ARQUILLIAN PERSISTENCE EXTENSION - EXAMPLE PART I
@et
Ts
@snDtSt"aaesuesyl)
Uigaae(dtst/sr.m"
@hudacDtSt"aaesepce-sr.m"
SolMthaae(dtst/xetduesyl)
pbi vi solCagUePswr( trw Ecpin{
ulc od hudhnesrasod) hos xeto
/ gvn
/ ie
fnlSrn epcePswr ="uiPak"
ia tig xetdasod
lbelci;
fnlUe ue =e.idUe.ls,2)
ia sr sr
mfn(srcas L;
/ we
/ hn
ue.ePswr(xetdasod;
srstasodepcePswr)
e.eg(sr;
mmreue)
/ te
/ hn
asrTa(srgtasod).sqaT(xetdasod;
sethtue.ePswr()iEuloepcePswr)
}
ARQUILLIAN PERSISTENCE EXTENSION - EXAMPLE PART II
ue:
sr
-i:1
d
frtae Jh
isnm: on
lsnm:Sih
atae mt
uenm:dod
srae ove
pswr:pswr
asod asod
-i:2
d
frtae Cak
isnm: lr
lsnm:Kn
atae et
uenm:spra
srae uemn
pswr:kytnt
asod rpoie
ARQUILLIAN DRONE
Integrates WebDriver with Arquillian
Interaction with deployments and containers provided by
Arquillian
Configuration kept in arquillian.xml
Compatible with WebDriver (Selenium 2), Selenium 1 and
Selenium Grids
ARQUILLIAN DRONE - EXAMPLE
@uWt(rulincas
RnihAqila.ls)
pbi casWbrvret{
ulc ls eDieTs
@elyettsal =fle
Dpomn(etbe
as)
pbi sai Wbrhv cetDpomn( ..
ulc ttc eAcie raeelyet) .
@rulineore
AqilaRsuc
ULcnetah
R otxPt;
@rn
Doe
Wbrvrdie;
eDie rvr
@et
Ts
pbi vi solNtoi( {
ulc od hudoLgn)
die.idlmn(yi(lgnomlgn).lc(;
rvrfnEeetB.d"oiFr:oi")cik)
..
.
}
}
ARQUILLIAN GRAPHENE
Extensions for WebDriver
PageObjects and PageFragments
AJAX support
ARQUILLIAN GRAPHENE - EXAMPLE PART I
@uWt(rulincas
RnihAqila.ls)
pbi casTsLgn{
ulc ls etoi
@rn
Doe
Wbrvrbosr
eDie rwe;
@ae
Pg
HmPg hmPg;
oeae oeae
@etepcs=Lgnaldxeto.ls)
Ts(xet
oiFieEcpincas
pbi vi tsLgnald){
ulc od etoiFie( }
hmPg.oi(nneitn" "sr)
oeaelgn"o-xset, ue";
}
}
ARQUILLIAN GRAPHENE - EXAMPLE PART II
pbi casHmPg {
ulc ls oeae
@idy"lgnfr"
FnB(.oi-om)
Lgnilglgnilg
oiDao oiDao;
@idy"sac"
FnB(.erh)
AtcmltCmoetfltxSac;
uoopeeopnn uleterh
pbi vi lgnSrn ue,Srn pswr)trw Lgnaldxeto {
ulc od oi(tig sr tig asod hos oiFieEcpin
lgnilgstsrue)
oiDao.eUe(sr;
lgnilgstasodpswr)
oiDao.ePswr(asod;
lgnilglgn)
oiDao.oi(;
}
..
.
}
ARQUILLIAN GRAPHENE - EXAMPLE PART III
pbi casLgnilg{
ulc ls oiDao
@idy
FnB
piaeWblmn ueNm;
rvt eEeet srae
@idyi ="oi"
FnB(d
lgn)
piaeWblmn lgnutn
rvt eEeet oiBto;
..
..
}
ARQUILLIAN GRAPHENE - AJAX
Gahn.atjx)utl)eeetwblmnOB)i(.
rpeewiAa(.ni(.lmn(eEeetry.s)
.s)nt)peet)
i(.o(.rsn(;
.nbe(;
eald)
.eetd)
slce(;
.iil(;
vsbe)
ARQUILLIAN WARP
Using Warp, you can initiate an HTTP request
using a client-side testing tool such as
WebDriver and, in the same request cycle,
execute in-container server-side tests
ARQUILLIAN WARP
Includes support for
JSF
JAX-RS (REST)
Spring MVC
ARQUILLIAN WARP - EXAMPLE PART I
@uWt(rulincas
RnihAqila.ls)
@apet
WrTs
@uACin
Rnslet
pbi casBscet{
ulc ls aiTs
@elyet
Dpomn
..
.
@rulineore
AqilaRsuc
ULcnetah
R otxPt;
@et
Ts
pbi vi sol..){
ulc od hud.(
Wr
ap
.ntaeAtvt)
iiit(ciiy
.bev(bevr
osreOsre)
.npc(npcin;
isetIseto)
}
}
ARQUILLIAN WARP - EXAMPLE PART II
@et
Ts
pbi vi solMkPoeRqet){
ulc od hudaerpreus(
Wr.ntaenwAtvt( {
apiiit(e ciiy)
@vrie
Oerd
pbi vi prom){
ulc od efr(
bosrnvgt(.ocnetah+"cr";
rwe.aiae)t(otxPt
/at)
}
}.ru(.bev(eus(.r(.nsih"cr")
)gop)osrerqet)ui)edWt(/at)
.npc(npcin;
isetiseto)
}
ARQUILLIAN WARP REST - EXAMPLEPART III - REST
Iseto iseto =nwIseto( {
npcin npcin
e npcin)
piaesai fnlln sraVrinI =1;
rvt ttc ia og eilesoUD
L
@rulineore
AqilaRsuc
piaeRsCnetrsCnet
rvt etotx etotx;

@feSrlt
Atreve
pbi vi tsGttcs){
ulc od eteSok(
asrTa(etotx.eHtRqet)gtehd).sqaT(tpehdGT;
sethtrsCnetgttpeus(.eMto()iEuloHtMto.E)
asrTa(etotx.eHtRsos(.eSauCd()iEuloRsos.t
sethtrsCnetgttpepne)gtttsoe).sqaT(epneSa
asrTa(etotx.eHtRsos(.eCnetye).sqaT(apiai
sethtrsCnetgttpepne)gtotnTp()iEulo"plcto
Ls ls =(it rsCnetgttpepne)gtniy)
it it
Ls) etotx.eHtRsos(.eEtt(;
asrTa(itsz()iEulo1;
sethtls.ie).sqaT()
}
}
ARQUILLIAN DROIDIUM
Includes container adapter
Device and emulator management
Can create AVD (Android Virtual Device)
Arquillian Droidium Web - Selenium integration
Arquillian Droidium Native - Selendroid integration
Can take screeshots
Early Alpha
ARQUILLIAN DROIDIUM - EXAMPLE
@uWt(rulincas
RnihAqila.ls)
@uACin
Rnslet
pbi casDoduWbetae{
ulc ls riimeTsCs
@elyet
Dpomn
@agtCnanr"bsa"
Tresotie(joss)
pbi sai Acie? gtelyet){
ulc ttc rhv<> eDpomn(
rtr SrnWa
eun hikrp
.raermiFl(eAciecas nwFl(so.a")
cetFoZpieWbrhv.ls, e ie"hpwr);
}
@et
Ts
@prtODpomn(joss)
Oeaenelyet"bsa"
pbi vi ts0(DoeAdodrvrdie,
ulc od et1@rn nriDie rvr
@rulineoreULdpomnUL {
AqilaRsuc R elyetR) L
die.e(elyetR.otig);
rvrgtdpomnULtSrn()
asrTu(rvrgtaeore)cnan(So")
setredie.ePgSuc(.otis"hp);
}
}
ARQUILLIAN DROIDIUM - EXAMPLE
@uWt(rulincas
RnihAqila.ls)
@uACin
Rnslet
pbi casDoduSlnriTsCs {
ulc ls riimeedodetae
@elyet
Dpomn
@ntuetbe
Isrmnal
pbi sai Acie? gtelyet){
ulc ttc rhv<> eDpomn(
rtr SrnWa
eun hikrp
.raermiFl(aarhv.ls,nwFl(so.p")
cetFoZpieJvAciecas e ie"hpak);
}
@et
Ts
pbi vi eape@rulineoreAdodeieadod
ulc od xml(AqilaRsuc nriDvc nri,
@rn Wbrvrdie){
Doe eDie rvr
adodgtciiyaaePoie(.eAtvtMngr)
nri.eAtvtMngrrvdr)gtciiyaae(
.trAtvt(cmso.oecenciiy)
satciiy"o.hpHmSreAtvt"
Wblmn bto =die
eEeet utn
rvr
.idlmn(yi(crBto")
fnEeetB.d"atutn);
.. }
.
}
ARQUILLIAN PERFORMANCE - EXAMPLE
@efracTs(eutTrsod2
Promneetrslshehl=)
/ cek i rslshehl *nwie<odie
/ hcs f eutTrsod
eTm
lTm
@uWt(rulincas
RnihAqila.ls)
pbi casRcmedtoBidnTs {
ulc ls eomnainuliget
@elyet
Dpomn
pbi sai JvAciecetDpomn( {
ulc ttc aarhv raeelyet)
rtr ..
eun .
}
@netRcmedtoSriercmedtoSrie
Ijc eomnainevc eomnainevc;
@et
Ts
@efrac(ie2)/ tmoti m
Promnetm=0 / ieu n s
pbi vi dHrWr( trw Ecpin{
ulc od oadok) hos xeto
..
.
}
}
OTHER EXTENSIONS
Extension Byteman
Google Guice Extension
GWT Testing extension
Extension Jacoco
Extension JRebel
screenRecorder
Spring Framework Extension
arquillian-ios-aggregator
arquillian-extension-qunit
Spock Arquillian Extension
ShrinkWrap DSL
TAKE AWAYS
ShrinkWrap - archives
ShrinkWrap Resolver - maven, gradle
ShrinkWrap Descriptors - fluent API code generation from
XSD
Arquillian Persistence Extension - DB
Arquillian Drone - WebDriver integration - UI
Arquillian Graphene - extended WebDriver - better UI
Arquillian Warp - client-side request, server-side test REST, Spring MVC...
Arquillian Droidium - Android Browser, Android UI
Arquillian Performance - timeouts, execution time
comparision
MATERIALS & HELP
http://arquillian.org
http://arquillian.org/guides/
https://docs.jboss.org/author/display/ARQ/Reference+Guide
https://github.com/arquillian/
https://github.com/shrinkwrap/
https://community.jboss.org/
http://jira.jboss.org/
irc.freenode.net - #arquillian, #jbosstesting
http://meninblack.wikia.com/
THE END
QUESTIONS?

mmatloka @ gmail.com
https://github.com/mmatloka/presentations

More Related Content

Viewers also liked

What is most important 
in cooperation with external software developers? Par...
What is most important 
in cooperation with external software developers? Par...What is most important 
in cooperation with external software developers? Par...
What is most important 
in cooperation with external software developers? Par...
SoftwareMill
 
From spaghetti with no `src/test` to green CI and well-sleeping developers
From spaghetti with no `src/test` to green CI and well-sleeping developersFrom spaghetti with no `src/test` to green CI and well-sleeping developers
From spaghetti with no `src/test` to green CI and well-sleeping developers
SoftwareMill
 
Jednorożce to kobiety a nie firmy. O √kobiecym w STEM
Jednorożce to kobiety a nie firmy. O √kobiecym w STEMJednorożce to kobiety a nie firmy. O √kobiecym w STEM
Jednorożce to kobiety a nie firmy. O √kobiecym w STEM
SoftwareMill
 
Scalatra - Scalar Mini
Scalatra  - Scalar MiniScalatra  - Scalar Mini
Scalatra - Scalar Mini
SoftwareMill
 
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
SoftwareMill
 
An Introduction to Akka
An Introduction to AkkaAn Introduction to Akka
An Introduction to Akka
SoftwareMill
 
Small intro to Big Data - Old version
Small intro to Big Data - Old versionSmall intro to Big Data - Old version
Small intro to Big Data - Old version
SoftwareMill
 
Origins of free
Origins of freeOrigins of free
Origins of free
SoftwareMill
 
Open source big data landscape and possible ITS applications
Open source big data landscape and possible ITS applicationsOpen source big data landscape and possible ITS applications
Open source big data landscape and possible ITS applications
SoftwareMill
 
Projekt z punktu widzenia UX designera
Projekt z punktu widzenia UX designeraProjekt z punktu widzenia UX designera
Projekt z punktu widzenia UX designera
SoftwareMill
 
Machine learning by example
Machine learning by exampleMachine learning by example
Machine learning by example
SoftwareMill
 
Hybrid-Active-Optical-Cable-White-Paper
Hybrid-Active-Optical-Cable-White-PaperHybrid-Active-Optical-Cable-White-Paper
Hybrid-Active-Optical-Cable-White-PaperNguyen Nguyen
 
Lean Translation -
Lean Translation - Lean Translation -
Lean Translation -
PhraseApp
 
Yo mama jokes? | Yahoo Answers
Yo mama jokes? | Yahoo AnswersYo mama jokes? | Yahoo Answers
Yo mama jokes? | Yahoo Answers
economicmystery85
 
Nevi cpd missie visie en strategie v1.0
Nevi cpd missie visie en strategie v1.0Nevi cpd missie visie en strategie v1.0
Nevi cpd missie visie en strategie v1.0
John van Veen
 

Viewers also liked (18)

What is most important 
in cooperation with external software developers? Par...
What is most important 
in cooperation with external software developers? Par...What is most important 
in cooperation with external software developers? Par...
What is most important 
in cooperation with external software developers? Par...
 
From spaghetti with no `src/test` to green CI and well-sleeping developers
From spaghetti with no `src/test` to green CI and well-sleeping developersFrom spaghetti with no `src/test` to green CI and well-sleeping developers
From spaghetti with no `src/test` to green CI and well-sleeping developers
 
Jednorożce to kobiety a nie firmy. O √kobiecym w STEM
Jednorożce to kobiety a nie firmy. O √kobiecym w STEMJednorożce to kobiety a nie firmy. O √kobiecym w STEM
Jednorożce to kobiety a nie firmy. O √kobiecym w STEM
 
Scalatra - Scalar Mini
Scalatra  - Scalar MiniScalatra  - Scalar Mini
Scalatra - Scalar Mini
 
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
3 kroki do sukcesu płaskiej i zdalnej firmy | SoftwareMill
 
An Introduction to Akka
An Introduction to AkkaAn Introduction to Akka
An Introduction to Akka
 
Small intro to Big Data - Old version
Small intro to Big Data - Old versionSmall intro to Big Data - Old version
Small intro to Big Data - Old version
 
Origins of free
Origins of freeOrigins of free
Origins of free
 
Open source big data landscape and possible ITS applications
Open source big data landscape and possible ITS applicationsOpen source big data landscape and possible ITS applications
Open source big data landscape and possible ITS applications
 
Projekt z punktu widzenia UX designera
Projekt z punktu widzenia UX designeraProjekt z punktu widzenia UX designera
Projekt z punktu widzenia UX designera
 
Machine learning by example
Machine learning by exampleMachine learning by example
Machine learning by example
 
Hybrid-Active-Optical-Cable-White-Paper
Hybrid-Active-Optical-Cable-White-PaperHybrid-Active-Optical-Cable-White-Paper
Hybrid-Active-Optical-Cable-White-Paper
 
Lean Translation -
Lean Translation - Lean Translation -
Lean Translation -
 
Yo mama jokes? | Yahoo Answers
Yo mama jokes? | Yahoo AnswersYo mama jokes? | Yahoo Answers
Yo mama jokes? | Yahoo Answers
 
Chapter 7
Chapter 7Chapter 7
Chapter 7
 
Thainara historia
Thainara historiaThainara historia
Thainara historia
 
Nevi cpd missie visie en strategie v1.0
Nevi cpd missie visie en strategie v1.0Nevi cpd missie visie en strategie v1.0
Nevi cpd missie visie en strategie v1.0
 
2
22
2
 

Similar to Arquillian - extensions which you have to take with you to a deserted island

Hazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGridHazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGrid
Christoph Engelbert
 
JavaFX, because you're worth it
JavaFX, because you're worth itJavaFX, because you're worth it
JavaFX, because you're worth it
Thierry Wasylczenko
 
Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaTony Fabeen
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scriptingTony Fabeen
 
SecureSocial - Authentication for Play Framework
SecureSocial - Authentication for Play FrameworkSecureSocial - Authentication for Play Framework
SecureSocial - Authentication for Play Framework
jaliss
 
Microservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud NetflixMicroservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud Netflix
Krzysztof Sobkowiak
 
Javascript: The Important Bits
Javascript: The Important BitsJavascript: The Important Bits
Javascript: The Important Bits
Zumba Fitness - Technology Team
 
An Introduction to CSS Preprocessors
An Introduction to CSS PreprocessorsAn Introduction to CSS Preprocessors
An Introduction to CSS Preprocessors
Miloš Sutanovac
 
C* Summit EU 2013: The State of CQL
C* Summit EU 2013: The State of CQLC* Summit EU 2013: The State of CQL
C* Summit EU 2013: The State of CQL
DataStax Academy
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony componentsMichael Peacock
 
GeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsGeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsJakub Marchwicki
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script appsEugene Zharkov
 
OOP in Rust
OOP in RustOOP in Rust
OOP in Rust
KENZ_gelsoft
 
Automated tests - facts and myths
Automated tests - facts and mythsAutomated tests - facts and myths
Automated tests - facts and myths
Wojciech Sznapka
 
JavaScript Design Patterns
JavaScript Design PatternsJavaScript Design Patterns
JavaScript Design Patterns
Derek Brown
 
Jersey framework
Jersey frameworkJersey framework
Jersey frameworkknight1128
 
Beginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at GoogleBeginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at Google
Ari Lerner
 
java_notes.pdf
java_notes.pdfjava_notes.pdf
java_notes.pdf
bhanubenjaram
 
jQuery Mobile & PhoneGap
jQuery Mobile & PhoneGapjQuery Mobile & PhoneGap
jQuery Mobile & PhoneGap
Swiip
 

Similar to Arquillian - extensions which you have to take with you to a deserted island (20)

Hazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGridHazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGrid
 
JavaFX, because you're worth it
JavaFX, because you're worth itJavaFX, because you're worth it
JavaFX, because you're worth it
 
Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with Lua
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scripting
 
SecureSocial - Authentication for Play Framework
SecureSocial - Authentication for Play FrameworkSecureSocial - Authentication for Play Framework
SecureSocial - Authentication for Play Framework
 
Microservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud NetflixMicroservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud Netflix
 
Javascript: The Important Bits
Javascript: The Important BitsJavascript: The Important Bits
Javascript: The Important Bits
 
Advancedservletsjsp
AdvancedservletsjspAdvancedservletsjsp
Advancedservletsjsp
 
An Introduction to CSS Preprocessors
An Introduction to CSS PreprocessorsAn Introduction to CSS Preprocessors
An Introduction to CSS Preprocessors
 
C* Summit EU 2013: The State of CQL
C* Summit EU 2013: The State of CQLC* Summit EU 2013: The State of CQL
C* Summit EU 2013: The State of CQL
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony components
 
GeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsGeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by tests
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script apps
 
OOP in Rust
OOP in RustOOP in Rust
OOP in Rust
 
Automated tests - facts and myths
Automated tests - facts and mythsAutomated tests - facts and myths
Automated tests - facts and myths
 
JavaScript Design Patterns
JavaScript Design PatternsJavaScript Design Patterns
JavaScript Design Patterns
 
Jersey framework
Jersey frameworkJersey framework
Jersey framework
 
Beginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at GoogleBeginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at Google
 
java_notes.pdf
java_notes.pdfjava_notes.pdf
java_notes.pdf
 
jQuery Mobile & PhoneGap
jQuery Mobile & PhoneGapjQuery Mobile & PhoneGap
jQuery Mobile & PhoneGap
 

More from SoftwareMill

Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retries
SoftwareMill
 
How To Survive a Live-Coding Session
How To Survive a Live-Coding SessionHow To Survive a Live-Coding Session
How To Survive a Live-Coding Session
SoftwareMill
 
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
SoftwareMill
 
Have you ever wondered about code review?
Have you ever wondered about code review?Have you ever wondered about code review?
Have you ever wondered about code review?
SoftwareMill
 
Reactive Integration with Akka Streams and Alpakka
Reactive Integration with Akka Streams and AlpakkaReactive Integration with Akka Streams and Alpakka
Reactive Integration with Akka Streams and Alpakka
SoftwareMill
 
W świecie botów czyli po co nam SI
W świecie botów czyli po co nam SIW świecie botów czyli po co nam SI
W świecie botów czyli po co nam SI
SoftwareMill
 
Small intro to Big Data
Small intro to Big DataSmall intro to Big Data
Small intro to Big Data
SoftwareMill
 
Out-of-the-box Reactive Streams with Java 9
Out-of-the-box Reactive Streams with Java 9Out-of-the-box Reactive Streams with Java 9
Out-of-the-box Reactive Streams with Java 9
SoftwareMill
 
Hiring, Bots and Beer. (Hiring in the IT industry)
Hiring, Bots and Beer. (Hiring in the IT industry) Hiring, Bots and Beer. (Hiring in the IT industry)
Hiring, Bots and Beer. (Hiring in the IT industry)
SoftwareMill
 
Teal Is The New Black
Teal Is The New BlackTeal Is The New Black
Teal Is The New Black
SoftwareMill
 
Windowing data in big data streams
Windowing data in big data streamsWindowing data in big data streams
Windowing data in big data streams
SoftwareMill
 
Kafka as a message queue
Kafka as a message queueKafka as a message queue
Kafka as a message queue
SoftwareMill
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
SoftwareMill
 
Origins of Free
Origins of FreeOrigins of Free
Origins of Free
SoftwareMill
 
Cassandra - how to fail?
Cassandra - how to fail?Cassandra - how to fail?
Cassandra - how to fail?
SoftwareMill
 
How to manage in a flat organized, remote and transparent company
How to manage in a flat organized, remote and transparent companyHow to manage in a flat organized, remote and transparent company
How to manage in a flat organized, remote and transparent company
SoftwareMill
 
Performance tests with gatling
Performance tests with gatlingPerformance tests with gatling
Performance tests with gatling
SoftwareMill
 

More from SoftwareMill (17)

Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retries
 
How To Survive a Live-Coding Session
How To Survive a Live-Coding SessionHow To Survive a Live-Coding Session
How To Survive a Live-Coding Session
 
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
Goryle i ser szwajcarski. Czego medycyna ratunkowa może Cię nauczyć o tworzen...
 
Have you ever wondered about code review?
Have you ever wondered about code review?Have you ever wondered about code review?
Have you ever wondered about code review?
 
Reactive Integration with Akka Streams and Alpakka
Reactive Integration with Akka Streams and AlpakkaReactive Integration with Akka Streams and Alpakka
Reactive Integration with Akka Streams and Alpakka
 
W świecie botów czyli po co nam SI
W świecie botów czyli po co nam SIW świecie botów czyli po co nam SI
W świecie botów czyli po co nam SI
 
Small intro to Big Data
Small intro to Big DataSmall intro to Big Data
Small intro to Big Data
 
Out-of-the-box Reactive Streams with Java 9
Out-of-the-box Reactive Streams with Java 9Out-of-the-box Reactive Streams with Java 9
Out-of-the-box Reactive Streams with Java 9
 
Hiring, Bots and Beer. (Hiring in the IT industry)
Hiring, Bots and Beer. (Hiring in the IT industry) Hiring, Bots and Beer. (Hiring in the IT industry)
Hiring, Bots and Beer. (Hiring in the IT industry)
 
Teal Is The New Black
Teal Is The New BlackTeal Is The New Black
Teal Is The New Black
 
Windowing data in big data streams
Windowing data in big data streamsWindowing data in big data streams
Windowing data in big data streams
 
Kafka as a message queue
Kafka as a message queueKafka as a message queue
Kafka as a message queue
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
 
Origins of Free
Origins of FreeOrigins of Free
Origins of Free
 
Cassandra - how to fail?
Cassandra - how to fail?Cassandra - how to fail?
Cassandra - how to fail?
 
How to manage in a flat organized, remote and transparent company
How to manage in a flat organized, remote and transparent companyHow to manage in a flat organized, remote and transparent company
How to manage in a flat organized, remote and transparent company
 
Performance tests with gatling
Performance tests with gatlingPerformance tests with gatling
Performance tests with gatling
 

Recently uploaded

GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 

Recently uploaded (20)

GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 

Arquillian - extensions which you have to take with you to a deserted island

  • 1. EXTENSIONS, WHICH YOU HAVE TO TAKE WITH YOU TO A DESERTED ISLAND Michał Matłoka / @mmatloka
  • 3. EXAMPLE SITUATION Company with traditions JPA JSF No tests Kajtek
  • 4. JBOSS ARQUILLIAN Manages the lifecycle of the container (or containers) Deploys archive (or archives) to the container (or containers) Executes the tests inside (or against) the container Captures the results and returnes them to the test runner for reporting
  • 7. JBOSS ARQUILLIAN @uWt(rulincas RnihAqila.ls) pbi casSmTs { ulc ls oeet @elyet Dpomn pbi sai Acie? cetDpomn( {rtr ..} ulc ttc rhv<> raeelyet) eun . @net Ijc piaeSmtigsmtig rvt oehn oehn; @et Ts pbi vi sol.( { ulc od hud.) .. . } }
  • 8. SHRINKWRAP Bundle the dependent classes and resources into an archive Wbrhv wbrhv =SrnWa.raeWbrhv.ls) eAcie eAcie hikrpcet(eAciecas .dCasUe.ls) adls(srcas .dAMnfsRsuc(mtAstISAC,"en.m"; adsaieteoreEpyse.NTNE basxl) Wbrhv wbrhv =SrnWa.raeWbrhv.ls) eAcie eAcie hikrpcet(eAciecas .dCassUe.ls,.. adlse(srcas .) .dAMnfsRsuc(mtAstISAC,"en.m"; adsaieteoreEpyse.NTNE basxl) Wbrhv wbrhv =SrnWa.raeWbrhv.ls) eAcie eAcie hikrpcet(eAciecas .dPcaeUe.ls.ePcae) adakg(srcasgtakg() .dAMnfsRsuc(mtAstISAC,"en.m"; adsaieteoreEpyse.NTNE basxl)
  • 9. SHRINKWRAP RESOLVER Fl[ fls=Mvnrsle( ie] ie ae.eovr) .eov(GAV) rsle"::" .ihrniiiy) wtTastvt( .sie) aFl(; Fl[ fls=Mvnrsle( ie] ie ae.eovr) .odoFoFl(/aht/o.m" laPmrmie"pt/opmxl) .eov(GA) rsle":" .ihrniiiy) wtTastvt( .sie) aFl(; Fl[ fls=Mvnrsle( ie] ie ae.eovr) .odoFoFl(/aht/o.m" laPmrmie"pt/opmxl) .motutmDpnece( iprRnieeednis) .eov(.ihrniiiy) rsle)wtTastvt( .sie) aFl(; Wbrhv wbrhv =SrnWa.raeMvnmotrcas eAcie eAcie hikrpcet(aeIpre.ls) .odoFoFl(/aht/o.m" laPmrmie"pt/opmxl) .motulOtu( iprBidupt) .sWbrhv.ls) a(eAciecas; Wbrhv wbrhv =SrnWa eAcie eAcie hikrp .raeEbdeGalIpre.ls) cet(meddrdemotrcas .oPoetietr(i) frrjcDrcoydr .motulOtu( iprBidupt) .sWbrhv.ls) a(eAciecas;
  • 10. SHRINKWRAP DESCRIPTORS The goal is to provide most of the Java EE deployment descriptors. Each descriptor follows the same API style and allows to manipulate all elements as the specification describes.
  • 11. SHRINKWRAP DESCRIPTORS - PERSISTENCE.XML <essec> pritne <essec-ntnm=map> pritneui ae"yp" <rvdroghbraeebHbraeessec<poie> poie>r.ient.j.ientPritne/rvdr <t-aasuc>aa/ealD<jadt-ore jadt-orejv:DfutS/t-aasuc> <rpris poete> <rprynm=hbraedaet vle"r.ient.ilc.SLilc poet ae"ient.ilc" au=oghbraedaetHQDae <rprynm=hbraehmdlat"vle"raedo" poet ae"ient.b2d.uo au=cet-rp> <poet>/rpry<poete> /rpry<poet>/rpris <pritneui> /essec-nt <pritne /essec>
  • 12. SHRINKWRAP DESCRIPTORS - CODE fnlPritneecitrpritne=Dsrpos ia essecDsrpo essec ecitr .raePritneecitrcas cet(essecDsrpo.ls) .raeessecUi( cetPritnent) .ae"yp" nm(map) .rvdr"r.ient.j.ientPritne) poie(oghbraeebHbraeessec" .tDtSuc(jv:DfutS) jaaaore"aa/ealD" .eOCetPoete( gtrraerpris) .raerpry)nm(hbraedaet) cetPoet(.ae"ient.ilc" .au(oghbraedaetHQDaet)u( vle"r.ient.ilc.SLilc".p) .raerpry)nm(hbraehmdlat" cetPoet(.ae"ient.b2d.uo) .au(cet-rp)u( vle"raedo".p) .p)u( u(.p)
  • 13. ARQUILLIAN PERSISTENCE EXTENSION Wrapping each test in the seperated transaction Database seeding using: DBUnit (XML, XLS, YAML, JSON), SQL scripts DB state comparing with dataset at the end of the test Eviction JPA second level cache between test method invocation
  • 14. ARQUILLIAN PERSISTENCE EXTENSION - EXAMPLE PART I @et Ts @snDtSt"aaesuesyl) Uigaae(dtst/sr.m" @hudacDtSt"aaesepce-sr.m" SolMthaae(dtst/xetduesyl) pbi vi solCagUePswr( trw Ecpin{ ulc od hudhnesrasod) hos xeto / gvn / ie fnlSrn epcePswr ="uiPak" ia tig xetdasod lbelci; fnlUe ue =e.idUe.ls,2) ia sr sr mfn(srcas L; / we / hn ue.ePswr(xetdasod; srstasodepcePswr) e.eg(sr; mmreue) / te / hn asrTa(srgtasod).sqaT(xetdasod; sethtue.ePswr()iEuloepcePswr) }
  • 15. ARQUILLIAN PERSISTENCE EXTENSION - EXAMPLE PART II ue: sr -i:1 d frtae Jh isnm: on lsnm:Sih atae mt uenm:dod srae ove pswr:pswr asod asod -i:2 d frtae Cak isnm: lr lsnm:Kn atae et uenm:spra srae uemn pswr:kytnt asod rpoie
  • 16. ARQUILLIAN DRONE Integrates WebDriver with Arquillian Interaction with deployments and containers provided by Arquillian Configuration kept in arquillian.xml Compatible with WebDriver (Selenium 2), Selenium 1 and Selenium Grids
  • 17. ARQUILLIAN DRONE - EXAMPLE @uWt(rulincas RnihAqila.ls) pbi casWbrvret{ ulc ls eDieTs @elyettsal =fle Dpomn(etbe as) pbi sai Wbrhv cetDpomn( .. ulc ttc eAcie raeelyet) . @rulineore AqilaRsuc ULcnetah R otxPt; @rn Doe Wbrvrdie; eDie rvr @et Ts pbi vi solNtoi( { ulc od hudoLgn) die.idlmn(yi(lgnomlgn).lc(; rvrfnEeetB.d"oiFr:oi")cik) .. . } }
  • 18. ARQUILLIAN GRAPHENE Extensions for WebDriver PageObjects and PageFragments AJAX support
  • 19. ARQUILLIAN GRAPHENE - EXAMPLE PART I @uWt(rulincas RnihAqila.ls) pbi casTsLgn{ ulc ls etoi @rn Doe Wbrvrbosr eDie rwe; @ae Pg HmPg hmPg; oeae oeae @etepcs=Lgnaldxeto.ls) Ts(xet oiFieEcpincas pbi vi tsLgnald){ ulc od etoiFie( } hmPg.oi(nneitn" "sr) oeaelgn"o-xset, ue"; } }
  • 20. ARQUILLIAN GRAPHENE - EXAMPLE PART II pbi casHmPg { ulc ls oeae @idy"lgnfr" FnB(.oi-om) Lgnilglgnilg oiDao oiDao; @idy"sac" FnB(.erh) AtcmltCmoetfltxSac; uoopeeopnn uleterh pbi vi lgnSrn ue,Srn pswr)trw Lgnaldxeto { ulc od oi(tig sr tig asod hos oiFieEcpin lgnilgstsrue) oiDao.eUe(sr; lgnilgstasodpswr) oiDao.ePswr(asod; lgnilglgn) oiDao.oi(; } .. . }
  • 21. ARQUILLIAN GRAPHENE - EXAMPLE PART III pbi casLgnilg{ ulc ls oiDao @idy FnB piaeWblmn ueNm; rvt eEeet srae @idyi ="oi" FnB(d lgn) piaeWblmn lgnutn rvt eEeet oiBto; .. .. }
  • 22. ARQUILLIAN GRAPHENE - AJAX Gahn.atjx)utl)eeetwblmnOB)i(. rpeewiAa(.ni(.lmn(eEeetry.s) .s)nt)peet) i(.o(.rsn(; .nbe(; eald) .eetd) slce(; .iil(; vsbe)
  • 23. ARQUILLIAN WARP Using Warp, you can initiate an HTTP request using a client-side testing tool such as WebDriver and, in the same request cycle, execute in-container server-side tests
  • 24. ARQUILLIAN WARP Includes support for JSF JAX-RS (REST) Spring MVC
  • 25. ARQUILLIAN WARP - EXAMPLE PART I @uWt(rulincas RnihAqila.ls) @apet WrTs @uACin Rnslet pbi casBscet{ ulc ls aiTs @elyet Dpomn .. . @rulineore AqilaRsuc ULcnetah R otxPt; @et Ts pbi vi sol..){ ulc od hud.( Wr ap .ntaeAtvt) iiit(ciiy .bev(bevr osreOsre) .npc(npcin; isetIseto) } }
  • 26. ARQUILLIAN WARP - EXAMPLE PART II @et Ts pbi vi solMkPoeRqet){ ulc od hudaerpreus( Wr.ntaenwAtvt( { apiiit(e ciiy) @vrie Oerd pbi vi prom){ ulc od efr( bosrnvgt(.ocnetah+"cr"; rwe.aiae)t(otxPt /at) } }.ru(.bev(eus(.r(.nsih"cr") )gop)osrerqet)ui)edWt(/at) .npc(npcin; isetiseto) }
  • 27. ARQUILLIAN WARP REST - EXAMPLEPART III - REST Iseto iseto =nwIseto( { npcin npcin e npcin) piaesai fnlln sraVrinI =1; rvt ttc ia og eilesoUD L @rulineore AqilaRsuc piaeRsCnetrsCnet rvt etotx etotx; @feSrlt Atreve pbi vi tsGttcs){ ulc od eteSok( asrTa(etotx.eHtRqet)gtehd).sqaT(tpehdGT; sethtrsCnetgttpeus(.eMto()iEuloHtMto.E) asrTa(etotx.eHtRsos(.eSauCd()iEuloRsos.t sethtrsCnetgttpepne)gtttsoe).sqaT(epneSa asrTa(etotx.eHtRsos(.eCnetye).sqaT(apiai sethtrsCnetgttpepne)gtotnTp()iEulo"plcto Ls ls =(it rsCnetgttpepne)gtniy) it it Ls) etotx.eHtRsos(.eEtt(; asrTa(itsz()iEulo1; sethtls.ie).sqaT() } }
  • 28. ARQUILLIAN DROIDIUM Includes container adapter Device and emulator management Can create AVD (Android Virtual Device) Arquillian Droidium Web - Selenium integration Arquillian Droidium Native - Selendroid integration Can take screeshots Early Alpha
  • 29. ARQUILLIAN DROIDIUM - EXAMPLE @uWt(rulincas RnihAqila.ls) @uACin Rnslet pbi casDoduWbetae{ ulc ls riimeTsCs @elyet Dpomn @agtCnanr"bsa" Tresotie(joss) pbi sai Acie? gtelyet){ ulc ttc rhv<> eDpomn( rtr SrnWa eun hikrp .raermiFl(eAciecas nwFl(so.a") cetFoZpieWbrhv.ls, e ie"hpwr); } @et Ts @prtODpomn(joss) Oeaenelyet"bsa" pbi vi ts0(DoeAdodrvrdie, ulc od et1@rn nriDie rvr @rulineoreULdpomnUL { AqilaRsuc R elyetR) L die.e(elyetR.otig); rvrgtdpomnULtSrn() asrTu(rvrgtaeore)cnan(So") setredie.ePgSuc(.otis"hp); } }
  • 30. ARQUILLIAN DROIDIUM - EXAMPLE @uWt(rulincas RnihAqila.ls) @uACin Rnslet pbi casDoduSlnriTsCs { ulc ls riimeedodetae @elyet Dpomn @ntuetbe Isrmnal pbi sai Acie? gtelyet){ ulc ttc rhv<> eDpomn( rtr SrnWa eun hikrp .raermiFl(aarhv.ls,nwFl(so.p") cetFoZpieJvAciecas e ie"hpak); } @et Ts pbi vi eape@rulineoreAdodeieadod ulc od xml(AqilaRsuc nriDvc nri, @rn Wbrvrdie){ Doe eDie rvr adodgtciiyaaePoie(.eAtvtMngr) nri.eAtvtMngrrvdr)gtciiyaae( .trAtvt(cmso.oecenciiy) satciiy"o.hpHmSreAtvt" Wblmn bto =die eEeet utn rvr .idlmn(yi(crBto") fnEeetB.d"atutn); .. } . }
  • 31. ARQUILLIAN PERFORMANCE - EXAMPLE @efracTs(eutTrsod2 Promneetrslshehl=) / cek i rslshehl *nwie<odie / hcs f eutTrsod eTm lTm @uWt(rulincas RnihAqila.ls) pbi casRcmedtoBidnTs { ulc ls eomnainuliget @elyet Dpomn pbi sai JvAciecetDpomn( { ulc ttc aarhv raeelyet) rtr .. eun . } @netRcmedtoSriercmedtoSrie Ijc eomnainevc eomnainevc; @et Ts @efrac(ie2)/ tmoti m Promnetm=0 / ieu n s pbi vi dHrWr( trw Ecpin{ ulc od oadok) hos xeto .. . } }
  • 32. OTHER EXTENSIONS Extension Byteman Google Guice Extension GWT Testing extension Extension Jacoco Extension JRebel screenRecorder Spring Framework Extension arquillian-ios-aggregator arquillian-extension-qunit Spock Arquillian Extension ShrinkWrap DSL
  • 33. TAKE AWAYS ShrinkWrap - archives ShrinkWrap Resolver - maven, gradle ShrinkWrap Descriptors - fluent API code generation from XSD Arquillian Persistence Extension - DB Arquillian Drone - WebDriver integration - UI Arquillian Graphene - extended WebDriver - better UI Arquillian Warp - client-side request, server-side test REST, Spring MVC... Arquillian Droidium - Android Browser, Android UI Arquillian Performance - timeouts, execution time comparision
  • 36. THE END QUESTIONS? mmatloka @ gmail.com https://github.com/mmatloka/presentations