41
Nigel Daniels | Waratek Ltd. Want to do the impossible with Java? Let‘s do it!

Want to do the impossible with Java? Lets do it!

Embed Size (px)

DESCRIPTION

Nigel Daniels presentation at JAXConf Santa Clara 2013 Want the impossible from Java? Lets do it! Love Java but find the JVM doesn’t let you do what you want, or maybe you have never considered what could be done if you could change the machine itself? After all doing that means writing a custom JVM, right? That was true, until now!

Citation preview

Page 1: Want to do the impossible with Java?  Lets do it!

Nigel Daniels | Waratek Ltd.

Want to do the impossible with Java? Let‘s do it!

Page 2: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Nigel Daniels• Wide range of tech roles including robotics,

process control, network management, 3D visualization, media and enterprise software.

• 8 years with IBM developing, delivering and managing WebSphere related products.

• Now freelance consulting on software product management and delivery.

• Consulting Product Manager with Waratek for 1½ years.

Introduction

Page 3: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java Virtualization Interface

• A pure-Java hypervisor inside the JVM.• Makes JVM multitenant, creates Java Virtual

Containers (JVCs).• Simple example:

• chroot for a JVC, written in pure-Java.• Complex example:

• Virtualise webapps running on Apache Tomcat et al.• Currently on Waratek’s CloudVM for Java.• V 1.0 – OSS License, includes the virtualization

driver for Apache Tomcat.

Introduction

Page 4: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

What will we cover?

• Java virtualization, an introduction• Key concepts• Object != Object• Exchanging objects• Creating virtual environments

• API overview• Demo

Introduction

Page 5: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java virtualization,an introduction

Page 6: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java virtualization, an introduction

Host Hardware

Hypervisor

Guest OS

Type 1 virtualization

Hardware

Host OS

Hypervisor

Guest OS

Type 2 virtualization

Page 7: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java virtualization, an introduction

Hypervisor

Host Hardware

Hypervisor(Virtual Machine Monitor)

Is it sensitive?

No

Emulate instruction

Yes

Trap x86instruction

Call

Guest OS

Page 8: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java virtualization, an introduction

Trap-and-emulating x86 instructions doesn’t work for Java, all JVM instructions are non-sensitive.

But what about a call like:

java.lang.System.exit(int)

JavaEE and every other Java application framework uses co-operative multi-tenancy…

So how do we provide fully isolated virtualization for Java?

but the last time co-operative multi-tenancy was used was in Windows 3.1 and Mac OS 9 in the 1990’s!

Page 9: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java virtualization, an introduction

Host JVM

Guest Application (JVC)

Hypervisor

JVM Hypervisor(Java Virtual Machine Monitor)

Is type virtualized?

No

Emulate type

accessYes

Exit transition

Call

With a type-1 virtual machine monitor for the JVM

All in pure Java!

Page 10: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Key concepts

Page 11: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Object != Object

Page 12: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Key concepts, Object != Object

Host JVM

Hypervisor

DOM-0

JVC-1 JVC-2 JVC-3

Page 13: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Key concepts, Object != Object

Host JVM

Hypervisor

DOM-0

JVC-1 JVC-2 JVC-3

java.util.HashMap java.util.HashMap java.util.HashMap

java.util.HashMap

Page 14: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Key concepts, Object != Object

Host JVM

Hypervisor

DOM-0

JVC-1 JVC-2 JVC-3

Real BCL

Virtual BCL-A Virtual BCL-B Virtual BCL-C

Page 15: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Key concepts, Object != Object

Host JVM

Hypervisor

DOM-0

JVC-1 JVC-2 JVC-3

Real BCL

Virtual BCL-A Virtual BCL-B Virtual BCL-C

define()

java.util.HashMap

JIT emitted byte[]

HashMap

define()

HashMap′

define()

HashMap′′

define()

HashMap′′′

Page 16: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Exchanging objects

Page 17: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Hypervisor

JVMM-1 JVMM-2 JVMM-3

JVMM-0

Key concepts, exchanging objects

Host JVM

DOM-0

JVC-1 JVC-2 JVC-3

RBCL

VBCL-A VBCL-B VBCL-C

Page 18: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Hypervisor

JVMM-1 JVMM-2 JVMM-3

JVMM-0

Key concepts, exchanging objects

Host JVM

DOM-0

JVC-1 JVC-2 JVC-3

exit()

ObjectA

ObjectB

Page 19: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Hypervisor

JVMM-1 JVMM-2 JVMM-3

JVMM-0

Key concepts, exchanging objects

Host JVM

DOM-0

JVC-1 JVC-2 JVC-3

entry()

ObjectC

ObjectB

Page 20: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Hypervisor

JVMM-1 JVMM-2 JVMM-3

JVMM-0

Key concepts, exchanging objects

Host JVM

DOM-0

JVC-1 JVC-2 JVC-3

entry()

ObjectCObjectA

exit()

Page 21: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

DOM-0

Key concepts, exchanging objects

JVC-1 JVC-2

Page 22: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Creating virtual environments

Page 23: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Hypervisor

JVMM-1 JVMM-2 JVMM-3

JVMM-0

Key concepts, creating virtual environments

Host JVM

DOM-0

JVC-1 JVC-2 JVC-3

HostEnv-0

GuestEnv-1 GuestEnv-2 GuestEnv-3

Page 24: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

JVMM-1

Key concepts, creating virtual environments

JVC-1

GuestEnv-1

MonitorEnv

RuntimeSystemEnv

FileSystemEnvNetworkSystemEn

v

Page 25: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java Virtualization Interface API

Page 26: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java Virtualization Interface API

Page 27: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java Virtualization Interface API

Entry Point

Page 28: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

package org.apache.catalina.startup;…public class BootstrapEnv extends HostEnv

When the hypervisor starts a particular sequence is used to determine if a driver is to be loaded:

1. Is the class provided an instance of HostEnv?2. Else append “Env” to the fully qualified class name. Is there a

matching class?3. Else call the standard main entry point for the class.

The JVI drivers entry point replaces the standard call to public static void main (String[] args).

JVI API – BootstrapEnv

Page 29: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

public void start( String[] args, Class mainClass ) { // Step 1) tell the world we're loading… … // Step 2) load our managed entry transitions. … // Step 3) start Tomcat proper super.start( args, mainClass ); }

JVI API – BootstrapEnv

Page 30: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

public ClassLoaderEnv virtualize( final ClassLoader cl ) { // Load our privileged types … // Is this class loader a child of a virtualized // class loader? … else if( cl.getClass().getName().equals( "org.apache.catalina.loader.WebappClassLoader")) { // This is a webapp class loader, virtualise this! … tomcat_driver.ServletMonitorEnv me = new tomcat_driver.ServletMonitorEnv(this, name, cl); ClassLoaderEnv webappClassLoaderEnv = me.startJVC(); … return webappClassLoaderEnv; } … }

JVI API – BootstrapEnv

Page 31: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

DOM-0 typespace

JVC-1 typespace

VCL

RCL

Stub Class

Java Virtualization Interface API

Page 32: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Java Virtualization Interface API

JVC Entry Point

NB. This may be renamed marshalling on release

Page 33: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

public ClassLoaderEnv startJVC() { // Load our managed exit transitions … // Start the JVC super.start(); // Setup the virtualized web app class loader environment … return webappClassLoaderEnv; }

JVI API – MonitorEnv

Page 34: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

DOM-0 typespace

JVC-1 typespace

Java Virtualization Interface API

Page 35: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

public ClassLoaderEnv virtualize( final ClassLoader cl ) { // Load our privileged types if ( privTypes == null &&cl.getClass().getName().equals("org.apache.catalina.loader.StandardClassLoader”)) { privTypes = new TypeSet( cl ); try { privTypes.loadPackages( new String[]{ "javax.servlet.", "javax.el." }, true, new String[] { "javax.servlet.jsp.el.ImplicitObjectELResolver$Scope”}, ); privTypes.loadClass( "org.apache.tomcat.InstanceManager" ); privTypes.loadClass( "java.io.Writer" ); … // that’s all the classes, so seal it now. privTypes.seal(); } catch( ClassNotFoundException e ) { throw new EnvironmentError( e ); } }

JVI API – BootstrapEnv

Page 36: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

@MemberExit(type={ "javax/servlet/ServletRequest", "javax/servlet/ServletRequestWrapper" }, name="getLocale", descriptor="()Ljava/util/Locale;", conversion={ "java.util.Locale" } ) public static Locale getLocaleX( ServletRequest req ) { return req.getLocale(); }

Java Virtualization Interface API – Exit/Entry

As the hypervisor loads the JVI driver the following sequence takes place for each member:

1. Is the member a privileged type (in the intersection)?2. Is there a matching description of the member as a Member

Entry or Exit?3. Failing ether of these throw an error while loading the driver.

Here we can completely override the function without sub-classing, this gives us true polymorphism! We can make our Local anywhere.

Page 37: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

DEMO

Page 38: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

What have we covered?• Java virtualization is type 1 virtualization, and

is pure Java.• This requires typespace virtualization.• Virtual machine monitors marshal the types

and handle the transitions (unless the type is privileged).

• The API allows us entry points into the VMMs.• We can now extend and control the entire JVM

image!

Summary

Page 39: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

References

Page 40: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Virtualisation references:https://en.wikipedia.org/wiki/Virtual_machine_monitorhttps://en.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirementshttps://en.wikipedia.org/wiki/X86_virtualization

JVI an Introduction (Part I)http://www.waratek.com/blog/june-2013/open-source-api-for-java-virtualization

General information about the Waratek CloudVM:http://www.waratek.com

Elasticat (JVI implemented for TomCat):http://www.waratek.com/product/elasticat

JVI source code and Java doc (coming soon):https://github.com/waratek

Page 41: Want to do the impossible with Java?  Lets do it!

Waratek Ltd © 2013

Thank You

[email protected]

Questions?