JPA the Versant Way
-
Upload
jubecker -
Category
Entertainment & Humor
-
view
1.098 -
download
0
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
http://community.versant.com/JPA.aspx
Danke
● Fragen ?
● Kontakt○ [email protected]○ [email protected]
● 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++ ?