java data objects (jdo) overview and future michael vorburger, vertical*i java user group...

26
Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

Post on 18-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

Java Data Objects (JDO) Overview and Future

Michael Vorburger, Vertical*i

Java User Group Switzerland

Zurich, 31.03.05

Page 2: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 2

Agenda

Object Persistence O/R Mapping (ORM) History

JDO Introduction JDO API JDOQL JDO 2.0 (JSR 243)

JDO Implementations (Vendors & OSS)

Using JDO in EJB 2.1 Using JDO in Web Apps Using JDO and/or JDBC

EJB 3.0 (JSR 220) Future

Page 3: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 3

About Speaker

Personal interest in persistence space Culprit for an in-house ORM layer Somehow picked up JDO in 2001 Core Java Data Objects co-author For past ca. 3 years user of JDO

Page 4: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 4

About Audience

How many of you would consider themselves “moderately familiar” with JDO, or another similar persistence framework, anyway?

How many of you have read the JDO 2.0 and EJB 3.0 Persistence Specs?

Page 5: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 5

Object Persistence Concepts

Graph of data objects (“Domain Model”)

API: persist(), Persistence by Reachability Transactions Query!

Internal: Memory Management, Caching, etc.

Page 6: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 6

O/R Mapping (ORM)

“Impedance Mismatch” of OOP & RBDMS: Classes vs. Tables, Inheritance mapping strategies Relationships: Single 1-1 or 1-M, Multiple M-N, “Link

with attributes” DBA mixed data and relationship, Inverses/Bi-directionality, Lists, Maps

Identity Management, Uniqueness Class Attribute vs. Column Type Mappings

More in Core JDO Book Chapter 2, but: Solutions formismatches exist; see also your ORM Vendor Doc!

Page 7: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 7

History

Few things fall from the sky… object persistence in general and JDO in particular build upon a “long” history

Have you heard of any of these names before?

CORBA POS Persistent Object Service

Project Forest of Sun Labs (OPJ, PJama)

ODMG API Gemstone, O2, … TopLink (15y+) (EJB 2.1 Entity Beans)

Page 8: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 8

JDO Introduction

JDO is an “interface-based API for selection and transformation of transactional persistent storage data into native Java programming language objects” – Transparent Object Persistence!

Various implements for this API exist: Most as ORM for your favourite RDB; some for standalone or built-in OODBMS.

JDO 1.0 (JSR 12) in 2003 JDO 2.0 (JSR 243) Extension, accepted 1m ago

Page 9: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 9

JDO API: PMF & PM

PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(Properties p);

javax.jdo.PersistenceManager pm = pmf.getPersistenceManager();

pm.makePersistent(customer);

customer = pm.getObjectById(oid,true);

Page 10: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 10

JDO Metadata & Enhancement

JDO XML metadata describes which classes can be persisted (<class name=…>), with relevant options (<collection element-type=…>, <extension …>)

JDO implementation run-time needs to interact with persistence instances for lifecycle notification, load, store/flush. Generally, this is achieved by running a build-time tool, a JDO [byte code] enhancer. (It adds the PersistenceCapable interface from SPI API to persistent classes. This is no longer strictly for JDO compliance,see BinaryCompatibility.)

Subject of hot debates – strange, think AOP etc.

Page 11: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 11

JDO API: Transactions

Non-Managed javax.jdo.Transaction jtx =

pm.currentTransaction(); jtx.begin(); /* Do Stuff */ jtx.commit();

Managed (usually in J2EE container) JTA API

javax.transaction.UserTransaction ut; ut = {lookup somewhere, e.g. JNDI};

ut = ejbContext.getUserTransaction() ut.begin(); /* Do Stuff */ ut.commit();

Declarative EJB container managed transactions

Core JDO Book Chapter 11

Page 12: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 12

JDO API: Query and JDOQL

Query q = pm.newQuery(Customer.class, "customerName.startsWith('Tintin') && lastOrder.price > 100");

Collection results = (Collection)q.execute();Iterator it = results.iterator();while (it.hasNext()) {

Customer cust = (Customer)it.next());

Parameters: q.declareParameters(“String variable") and q.execute(variable) etc. etc. – many many more query facilities!

Page 13: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 13

JDO Queries: More of v1.0

JDOQL “Filter” can contain almost all Java language operators, and some methods such as Collection.isEmpty() & contains(), String.startsWith() & endsWith()[But not arbitrary other domain model methods!]

Ordering Free Variables Compiled Queries Namespaces (packages) Navigation (“dots”) in Filters, Ordering, etc.

Page 14: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 14

JDO Queries: More in v2.0

Single-String JDOQL Form String.matches(), toLowerCase(), toUpperCase(),

indexOf() x2, substring() x2, Map.containsKey() & containsValue(), Math.abs() & sqrt().

Paging Query Results with Query.setRange() or “range :start to :end” and java.util.List results

User-Defined Result Class, single results, Unique Projections, Aggregates functions Standardized SQL pass-through

Page 15: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 15

JDO 2.0 News

Disconnected Object Graphs for multi-tier Standardized RDBMS Mapping Descriptors

(“just” the agreed upon XML language; many implementations already had possibilities)

Can get e.g. a java.sql.Connection from javax.jdo.PersistenceManager

More: newNamedQuery, FetchPlan, Sequence, delete by query, Multiple User Objects on PM, etc.

Page 16: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 16

JDO Implementations [DISCLAIMER]

Open Source JPOX ObjectWeb Speedo TJDO XORM (?) Apache JDO 2.0 RI (?) Orient (ODBMS, OSS is new)

Commercial JDO ORM Vendors Solarmetric Kodo Xcalia (formerly Libelis LiDO) .FR Signsoft intellBO .DE Versant Open Access (formerly JDO Genie) Others, e.g. Exadel, ObjectFrontier, ObjectMatter, Spadesoft XJDO, …

Commercial non-ORM Versant (incl. Poet) ObjectDB (simple &

inexpensive)

Non-JDO ORMs JBoss Hibernate Oracle Toplink Castor JDO OJB (?) …

Page 17: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 17

JDO & EJB 2.1

EJB 2.1 CMP Entity Beans mixed persistence and remoting, with a complicated API and development model (container) – sorry, but consider that dead, essentially.

Session and Message-Driven Beans however certainly have their place. So JDO inside the implementation logic of those makes a lot of sense!

Page 18: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 18

JDO & EJB 2.1

When using JDO inside a RPC-like (“SOA”) EJB Session Bean (or RMI, Spring Remoting.. your-favourite-here) :

“Syntax” aspects: About how to get…, when to… etc. For full code details see Core JDO book chapter 9 and/or Vendor Doc.

“Architectural” aspects: How to write your DTOs (AKA VO) here – or do you write them at all?!

Page 19: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 19

JDO & EJB: DTO (AKA VO)

Either, “traditionally” write dedicated Serializable DTO/VO in addition to PC, maybe per service/use case. Nothing new; see Core J2EE Patterns etc.

Or, mark domain model PCs as Serializable (although JDO will never serialize) and use makeTransient (1.0) or detachCopy (2.0)

Page 20: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 20

JDO & EJB: detachCopy

New JDO 2.0 state: detached-clean/dirty. API:Object PersistenceManager.detachCopy(Object pc);Object PersistenceManager.attachCopy(Object detached,

boolean makeTransactional); Scenario: detach/disconnect, close PM,

serialize across tier, modify disconnected, send back. New PM, new Tx, re-attach.

Keeps original identity and version! Simplifies & makes safer the similar manual

makeTransient() approach from Core JDO book chapter 9.

Page 21: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 21

JDO in the Web Tier (directly)

If your project does not need EJB-like remoting and physical separation of tiers, directly using JDO in the Web Tier (Struts, JSF, etc.) can be very nice, and lead to a simple and efficient development model!

Recommended Architecture: One shared PMF (application context) and one PM and Tx per request (context), managed by a Servlet Filter. Better: Enforce Web MVC with “Model 2” View, allowing “pull view” (e.g. JSP) but read-only; allow write changes in “Controller“ only.

Page 22: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 22

JDO and/or JDBC?

Using JDO (any ORM) does not necessarily mean no JDBC – mixing is possible and may make sense. (Tx safe) [VI LOB]

Core JDO Book chapter 12 has analysis – but outdated already because JDO 2.0 addresses some cases.

Still, of course, for data-centric, database processing intensive, performance sensitive e.g. batch kind applications, as well as for very complex existing fixed RDB schemas, ORM and thus JDO may not be the appropriate road to go.

Page 23: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 23

EJB 3.0

EJB 3.0 EG decided to abandon EJB 2.1 Entity Beans, and create new and separate Persistence Doc and API:

This will be an ORM not a transparent Persistence API. Some other differences. However, will also be usable in J2SE, outside J2EE container.

Page 24: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 24

EJB 3.0

Also a POJO-style approach. Many real world domain models will probably be usable with both APIs!

Both a similar API, conceptually close for practical purposes, e.g. life cycle aligned. EntityManager.persist(), EntityManager.createQuery(), javax.persistence.Query.getResultList()

Query Languages (JDOQL & EJBQL) differ, but maybe JDO 2.1 and EJB 3.1 allow cross-spec query language? (A la SQL in JDO 2.0)

Page 25: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 25

Future of Java Persistence

Today, the choice is JDO; why wait? A proven JCP standard with many implementations.

EJB 3 Final Release supposedly “summer 2005” (?). Requires JDK 5. Slow adoption?

Longer Term (2-3 years?) … who knows? Note: All major JDO implementations very

likely also EJB 3 "persistence engines".

Page 26: Java Data Objects (JDO) Overview and Future Michael Vorburger, Vertical*i Java User Group Switzerland Zurich, 31.03.05

2005-03-31 26

Q & A

Thanks for listening!

To play with “running code” after this:http://www.jpox.org – great tutorials!

Questions?

Drinks.