Вы находитесь на странице: 1из 36

EclipseLink JPA

in GlassFish™
Doug Clarke
Director of Product Management
Oracle
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


History of EclipseLink

TopLink
Essentials

1996 2008
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
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
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
Cache Configuration

• Cache Shared (L2)/Isolated (L1 only)


• Entity cache—not data cache
• <property
name=“eclipselink.cache.shared.default“
value="true"/>
• 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="Full"/>
EclipseLink JPA Caching

EntityManager EntityManagerFactory

L1 Cache L2 Cache
(Shared )

Cache Coordination
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
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
Leveraging the Shared Cache: Writing
Client-2
1

EntityManager-2

L1 Cache

EntityManagerFactory 3
L2 Cache Connection Pool
Connection
4 Connection
Connection
Connection
Connection
Leveraging the Shared Cache: Writing

EntityManagerFactory
L2 Cache Connection Pool
Connection
Connection
Connection
Connection
Connection
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
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

}
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
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
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
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);
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
JPA Configuration Options

• Annotations
• JPA
• EclipseLink
• ORM.XML
• JPA
• EclipseLink
• JPA + EclipseLink
• Defaults – Configuration by Exception
Database Platform

XML:
<properties>
<property
name=“eclipselink.target-database"
value="Derby"/>
</properties>

API:
properties.put(
EclipseLinkProperties.TARGET_DATABASE,
TargetDatabase.ORACLE);
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
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-server"
value=“SunAS9"/>
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
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”/>
Logging

<properties>
...

<property
name=“eclipselink.logging.level"
value="FINE"/>
...

</properties>
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
DDL Generation

<properties>
...
<property
name=“eclipselink.ddl-generation"
value="create-tables"/>
...
</properties>
Customization Using Properties

<properties>
...
<property
name="eclipselink.session.customizer"
value="acme.MySessionCustomizer"/>
<property

name="eclipselink.descriptor.customizer.Employe
e"
value="acme.MyDescriptorCustomizer"/>
...
</properties>
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();
}
}
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
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!


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 …
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

Вам также может понравиться