Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JPA the Versant WayJürgen BeckerViktor Dreiling
Agenda1. Versant2. Big Data3. Versant JPA4. Java-Agent und Bytecode-Manipulation5. Versant JPA Analytics Platform6. Ingest...
Versant
Das Unternehmen●   Fokus auf Objektdatenbanken    ○   Datenbanken: VOD, DB4O, FastObjects    ○   Schnittstellen: proprietä...
Big Data
Ziele●   Große, komplexe Datenmengen    ○   Speicherung (Skalierbarkeit)    ○   Analyse (Tools)    ○   Zugriff (Standards)
Architektur
Architektur     Versant       DB
Architektur     Versant       DB
ArchitekturVersant JPA Analytics Platform                Versant JPA (Client + Server)                                  Ve...
Versant JPA
Versant JPA●   Client + Server    ○   Storage: Objektdatenbank    ○   Subset des JPA Standards 2.0         ■ Kein ORM     ...
Java-Agent undBytecode-Manipulation
Speichern einer Entity           ? Entity                   DB
Beispiel Entity@Entitypublic class Attendee {    @Id private long id;    private String firstName;    public String getFir...
Entity Attribute●   JPA Spec: Feld muss mit private, protected oder    package visibility deklariert werden●   Zugriff übe...
Entity Zustand●   Reflection / Dynamic Proxies   ☹☹☹●   Bytecode-Manipulation       ☺☺☺     ○ Build-time     ○ Run-time mi...
Bytecode Transformerpublic class JPAClassTransformer implements ClassFileTransformer {    public byte[] transform(ClassLoa...
Java-Agent trifft Transformer●   MANIFEST.MF      Premain-Class: com.versant.Agent●   public class Agent {        public s...
Bytecode-Manipulation●   ASM 4.0 Framework (http://asm.ow2.org/)●   Manipulation und Analyse●   Schnell und Stabil ☺☺☺●   ...
Abfangen von Zugriffenpublic class FieldInterceptorsClassVisitor extends ClassVisitor {    public MethodVisitor visitMetho...
Abfangen von Zugriffen (cont)public class FieldInterceptorMethodVisitor extends MethodVisitor {    public void visitFieldI...
Original Bytecodepublic class Attendee extends Object {   ...   private String firstName;   public void setFirstName(Strin...
Enhanced Bytecodepublic class Attendee extends Object { ...   private String firstName;   protected StateManager _vjpaStat...
Enhanced Bytecode (cont)public static void _vjpaInterceptWrite_firstName(SimpleEntity,                                    ...
Agent + Bytecode-Manipulation●   Performance     ○ JIT Optimierung möglich●   Anwendungsmöglichkeiten     ○ Dynamic loggin...
Versant JPA Analytics    Platform (TP)
KomponentenIngestion ServerAnalytics ServerR-IntegrationHadoop Connector
Ingestion / R Demo
http://community.versant.com/JPA.aspx
Danke●   Fragen ?●   Kontakt     ○ vdreiling@versant.com     ○ jbecker@versant.com●   http://community.versant.com/Forums....
Wir suchen Verstärkung ! Lust auf Analytics / Data Mining,     Verteilte Anwendungen,      Datenbank Systeme ?Sehr gut in ...
Upcoming SlideShare
Loading in …5
×

JPA the Versant Way

1,453 views

Published on

Published in: Entertainment & Humor
  • Be the first to comment

  • Be the first to like this

JPA the Versant Way

  1. 1. JPA the Versant WayJürgen BeckerViktor Dreiling
  2. 2. Agenda1. Versant2. Big Data3. Versant JPA4. Java-Agent und Bytecode-Manipulation5. Versant JPA Analytics Platform6. Ingestion / Analytics Demo
  3. 3. Versant
  4. 4. Das Unternehmen● Fokus auf Objektdatenbanken ○ Datenbanken: VOD, DB4O, FastObjects ○ Schnittstellen: proprietär, JDO● Kunden ○ Verizon, Samsung, Ericsson, British Airways ○ ...
  5. 5. Big Data
  6. 6. Ziele● Große, komplexe Datenmengen ○ Speicherung (Skalierbarkeit) ○ Analyse (Tools) ○ Zugriff (Standards)
  7. 7. Architektur
  8. 8. Architektur Versant DB
  9. 9. Architektur Versant DB
  10. 10. ArchitekturVersant JPA Analytics Platform Versant JPA (Client + Server) Versant JPA Server
  11. 11. Versant JPA
  12. 12. 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
  13. 13. Java-Agent undBytecode-Manipulation
  14. 14. Speichern einer Entity ? Entity DB
  15. 15. 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; }}
  16. 16. 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)
  17. 17. Entity Zustand● Reflection / Dynamic Proxies ☹☹☹● Bytecode-Manipulation ☺☺☺ ○ Build-time ○ Run-time mit einem Agenten
  18. 18. Bytecode Transformerpublic class JPAClassTransformer implements ClassFileTransformer { public byte[] transform(ClassLoader loader, String className, Class<?> clazz, ProtectionDomain domain, byte[] classfileBuffer) throws IllegalClassFormatException { ... }}
  19. 19. Java-Agent trifft Transformer● MANIFEST.MF Premain-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>
  20. 20. 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
  21. 21. 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, ...); } ...}
  22. 22. 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; } } }
  23. 23. Original Bytecodepublic 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 ...
  24. 24. Enhanced Bytecodepublic 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
  25. 25. Enhanced Bytecode (cont)public static void _vjpaInterceptWrite_firstName(SimpleEntity, String); Code: ... 30: invokeinterface #63, 2; //InterfaceMethod StateManager.markDirty:(I)V 35: aload_0 36: aload_1 37: putfield #52; //Field firstName:String; 40: return
  26. 26. Agent + Bytecode-Manipulation● Performance ○ JIT Optimierung möglich● Anwendungsmöglichkeiten ○ Dynamic logging ○ Method Tracing ○ Class Generierung beim Testen ○ ...
  27. 27. Versant JPA Analytics Platform (TP)
  28. 28. KomponentenIngestion ServerAnalytics ServerR-IntegrationHadoop Connector
  29. 29. Ingestion / R Demo
  30. 30. http://community.versant.com/JPA.aspx
  31. 31. Danke● Fragen ?● Kontakt ○ vdreiling@versant.com ○ jbecker@versant.com● http://community.versant.com/Forums.aspx
  32. 32. Wir suchen Verstärkung ! Lust auf Analytics / Data Mining, Verteilte Anwendungen, Datenbank Systeme ?Sehr gut in Java und/oder C/C++ ? jobs@versant.com

×