EclipseLink JPA
in GlassFish™
Doug Clarke
Director of Product Management
Oracle
Eclipse Persistence Services
“EclipseLink”

  Java SE   Java EE        OSGi          Spring       ADF




      JPA    MOX...
History of EclipseLink




                            TopLink
                           Essentials




1996             ...
Significance of EclipseLink

• First comprehensive open source persistence solution
   • Object-Relational and much more
•...
EclipseLink JPA

• JPA 1.0 compliant implementation
• Java EE, Java SE, Web, Spring, and OSGi
• Any JDBC/SQL compliant dat...
Caching

• Hold objects in-memory to avoid unnecessary
    database trips and object construction
•   Cache manages “ident...
Cache Configuration

• Cache Shared (L2)/Isolated (L1 only)
   • Entity cache—not data cache
• <property
      name=“eclip...
EclipseLink JPA Caching




EntityManager   EntityManagerFactory

  L1 Cache            L2 Cache
                      (Sh...
Minimize stale cache

• Configure the cache relative to application data’s
 usage
  • Is the data shared between users/pro...
Leveraging the Shared Cache: Reading
        Client-1                                Client-2
           1                ...
Leveraging the Shared Cache: Writing
                                              Client-2
                              ...
Leveraging the Shared Cache: Writing




EntityManagerFactory
L2 Cache               Connection Pool
                     ...
Advanced Mappings

• @Converter
• @BasicMap and @BasicCollection
• Mapping to database structures
  • @StructConverter – S...
Advanced Mapping Example


@Entity
@Cache(type=SOFT_WEAK, coordinationType=SEND_OBJECT_CHANGES)
@Converter(name=“money”, c...
Advanced Querying

• Support for supplying customizing queries
   • Native SQL
   • @NamedStoredProcQuery
• Graph Loading ...
Transactions

• Java apps typically support many clients sharing
  small number of db connections
• Ideally would like to ...
Transaction Features

• Minimizes database interactions
  • Only the minimal updates are sent to the database
• Respect da...
Concurrency Protection - Locking

• Optimistic concurrency included in JPA 1.0, but no
  support for pessimistic locking i...
Weaving

• EclipseLink makes use of Weaving (ASM) to
 introduce additional functionality into the JPA entity
 classes
  • ...
JPA Configuration Options

• Annotations
   • JPA
   • EclipseLink
• ORM.XML
  • JPA
  • EclipseLink
  • JPA + EclipseLink...
Database Platform

XML:
<properties>
<property
     name=“eclipselink.target-databasequot;
      value=quot;Derbyquot;/>
<...
Target Database Platform

• TargetDatabase (org.eclipse.persistence.jpa.config)
   • Auto (Default)
   • Oracle, Oracle8i,...
Server Platform

• Enables simplified configuration of the target
  application server
• Used to enable integration with:
...
Target Server Options

• TargetServer (org.eclipse.persistence.jpa.config)
   • None (Default)
   • OC4J, OC4J_10_1_3, OC4...
JDBC Connection Settings

<properties>
...
<property name=“eclipselink.jdbc.driver”
  value=“oracle.jdbc.Driver”/>

<prope...
Logging

<properties>
  ...

 <property
     name=“eclipselink.logging.levelquot;
     value=quot;FINEquot;/>
 ...

</prop...
DDL Generation

• Standard enables it but does not currently dictate that
  providers support it
• Mapping metadata specif...
DDL Generation

<properties>
  ...
  <property
      name=“eclipselink.ddl-generationquot;
      value=quot;create-tablesq...
Customization Using Properties

<properties>
  ...
 <property
    name=quot;eclipselink.session.customizerquot;
    value=...
Descriptor & Session Customizers


public class MySessionCustomizer
                implements SessionCustomizer {

    pu...
Performance and Tuning

• Highly configurable and tunable
   • Guiding principle – minimize and optimize database
     int...
Performance and Tuning


    Minimal Writes, Updates     
                                 “Just in Time” reading

    ...
EclipseLink Status

• Incubating Technology Project
  •   Initial contribution of Oracle TopLink complete
  •   Full docum...
Getting Started with EclipseLink JPA


• EclipseLink Project
 http://www.eclipse.org/eclipselink
 Eclipse newsgroup: eclip...
Orcale Presentation
Orcale Presentation
Upcoming SlideShare
Loading in...5
×

Orcale Presentation

2,056

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,056
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
78
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Orcale Presentation

  1. 1. EclipseLink JPA in GlassFish™ Doug Clarke Director of Product Management Oracle
  2. 2. Eclipse Persistence Services “EclipseLink” Java SE Java EE OSGi Spring ADF JPA MOXy EIS SDO DBWS Eclipse Persistence Services Project (EclipseLink) Databases XML Data Legacy Systems
  3. 3. History of EclipseLink TopLink Essentials 1996 2008
  4. 4. Significance of EclipseLink • First comprehensive open source persistence solution • Object-Relational and much more • Based upon product with 12 years of commercial usage • Shared infrastructure • Easily share the same domain model with multiple persistence technologies • Leverage metadata for multiple services • Important part of the GlassFish and Eclipse Ecosystems
  5. 5. EclipseLink JPA • JPA 1.0 compliant implementation • Java EE, Java SE, Web, Spring, and OSGi • Any JDBC/SQL compliant database • Advanced database extensions: stored procedures, native SQL, … • Key infrastructure: • Caching, Locking, Query Framework, Mapping, … • JDBC connection pooling • Diagnostics: Logging, Profiling • DDL Generation • Customization callbacks • Highly Extensible • … plus many valuable advanced features
  6. 6. Caching • Hold objects in-memory to avoid unnecessary database trips and object construction • Cache manages “identity” to support bidirectional and cyclical relationships • Flexible caching options ensure that you get maximum performance • Numerous locking, refreshing, and synchronization options are available to minimize cache staleness • Queries can be run in-memory only against the cache • Cache Coordination supports clustering
  7. 7. Cache Configuration • Cache Shared (L2)/Isolated (L1 only) • Entity cache—not data cache • <property name=“eclipselink.cache.shared.default“ value=quot;truequot;/> • Cache Type & Size • Soft/Hard Weak @Cache(type = CacheType.HARD_WEAK, size = 500, • Weak isolated = true, • Full coordinationType = • None INVALIDATE_CHANGED_OBJECTS) • <property name=“eclipselink.cache.type.default“ value=quot;Fullquot;/>
  8. 8. EclipseLink JPA Caching EntityManager EntityManagerFactory L1 Cache L2 Cache (Shared ) Cache Coordination
  9. 9. Minimize stale cache • Configure the cache relative to application data’s usage • Is the data shared between users/processes? • Is the data volatile? • Only through JPA application? • Through direct DB modification? • Ensure you protect any data that can be concurrently modified with a locking strategy • Must handle optimistic lock failures on flush/commit • Use query refreshing to minimize optimistic lock failures
  10. 10. Leveraging the Shared Cache: Reading Client-1 Client-2 1 5 EntityManager-1 EntityManager-2 L1 Cache L1 Cache 2 6 3 EntityManagerFactory L2 Cache Connection Pool 7 Connection Connection 4 8 Connection Connection Connection
  11. 11. Leveraging the Shared Cache: Writing Client-2 1 EntityManager-2 L1 Cache 2 EntityManagerFactory 3 L2 Cache Connection Pool Connection 4 Connection Connection Connection Connection
  12. 12. Leveraging the Shared Cache: Writing EntityManagerFactory L2 Cache Connection Pool Connection Connection Connection Connection Connection
  13. 13. Advanced Mappings • @Converter • @BasicMap and @BasicCollection • Mapping to database structures • @StructConverter – Structs, ADTs • XML types, PL/SQL Records • Mapping features • Private Owned • Join/Batch Fetch • Returning
  14. 14. Advanced Mapping Example @Entity @Cache(type=SOFT_WEAK, coordinationType=SEND_OBJECT_CHANGES) @Converter(name=“money”, converterClass=MoneyConverter.class) @OptimisticLocking(type=CHANGED_COLUMNS) public class Employee { @Id private int id; private String name; @OneToMany(mappedBy=“owner”) private List<PhoneNumbers> phones; @Convert(“money”) private Money salary … }
  15. 15. Advanced Querying • Support for supplying customizing queries • Native SQL • @NamedStoredProcQuery • Graph Loading Optimizations • Join and Batch Fetch – multi-level • Cache Usage: In-memory • Result caching
  16. 16. Transactions • Java apps typically support many clients sharing small number of db connections • Ideally would like to minimize length of transaction on database Begin Txn Time Begin Txn Commit Txn Commit Txn
  17. 17. Transaction Features • Minimizes database interactions • Only the minimal updates are sent to the database • Respect database integrity • Orders INSERT, UPDATE and DELETE statements • JTA and RESOURCE_LOCAL support • Attribute-level change tracking • EntityManager flush SQL prior to commit • Bulk Update and Delete • Cached entities effected
  18. 18. Concurrency Protection - Locking • Optimistic concurrency included in JPA 1.0, but no support for pessimistic locking is specified • EclipseLink has advanced optimistic locking strategies • Numeric, Timestamp, All fields, Selected fields, Changed field • EntityManager lock() method can be used with optimistic locking, and error handling • EclipseLink supports pessimistic locking through query hints query.setHint(PESSIMISTIC_LOCK, LockNoWait);
  19. 19. Weaving • EclipseLink makes use of Weaving (ASM) to introduce additional functionality into the JPA entity classes • Needed for M:1 and 1:1 lazy fetching • Integrated with Java EE compliant App Servers and Spring 2.0 • Available for Java SE using JDK/JRE’s –javaagent: • Optional • Static weaving also supported • Weaving of .class files before deployment
  20. 20. JPA Configuration Options • Annotations • JPA • EclipseLink • ORM.XML • JPA • EclipseLink • JPA + EclipseLink • Defaults – Configuration by Exception
  21. 21. Database Platform XML: <properties> <property name=“eclipselink.target-databasequot; value=quot;Derbyquot;/> </properties> API: properties.put( EclipseLinkProperties.TARGET_DATABASE, TargetDatabase.ORACLE);
  22. 22. Target Database Platform • TargetDatabase (org.eclipse.persistence.jpa.config) • Auto (Default) • Oracle, Oracle8i, Oracle9i, Oracle10g, Oracle11, TimesTen • DB2, DB2Mainframe • Derby, JavaDB, MySQL • Informix • HSQL, PointBase • PostgreSQL • SQLAnyWhere • SQLServer, DBase • Sybase
  23. 23. Server Platform • Enables simplified configuration of the target application server • Used to enable integration with: • JTA transaction manager • Logging • JDBC connection un-wrapping • <property name=“eclipselink.target-serverquot; value=“SunAS9quot;/>
  24. 24. Target Server Options • TargetServer (org.eclipse.persistence.jpa.config) • None (Default) • OC4J, OC4J_10_1_3, OC4J_11_1_1 • SunAS9 • WebSphere • WebSphere_6_1 • WebLogic, WebLogic_9, WebLogic_10 • JBoss
  25. 25. JDBC Connection Settings <properties> ... <property name=“eclipselink.jdbc.driver” value=“oracle.jdbc.Driver”/> <property name=“eclipselink.jdbc.url” value=“jdbc:oracle:thin:@localhost:1521:XE”/> <property name=“eclipselink.jdbc.user” value=“scott”/> <property name=“eclipselink.jdbc.password” value=“tiger”/>
  26. 26. Logging <properties> ... <property name=“eclipselink.logging.levelquot; value=quot;FINEquot;/> ... </properties>
  27. 27. DDL Generation • Standard enables it but does not currently dictate that providers support it • Mapping metadata specifies how DDL should be generated • Vendors may offer differing levels of support, including: • Generating DDL to a file only • Generating and executing DDL in DB • Dropping existing tables before creating new ones
  28. 28. DDL Generation <properties> ... <property name=“eclipselink.ddl-generationquot; value=quot;create-tablesquot;/> ... </properties>
  29. 29. Customization Using Properties <properties> ... <property name=quot;eclipselink.session.customizerquot; value=quot;acme.MySessionCustomizerquot;/> <property name=quot;eclipselink.descriptor.customizer.Employe equot; value=quot;acme.MyDescriptorCustomizerquot;/> ... </properties>
  30. 30. Descriptor & Session Customizers public class MySessionCustomizer implements SessionCustomizer { public void customize(Session session) { session.setProfiler(new PerformanceProfiler()); } } public class MyDescriptorCustomizer implements DescriptorCustomizer { public void customize(ClassDescriptor desc) { desc.disableCacheHits(); } }
  31. 31. Performance and Tuning • Highly configurable and tunable • Guiding principle – minimize and optimize database interactions • No two applications are the same, EclipseLink allows for decisions on what specific behavior needs to be configurable depending on situation • Flexibility of EclipseLink allows efficient business models and relational schemas to be used • Leverages underlying performance tuning features • Java, JDBC and the underlying database technology • Batch Writing • Parameter Binding • Statement Caching
  32. 32. Performance and Tuning  Minimal Writes, Updates  “Just in Time” reading  Batch Reading, Writing  Automatic change detection  SQL ordering  Caching policies and sizes  Transformation support  Parameterized SQL (binding)  Existence checks  Pre-allocation of sequence  Stored procedures numbers  Statement Caching  Cache Coordination  Scrolling cursors  Optimistic, Pessimistic locking  Projection Queries  Joining object retrieval  Partial Attribute Queries optimization  In memory querying  Dynamic queries AND MUCH MORE!
  33. 33. EclipseLink Status • Incubating Technology Project • Initial contribution of Oracle TopLink complete • Full documentation available on Wiki • Producing Monthly Milestone builds • Milestones included in GlassFish V3 Milestones • 1.0 release planned for July 2008 • JPA 1.0, SDO 2.1, JAXB • Simplified XML and annotation config of advanced features • Packaged for Java SE/EE and OSGi bundles • Beyond 1.0 • JPA 2.0 (Reference Implementation) • Database Web Services • Data Access Service (DAS) 1.0 • and much more …
  34. 34. Getting Started with EclipseLink JPA • EclipseLink Project http://www.eclipse.org/eclipselink Eclipse newsgroup: eclipse.technology.eclipselink • GlassFish V3 https://glassfish.dev.java.net/ • Open Source JPA Tools • NetBeans—http://www.netbeans.org • Dali JPA Tools—http://www.eclipse.org/dali
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×