Td Mxc Oracle Session Clarke

  • October 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Td Mxc Oracle Session Clarke as PDF for free.

More details

  • Words: 1,249
  • Pages: 36
EclipseLink JPA in GlassFish™ Doug Clarke Director of Product Management Oracle

Eclipse Persistence Services “EclipseLink” Java SE

JPA

Java EE

OSGi

MOXy

EIS

Spring

SDO

ADF

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 • Weak • Full • None • <property

@Cache(type = CacheType.HARD_WEAK, size = 500, isolated = true, coordinationType = INVALIDATE_CHANGED_OBJECTS)

name=“eclipselink.cache.type.default“ value="Full"/>

EclipseLink JPA Caching

EntityManager L1 Cache

EntityManagerFactory 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-2

Client-1

5

1

EntityManager-2

EntityManager-1 L1 Cache

L1 Cache

2

6 3

EntityManagerFactory L2 Cache

Connection Pool 4 8

Connection Connection Connection Connection Connection

7

Leveraging the Shared Cache: Writing Client-2 1

EntityManager-2 L1 Cache

2

EntityManagerFactory L2 Cache

3

Connection Pool 4

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

Time

Begin Txn Commit Txn

Begin 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"/> 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"/> ...

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"/> ...

Customization Using Properties <properties> ... <property name="eclipselink.session.customizer" value="acme.MySessionCustomizer"/> <property name="eclipselink.descriptor.customizer.Employe e" value="acme.MyDescriptorCustomizer"/> ...

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 Batch Reading, Writing SQL ordering Transformation support Existence checks Stored procedures Statement Caching Scrolling cursors Projection Queries Partial Attribute Queries

“Just in Time” reading  Automatic change detection  Caching policies and sizes  Parameterized SQL (binding)  Pre-allocation of sequence numbers  Cache Coordination  Optimistic, Pessimistic locking  Joining object retrieval 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

Related Documents