SlideShare ist ein Scribd-Unternehmen logo
JPA the Versant Way
Jürgen Becker
Viktor 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 Analytics Platform                Versant JPA (Client + Server)




                                  Versant
                                 JPA 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
@Entity
public 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.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>
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 Zugriffen
public 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; //InterfaceMethod
                      StateManager.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

Ingestion Server


Analytics Server


R-Integration


Hadoop Connector
Ingestion / R Demo
http://community.versant.com/JPA.aspx
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

Weitere ähnliche Inhalte

PDF
Tutorium 5
PDF
Lightweight AOP with CDI and JPA
PPTX
Empowering Civic Participation in the Policy Making Process through Social Media
PDF
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
PPTX
TypeScript
PDF
Lösungsorientierte Fehlerbehandlung
PPTX
Codesmells
PDF
Go - Googles Sprache für skalierbare Systeme
Tutorium 5
Lightweight AOP with CDI and JPA
Empowering Civic Participation in the Policy Making Process through Social Media
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
TypeScript
Lösungsorientierte Fehlerbehandlung
Codesmells
Go - Googles Sprache für skalierbare Systeme

Ähnlich wie JPA the Versant Way (20)

PDF
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
PDF
Speeding up Java Persistence
PDF
Optimierung von JPA-Anwendungen
PDF
Einführung in die funktionale Programmierung
PPTX
Prototype 1.7
PDF
Besseren Java Code mit Type Annotations
PDF
GWT – Google Web Toolkit in der Praxis
PDF
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
PDF
Let's talk about Java EE
PPTX
JSF und JPA effizient kombinieren (W-JAX 2011)
PDF
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PDF
JSF vs. GWT? JSF und GWT!
PDF
Java Persistence 2.0
PPT
JdbcTemplate aus Spring
PDF
JPA – Der Persistenz-­Standard in der Java EE und SE
PDF
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
PDF
Java-Anwendungen betreiben mit Durchblick
PDF
Funktionale Reaktive Programmierung mit Sodium
PPTX
TypeScript
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
Speeding up Java Persistence
Optimierung von JPA-Anwendungen
Einführung in die funktionale Programmierung
Prototype 1.7
Besseren Java Code mit Type Annotations
GWT – Google Web Toolkit in der Praxis
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Let's talk about Java EE
JSF und JPA effizient kombinieren (W-JAX 2011)
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
JSF vs. GWT? JSF und GWT!
Java Persistence 2.0
JdbcTemplate aus Spring
JPA – Der Persistenz-­Standard in der Java EE und SE
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
Java-Anwendungen betreiben mit Durchblick
Funktionale Reaktive Programmierung mit Sodium
TypeScript
Anzeige

JPA the Versant Way

  • 1. JPA the Versant Way Jürgen Becker Viktor Dreiling
  • 2. Agenda 1. Versant 2. Big Data 3. Versant JPA 4. Java-Agent und Bytecode-Manipulation 5. Versant JPA Analytics Platform 6. Ingestion / Analytics Demo
  • 4. Das Unternehmen ● Fokus auf Objektdatenbanken ○ Datenbanken: VOD, DB4O, FastObjects ○ Schnittstellen: proprietär, JDO ● Kunden ○ Verizon, Samsung, Ericsson, British Airways ○ ...
  • 6. Ziele ● Große, komplexe Datenmengen ○ Speicherung (Skalierbarkeit) ○ Analyse (Tools) ○ Zugriff (Standards)
  • 8. Architektur Versant DB
  • 9. Architektur Versant DB
  • 10. Architektur Versant JPA Analytics Platform Versant JPA (Client + Server) Versant JPA Server
  • 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
  • 14. Speichern einer Entity ? Entity DB
  • 15. Beispiel Entity @Entity public class Attendee { @Id private long id; private String firstName; public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } }
  • 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. Entity Zustand ● Reflection / Dynamic Proxies ☹☹☹ ● Bytecode-Manipulation ☺☺☺ ○ Build-time ○ Run-time mit einem Agenten
  • 18. Bytecode Transformer public class JPAClassTransformer implements ClassFileTransformer { public byte[] transform(ClassLoader loader, String className, Class<?> clazz, ProtectionDomain domain, byte[] classfileBuffer) throws IllegalClassFormatException { ... } }
  • 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. 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. Abfangen von Zugriffen public 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. 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. 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 ...
  • 24. 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
  • 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. Agent + Bytecode-Manipulation ● Performance ○ JIT Optimierung möglich ● Anwendungsmöglichkeiten ○ Dynamic logging ○ Method Tracing ○ Class Generierung beim Testen ○ ...
  • 27. Versant JPA Analytics Platform (TP)
  • 31. Danke ● Fragen ? ● Kontakt ○ vdreiling@versant.com ○ jbecker@versant.com ● http://community.versant.com/Forums.aspx
  • 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