SlideShare a Scribd company logo
Cayenne, OpenJPA, iBatis  Apache Persistence Layers ApacheCon EU 2008 Henning Schmiedehausen [email_address]
The O/R impedance mismatch Objects (Java Knowledge) RDBMS ?
In a nutshell… “ Object-Relational mapping (O/RM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a ‘virtual object database’.”  –  Wikipedia
Selection criterias Data access (CRUD) Developers knowledge  Database languages (SQL, DDL)
Can we stop here?  I just need to query data for my (web) application. I could use the  “industry standard”, right?
Yeah, right JDO 1.0, 2.0, 2.1 ? EJB 2 (Ieek!) or 3 ? JPA ? J2SE ? J2EE ? And wait, there is more… …  Legacy code? Optimized SQL? …  Transparent or explicit persistence?
Meanwhile, outside Apache… Hibernate „ de facto standard“ (L)GPL licensed driven by a single company TopLink Essentials JSR 220 Reference Implementation CDDL + GPLv2 driven by a single company
Ok, ok, ok… So, why Apache?
Because we are at ApacheCon…
Apache Software License V2 Open Source Commercial friendly Non discriminatory
Strong community Many contributors Meritocracy Commercial support available
Apache Persistence Layers Apache Cayenne Apache OpenJPA Apache iBatis not in this talk: Apache Torque (http://db.apache.org/torque/) Apache OJB (http://db.apache.org/ojb/)
Common Ground JDBC, JTA, JNDI Many popular DBs supported: MySQL, PostgreSQL, Oracle, HSQLDB, Apache Derby XML mapping definition files 1:1, 1:n, m:n mappings native and generated primary keys
Where are we? Apache Cayenne 2.0.4 (Oct 12th, 2007) 3.0M3 Apache OpenJPA 1.0.2 (Feb 18th, 2008) 1.1.0-SNAPSHOT Apache iBatis 2.3.1 Beta (Mar 25th, 2008) 3.0 in planning state
Swing GUI tool for modeling Ant support, maven through ant tasks concepts related to WebObjects EOF
Cayenne Pros: GUI modeler included Good documentation Cons: all data objects inherit  DataObject (3.0 will have POJO support) no standards compliant API (3.0 will be JPA compliant)
implements JPA (JSR-220) Ant support, maven through ant tasks Command line tools included based on Kodo, donated by BEA
Pros: Standards based (JPA) POJO support Good documentation Cons: Some learning effort required Only command line tools included
Example code This talk can only scratch the concepts Example code is available from my homepage, along with examples for other O/R tools: http://henning.schmiedehausen.org/or-mappers/ http://svn.softwareforge.de/svn/opensource/talks/or-mappers/
A sample relation
Cayenne property class People extends CayenneDataObject { void setFirstName(String  firstName ) {  writeProperty ( "firstName" ,  firstName ); } String getFirstName() {  return (String)  readProperty ( "firstName" ); }
Cayenne relation class People extends CayenneDataObject { void addToContacts(Contact  contact ) {  addToManyTarget ( "contacts" ,  contact , true); } void removeFromContacts(Contact  contact ) {  removeToManyTarget ( "contacts" ,  contact , true);  } List getContacts() { return (List)  readProperty ( "contacts" ); }
Cayenne mapping <obj-entity name=&quot;People&quot;  className=&quot; om.People &quot; dbEntityName=&quot; people &quot;> <obj-attribute name=&quot; firstName &quot; type=&quot;java.lang.String&quot; db-attribute-path=&quot; people_firstname &quot;/> </obj-entity> <obj-relationship name=&quot;people&quot; source=&quot; Contact &quot; target=&quot; People &quot; db-relationship-path=&quot;people&quot;/> Class/DB Map Prop. / Col Map Obj Relation
OpenJPA property @Entity @Table(name=&quot;people&quot;) public class People { private String  firstName ; @Basic @Column(name=&quot;people_firstname&quot;) public String getFirstName() { return  firstName ; } public void setFirstName(String firstName) { this. firstName  =  firstName; } Class/DB Map Prop. / Col Map
OpenJPA relation @Entity @Table(name=&quot;people&quot;) public class People { private Collection<Contact>  contacts ; @OneToMany(mappedBy = &quot;people&quot;, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) public Collection<Contact> getContacts() { return  contacts ; } public void setContacts(   Collection<Contact> contacts) { this. contacts  = contacts; } Class/DB Map Obj Relation
Accessing the Mapper Cayenne: DataContext  dataContext  = DataContext.createDataContext(); OpenJPA: EntityManagerFactory  entityManagerFactory  = Persistence.createEntityManagerFactory(); EntityManager  em  =  entityManagerFactory .createEntityManager();
Retrieving an Object by PK Cayenne: People user = (People) DataObjectUtils  .objectForPK( dataContext , People.class, 2); OpenJPA: People user =   (People)  em .find(People.class, 2L);
Changing an Object Cayenne: People people = retrieve();  people.setMember(true); dataContext. commitChanges() ; OpenJPA: Transaction  tx  =  em .getTransaction(); tx.begin() ; People people = retrieve();  people.setMember(true); tx.commit() ;
And Now… …for Something Completely Different
iBATIS Data mapper framework couples SQL queries to Java objects Ant support, maven through ant tasks Abator tool / Eclipse plugin
iBATIS Pro: fast, lightweight, unintrusive Other Languages: Ruby, .NET POJO support Eclipse plugin Cons: SQL knowledge required „ not mainstream“ concept
A mapped query <select id=&quot; getPeople &quot;  parameterClass=&quot;people&quot;  resultMap=&quot;peopleResult&quot; > select * from people <dynamic prepend=&quot;where&quot;> <isNotNull prepend=&quot;and&quot; property=&quot;id&quot;> people_id = #id# </isNotNull> </dynamic> </select>
Query examples Querying a single object People  select = new   People (); select.setId(2L); People user = (People)   sqlMap  .queryForObject(&quot; getPeople &quot;, select); Querying a list List select =  sqlMap  .queryForList(&quot; getPeople &quot;, null);
Caveat iBatis is not an O/R mapper, it is a data mapper!  calling  retrieve()  twice returns: Cayenne, OpenJPA: The same object iBatis: Two different objects
Which one to use? This table is highly subjective! YMMV! …  when standards compliance is a concern OpenJPA … if you need J2EE integration All of them … if your SQL is better than your Java / .NET iBATIS … if your Java is better than your SQL Cayenne, OpenJPA When What
Where to go from here? http://henning.schmiedehausen.org/or-mappers/ Talk slides and Example code O/R Mappers Homepages: http://cayenne.apache.org/ http://openjpa.apache.org/ http://ibatis.apache.org/ Other ASF persistence mappers: http://db.apache.org/torque / http://db.apache.org/ojb /
?
Thanks for your attention!

More Related Content

What's hot (20)

PPT
JSP Custom Tags
BG Java EE Course
 
ODP
JavaEE Spring Seam
Carol McDonald
 
PDF
Javascript Best Practices
Christian Heilmann
 
PDF
Metaprogramming with javascript
Ahmad Rizqi Meydiarso
 
PPT
Spring overview
Dhaval Shah
 
PPT
JavaScript Workshop
Pamela Fox
 
PPT
X Path
Kunal Gaind
 
PPTX
Ot performance webinar
Suite Solutions
 
PPT
PDF Localization
Suite Solutions
 
ODP
JavaScript and jQuery Fundamentals
BG Java EE Course
 
PDF
Introduction to JPA and Hibernate including examples
ecosio GmbH
 
PPT
Rich faces
BG Java EE Course
 
PPT
Client Side Technologies
Anirban Majumdar
 
PDF
Statistical Element Locator by Oren Rubin - SeleniumConf UK 2016
Oren Rubin
 
PDF
Introduction to Prolog (PROramming in LOGic)
Ahmed Gad
 
PDF
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
Core Mind
 
PDF
Class notes(week 2) on basic concepts of oop-2
Kuntal Bhowmick
 
PPT
Chromattic usage in eXo Social
Thuy_Dang
 
PPT
sMash at May NYPHP UG
Project Zero
 
PPT
Implementing the Genetic Algorithm in XSLT: PoC
jimfuller2009
 
JSP Custom Tags
BG Java EE Course
 
JavaEE Spring Seam
Carol McDonald
 
Javascript Best Practices
Christian Heilmann
 
Metaprogramming with javascript
Ahmad Rizqi Meydiarso
 
Spring overview
Dhaval Shah
 
JavaScript Workshop
Pamela Fox
 
X Path
Kunal Gaind
 
Ot performance webinar
Suite Solutions
 
PDF Localization
Suite Solutions
 
JavaScript and jQuery Fundamentals
BG Java EE Course
 
Introduction to JPA and Hibernate including examples
ecosio GmbH
 
Rich faces
BG Java EE Course
 
Client Side Technologies
Anirban Majumdar
 
Statistical Element Locator by Oren Rubin - SeleniumConf UK 2016
Oren Rubin
 
Introduction to Prolog (PROramming in LOGic)
Ahmed Gad
 
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
Core Mind
 
Class notes(week 2) on basic concepts of oop-2
Kuntal Bhowmick
 
Chromattic usage in eXo Social
Thuy_Dang
 
sMash at May NYPHP UG
Project Zero
 
Implementing the Genetic Algorithm in XSLT: PoC
jimfuller2009
 

Similar to Apache Persistence Layers (20)

PDF
Apache Cayenne for WO Devs
WO Community
 
PPTX
Apache Cayenne: a Java ORM Alternative
Andrus Adamchik
 
PDF
Spring Boot Tutorial Part 2 (JPA&Hibernate) .pdf
abdelr7man3mad2004
 
PDF
Data access
Joshua Yoon
 
KEY
Object Relational Mapping in PHP
Rob Knight
 
PPT
Introduction to Object-Relational Mapping
Ali Shakiba
 
PPT
ORM JPA
Rody Middelkoop
 
PDF
Java e i database: da JDBC a JPA
benfante
 
PPT
ORM Concepts and JPA 2.0 Specifications
Ahmed Ramzy
 
PDF
Free Hibernate Tutorial | VirtualNuggets
Virtual Nuggets
 
PDF
Java persistence api 2.1
Rakesh K. Cherukuri
 
PDF
Java Persistence API
Ilio Catallo
 
ODP
Working with jpa
Ondrej Mihályi
 
PDF
Evolution of database access technologies in Java-based software projects
Tom Mens
 
DOCX
Object relationship mapping and hibernate
Joe Jacob
 
PDF
Apache Con Us2007 Apachei Batis
day
 
PDF
Oracle Code Roma: NoSQL + SQL = MySQL
Frederic Descamps
 
PPTX
Module-3 for career and JFSD ppt for study.pptx
ViratKohli78
 
PPTX
SeaJUG May 2012 mybatis
Will Iverson
 
PDF
Using the latest Java Persistence API 2 Features - Tech Days 2010 India
Arun Gupta
 
Apache Cayenne for WO Devs
WO Community
 
Apache Cayenne: a Java ORM Alternative
Andrus Adamchik
 
Spring Boot Tutorial Part 2 (JPA&Hibernate) .pdf
abdelr7man3mad2004
 
Data access
Joshua Yoon
 
Object Relational Mapping in PHP
Rob Knight
 
Introduction to Object-Relational Mapping
Ali Shakiba
 
Java e i database: da JDBC a JPA
benfante
 
ORM Concepts and JPA 2.0 Specifications
Ahmed Ramzy
 
Free Hibernate Tutorial | VirtualNuggets
Virtual Nuggets
 
Java persistence api 2.1
Rakesh K. Cherukuri
 
Java Persistence API
Ilio Catallo
 
Working with jpa
Ondrej Mihályi
 
Evolution of database access technologies in Java-based software projects
Tom Mens
 
Object relationship mapping and hibernate
Joe Jacob
 
Apache Con Us2007 Apachei Batis
day
 
Oracle Code Roma: NoSQL + SQL = MySQL
Frederic Descamps
 
Module-3 for career and JFSD ppt for study.pptx
ViratKohli78
 
SeaJUG May 2012 mybatis
Will Iverson
 
Using the latest Java Persistence API 2 Features - Tech Days 2010 India
Arun Gupta
 
Ad

Recently uploaded (20)

PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Digital Circuits, important subject in CS
contactparinay1
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Ad

Apache Persistence Layers

  • 1. Cayenne, OpenJPA, iBatis Apache Persistence Layers ApacheCon EU 2008 Henning Schmiedehausen [email_address]
  • 2. The O/R impedance mismatch Objects (Java Knowledge) RDBMS ?
  • 3. In a nutshell… “ Object-Relational mapping (O/RM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a ‘virtual object database’.” – Wikipedia
  • 4. Selection criterias Data access (CRUD) Developers knowledge Database languages (SQL, DDL)
  • 5. Can we stop here? I just need to query data for my (web) application. I could use the “industry standard”, right?
  • 6. Yeah, right JDO 1.0, 2.0, 2.1 ? EJB 2 (Ieek!) or 3 ? JPA ? J2SE ? J2EE ? And wait, there is more… … Legacy code? Optimized SQL? … Transparent or explicit persistence?
  • 7. Meanwhile, outside Apache… Hibernate „ de facto standard“ (L)GPL licensed driven by a single company TopLink Essentials JSR 220 Reference Implementation CDDL + GPLv2 driven by a single company
  • 8. Ok, ok, ok… So, why Apache?
  • 9. Because we are at ApacheCon…
  • 10. Apache Software License V2 Open Source Commercial friendly Non discriminatory
  • 11. Strong community Many contributors Meritocracy Commercial support available
  • 12. Apache Persistence Layers Apache Cayenne Apache OpenJPA Apache iBatis not in this talk: Apache Torque (http://db.apache.org/torque/) Apache OJB (http://db.apache.org/ojb/)
  • 13. Common Ground JDBC, JTA, JNDI Many popular DBs supported: MySQL, PostgreSQL, Oracle, HSQLDB, Apache Derby XML mapping definition files 1:1, 1:n, m:n mappings native and generated primary keys
  • 14. Where are we? Apache Cayenne 2.0.4 (Oct 12th, 2007) 3.0M3 Apache OpenJPA 1.0.2 (Feb 18th, 2008) 1.1.0-SNAPSHOT Apache iBatis 2.3.1 Beta (Mar 25th, 2008) 3.0 in planning state
  • 15. Swing GUI tool for modeling Ant support, maven through ant tasks concepts related to WebObjects EOF
  • 16. Cayenne Pros: GUI modeler included Good documentation Cons: all data objects inherit DataObject (3.0 will have POJO support) no standards compliant API (3.0 will be JPA compliant)
  • 17. implements JPA (JSR-220) Ant support, maven through ant tasks Command line tools included based on Kodo, donated by BEA
  • 18. Pros: Standards based (JPA) POJO support Good documentation Cons: Some learning effort required Only command line tools included
  • 19. Example code This talk can only scratch the concepts Example code is available from my homepage, along with examples for other O/R tools: http://henning.schmiedehausen.org/or-mappers/ http://svn.softwareforge.de/svn/opensource/talks/or-mappers/
  • 21. Cayenne property class People extends CayenneDataObject { void setFirstName(String firstName ) { writeProperty ( &quot;firstName&quot; , firstName ); } String getFirstName() { return (String) readProperty ( &quot;firstName&quot; ); }
  • 22. Cayenne relation class People extends CayenneDataObject { void addToContacts(Contact contact ) { addToManyTarget ( &quot;contacts&quot; , contact , true); } void removeFromContacts(Contact contact ) { removeToManyTarget ( &quot;contacts&quot; , contact , true); } List getContacts() { return (List) readProperty ( &quot;contacts&quot; ); }
  • 23. Cayenne mapping <obj-entity name=&quot;People&quot; className=&quot; om.People &quot; dbEntityName=&quot; people &quot;> <obj-attribute name=&quot; firstName &quot; type=&quot;java.lang.String&quot; db-attribute-path=&quot; people_firstname &quot;/> </obj-entity> <obj-relationship name=&quot;people&quot; source=&quot; Contact &quot; target=&quot; People &quot; db-relationship-path=&quot;people&quot;/> Class/DB Map Prop. / Col Map Obj Relation
  • 24. OpenJPA property @Entity @Table(name=&quot;people&quot;) public class People { private String firstName ; @Basic @Column(name=&quot;people_firstname&quot;) public String getFirstName() { return firstName ; } public void setFirstName(String firstName) { this. firstName = firstName; } Class/DB Map Prop. / Col Map
  • 25. OpenJPA relation @Entity @Table(name=&quot;people&quot;) public class People { private Collection<Contact> contacts ; @OneToMany(mappedBy = &quot;people&quot;, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) public Collection<Contact> getContacts() { return contacts ; } public void setContacts( Collection<Contact> contacts) { this. contacts = contacts; } Class/DB Map Obj Relation
  • 26. Accessing the Mapper Cayenne: DataContext dataContext = DataContext.createDataContext(); OpenJPA: EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(); EntityManager em = entityManagerFactory .createEntityManager();
  • 27. Retrieving an Object by PK Cayenne: People user = (People) DataObjectUtils .objectForPK( dataContext , People.class, 2); OpenJPA: People user = (People) em .find(People.class, 2L);
  • 28. Changing an Object Cayenne: People people = retrieve(); people.setMember(true); dataContext. commitChanges() ; OpenJPA: Transaction tx = em .getTransaction(); tx.begin() ; People people = retrieve(); people.setMember(true); tx.commit() ;
  • 29. And Now… …for Something Completely Different
  • 30. iBATIS Data mapper framework couples SQL queries to Java objects Ant support, maven through ant tasks Abator tool / Eclipse plugin
  • 31. iBATIS Pro: fast, lightweight, unintrusive Other Languages: Ruby, .NET POJO support Eclipse plugin Cons: SQL knowledge required „ not mainstream“ concept
  • 32. A mapped query <select id=&quot; getPeople &quot; parameterClass=&quot;people&quot; resultMap=&quot;peopleResult&quot; > select * from people <dynamic prepend=&quot;where&quot;> <isNotNull prepend=&quot;and&quot; property=&quot;id&quot;> people_id = #id# </isNotNull> </dynamic> </select>
  • 33. Query examples Querying a single object People select = new People (); select.setId(2L); People user = (People) sqlMap .queryForObject(&quot; getPeople &quot;, select); Querying a list List select = sqlMap .queryForList(&quot; getPeople &quot;, null);
  • 34. Caveat iBatis is not an O/R mapper, it is a data mapper! calling retrieve() twice returns: Cayenne, OpenJPA: The same object iBatis: Two different objects
  • 35. Which one to use? This table is highly subjective! YMMV! … when standards compliance is a concern OpenJPA … if you need J2EE integration All of them … if your SQL is better than your Java / .NET iBATIS … if your Java is better than your SQL Cayenne, OpenJPA When What
  • 36. Where to go from here? http://henning.schmiedehausen.org/or-mappers/ Talk slides and Example code O/R Mappers Homepages: http://cayenne.apache.org/ http://openjpa.apache.org/ http://ibatis.apache.org/ Other ASF persistence mappers: http://db.apache.org/torque / http://db.apache.org/ojb /
  • 37. ?
  • 38. Thanks for your attention!