Multiplatform Java
application development
Nikita Salnikov-Tarnovski
@iNikem
http://plumbr.eu
Monday, October 21, 13
Plumbr company
•

Estonian startup trying to solve performance problems

•

We started with memory leaks and solved them :)

•

Ongoing effort, more problems to be solved

|
Monday, October 21, 13
Plumbr software
•

Java agent, runs alongside your application

•

Uses Instrumentation API to hook into your code

•

Native counterpart in platform-specific C code

|
Monday, October 21, 13
“External” Goals
•

To support java 5, 6, 7, JRockit, IBM JVM

•

To support Windows, Linux, Mac OS X, Solaris Sparc and
Solaris x86

•

Not the last versions only

|
Monday, October 21, 13
“Inner” goals
•

Build infrastructure as automated as possible

•

Automatic tests on all platforms

•

Release maintenance vs future development

•

Traceability

|
Monday, October 21, 13
Forward Traceability

|
Monday, October 21, 13
Backward traceability

1.2

1.3

2.0

|
Monday, October 21, 13

2.1

2.1.3
Our team

|
Monday, October 21, 13
One

|
Monday, October 21, 13
Two

|
Monday, October 21, 13
Virtually three

|
Monday, October 21, 13
Mini hero

|
Monday, October 21, 13
Ancient legend

|
Monday, October 21, 13
Mastermind

|
Monday, October 21, 13
Native part
•

Small subproject in C, rarely updated

•

Lives in BitBucket as well

•

Jenkins builds it with make

•

Then publishes to Artifactory

|
Monday, October 21, 13
The problem of libc
•

We build native part on AWS instance

•

But we need old enough libc

•

Have to use chroot with older system

|
Monday, October 21, 13
CI
•

Jenkins builds whole project on every commit

•

Runs fast tests, collects metrics

•

Pushes all artifacts to ‘builds’ repo

|
Monday, October 21, 13
Test pipeline
•

All those environments are put into Jenkins pipeline

•

Runs every night

•

Downloads given version from ‘builds’ repo and runs full
acceptance tests suite

|
Monday, October 21, 13
Acceptance test
•

End-to-end test

•

Leaking application is started and used

•

Plumbr’s report is then verified

|
Monday, October 21, 13
Nightly
•

If whole pipeline succeeds, pushes that tested version to
‘nightly’ repo

•

Updates downloadable version on our site

|
Monday, October 21, 13
Release
•

Another job in Jenkins

•

Lets you select version number from JIRA

•

Pushes ready version from ‘nightly’ to ‘release’ repo

•

Tags Mercurial revision corresponding to that version with
JIRA version tag

•

Updates Plumbr download page with new version

|
Monday, October 21, 13
Live fix

|
Monday, October 21, 13
Conclusion
•

WORA does not mean T(est)ORA

•

There are more to Java than Hotspot

•

We are blessed by not writing C

•

Tools matter a lot

|
Monday, October 21, 13
Solving performance problems is hard.
We don’t think it needs to be.
@iNIkem/@JavaPlumbr
plumbr.eu

Monday, October 21, 13

JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application development