jpa the versant way

32
JPA the Versant Way Jürgen Becker Viktor Dreiling

Upload: jubecker

Post on 25-Jan-2015

1.113 views

Category:

Entertainment & Humor


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: JPA the Versant Way

JPA the Versant Way

Jürgen BeckerViktor Dreiling

Page 2: JPA the Versant Way

Agenda

1. Versant 2. Big Data 3. Versant JPA 4. Java-Agent und Bytecode-Manipulation 5. Versant JPA Analytics Platform 6. Ingestion / Analytics Demo

Page 3: JPA the Versant Way

Versant

Page 4: JPA the Versant Way

Das Unternehmen

● Fokus auf Objektdatenbanken○ Datenbanken: VOD, DB4O, FastObjects

○ Schnittstellen: proprietär, JDO

● Kunden○ Verizon, Samsung, Ericsson, British Airways○ ...

Page 5: JPA the Versant Way

Big Data

Page 6: JPA the Versant Way

Ziele

● Große, komplexe Datenmengen○ Speicherung (Skalierbarkeit)

○ Analyse (Tools)

○ Zugriff (Standards)

Page 7: JPA the Versant Way

Architektur

Page 8: JPA the Versant Way

Architektur

Versant DB

Page 9: JPA the Versant Way

Architektur

Versant DB

Page 10: JPA the Versant Way

Architektur

Versant JPA Server

Versant JPA Analytics Platform Versant JPA (Client + Server)

Page 11: JPA the Versant Way

Versant JPA

Page 12: JPA the Versant Way

Versant JPA

● Client + Server○ Storage: Objektdatenbank

○ Subset des JPA Standards 2.0■ Kein ORM■ Anwendungsmodell = Datenbankmodell

○ Herstellerspezifische Erweiterungen■ Generic API, Indizes, Server Administration API

○ Fokus: Performance und einfache Benutzbarkeit

Page 13: JPA the Versant Way

Java-Agent und Bytecode-Manipulation

Page 14: JPA the Versant Way

Speichern einer Entity

Entity ?DB

Page 15: JPA the Versant Way

Beispiel Entity@Entitypublic class Attendee {

@Id private long id;private String firstName;

public String getFirstName() {return this.firstName;

}

public void setFirstName(String firstName) {this.firstName = firstName;

}}

Page 16: JPA the Versant Way

Entity Attribute

● JPA Spec: Feld muss mit private, protected oder package visibility deklariert werden

● Zugriff über getter / setter Methoden - JavaBean

● @Access(FIELD) oder @Access(PROPERTY)

Page 17: JPA the Versant Way

Entity Zustand

● Reflection / Dynamic Proxies ☹ ☹ ☹

● Bytecode-Manipulation ☺☺☺○ Build-time○ Run-time mit einem Agenten

Page 18: JPA the Versant Way

Bytecode Transformer

public class JPAClassTransformer implements ClassFileTransformer {

public byte[] transform(ClassLoader loader, String className, Class<?> clazz, ProtectionDomain domain, byte[] classfileBuffer) throws IllegalClassFormatException {

...}

}

Page 19: JPA the Versant Way

Java-Agent trifft Transformer

● MANIFEST.MFPremain-Class: com.versant.Agent

● public class Agent {public static void premain(String args, Instrumentation inst) {

inst.addTransformer(new JPAClassTransformer(args));}

}

● java -javaagent:<path>/versantjpa-agent.jar:<args>

Page 20: JPA the Versant Way

Bytecode-Manipulation

● ASM 4.0 Framework (http://asm.ow2.org/)

● Manipulation und Analyse

● Schnell und Stabil ☺☺☺

● 2 APIs○ Event / Visitor basiert ~ SAX Parser○ Objekt basiert ~ DOM

Page 21: JPA the Versant Way

Abfangen von Zugriffenpublic class FieldInterceptorsClassVisitor extends ClassVisitor {

public MethodVisitor visitMethod(int access, String name,String desc, String signature, String[] exceptions) {

...MethodVisitor mv = super.visitMethod(access, name, desc,

signature, exceptions);return new FieldInterceptorMethodVisitor(mv, ...);

}...

}

Page 22: JPA the Versant Way

Abfangen von Zugriffen (cont)

public class FieldInterceptorMethodVisitor extends MethodVisitor {public void visitFieldInsn(int opcode,String owner,String name,String desc) { ...

switch (opcode) {...case Opcodes.PUTFIELD:

super.visitMethodInsn(INVOKESTATIC, declaringClassName,"_vjpaInterceptWrite_" + name, methodTypeDescriptor);

return;}

}}

Page 23: JPA the Versant Way

Original Bytecode

public class Attendee extends Object {...private String firstName;

public void setFirstName(String); Code: 0: aload_0 1: aload_1 2: putfield #2; //Field firstName:String; 5: return...

Page 24: JPA the Versant Way

Enhanced Bytecode

public class Attendee extends Object { ...private String firstName;protected StateManager _vjpaStateManager;public void setFirstName(String); Code: 0: aload_0 1: aload_1 2: invokestatic #44; //Method

_vjpaInterceptWrite_firstName:(SimpleEntity;String;)V

5: return

Page 25: JPA the Versant Way

Enhanced Bytecode (cont)

public static void _vjpaInterceptWrite_firstName(SimpleEntity,String);

Code:...

30: invokeinterface #63, 2; //InterfaceMethodStateManager.markDirty:(I)V

35: aload_0 36: aload_1 37: putfield #52; //Field firstName:String; 40: return

Page 26: JPA the Versant Way

Agent + Bytecode-Manipulation

● Performance○ JIT Optimierung möglich

● Anwendungsmöglichkeiten○ Dynamic logging○ Method Tracing○ Class Generierung beim Testen○ ...

Page 27: JPA the Versant Way

Versant JPA Analytics Platform (TP)

Page 28: JPA the Versant Way

Komponenten

R-Integration

Hadoop Connector

Ingestion Server

Analytics Server

Page 29: JPA the Versant Way

Ingestion / R Demo

Page 31: JPA the Versant Way

Danke

● Fragen ?

● Kontakt○ [email protected][email protected]

● http://community.versant.com/Forums.aspx

Page 32: JPA the Versant Way

Wir suchen Verstärkung !

Lust auf Analytics / Data Mining, Verteilte Anwendungen,Datenbank Systeme ?

Sehr gut in Java und/oder C/C++ ?

[email protected]