JPA the Versant Way

Post on 25-Jan-2015

1.100 views 0 download

description

 

Transcript of JPA the Versant Way

JPA the Versant Way

Jürgen BeckerViktor Dreiling

Agenda

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

Versant

Das Unternehmen

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

○ Schnittstellen: proprietär, JDO

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

Big Data

Ziele

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

○ Analyse (Tools)

○ Zugriff (Standards)

Architektur

Architektur

Versant DB

Architektur

Versant DB

Architektur

Versant JPA Server

Versant JPA Analytics Platform Versant JPA (Client + Server)

Versant JPA

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

Java-Agent und Bytecode-Manipulation

Speichern einer Entity

Entity ?DB

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;

}}

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)

Entity Zustand

● Reflection / Dynamic Proxies ☹ ☹ ☹

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

Bytecode Transformer

public class JPAClassTransformer implements ClassFileTransformer {

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

...}

}

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>

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

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, ...);

}...

}

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;}

}}

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...

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

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

Agent + Bytecode-Manipulation

● Performance○ JIT Optimierung möglich

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

Versant JPA Analytics Platform (TP)

Komponenten

R-Integration

Hadoop Connector

Ingestion Server

Analytics Server

Ingestion / R Demo

Danke

● Fragen ?

● Kontakt○ vdreiling@versant.com○ jbecker@versant.com

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

Wir suchen Verstärkung !

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

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

jobs@versant.com