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

Ähnlich wie JPA the Versant Way

digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM.org
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
gedoplan
 
Optimierung von JPA-Anwendungen
Optimierung von JPA-AnwendungenOptimierung von JPA-Anwendungen
Optimierung von JPA-Anwendungen
gedoplan
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
Digicomp Academy AG
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
msebel
 
Besseren Java Code mit Type Annotations
Besseren Java Code mit Type AnnotationsBesseren Java Code mit Type Annotations
Besseren Java Code mit Type Annotations
dzuvic
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
Cenarion Information Systems GmbH
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
GFU Cyrus AG
 
Let's talk about Java EE
Let's talk about Java EELet's talk about Java EE
Let's talk about Java EE
Andreas König
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)
Michael Kurz
 
JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!
Christian Kaltepoth
 
Java Persistence 2.0
Java Persistence 2.0Java Persistence 2.0
Java Persistence 2.0GFU Cyrus AG
 
JdbcTemplate aus Spring
JdbcTemplate aus SpringJdbcTemplate aus Spring
JdbcTemplate aus Springtutego
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SE
hwilming
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
Marc Müller
 
Java-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit DurchblickJava-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit Durchblick
Tobias Frech
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
Torsten Fink
 
TypeScript
TypeScriptTypeScript
TypeScript
Jens Siebert
 
T3ak12 extbase
T3ak12 extbaseT3ak12 extbase

Ähnlich wie JPA the Versant Way (20)

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

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