Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/Examples/JPA
The following examples are provided to assist developers with their adoption and usage of EclipseLink's JPA and native ORM functionality. See the EclipseLink Solutions Guide and Understanding EclipseLink (Concepts Guide) for details.
Source code to several of these examples, and to other examples can be found in EclipseLink's SVN repository, here, or accessed through SVN, or downloads.
EclipseLink JPA Examples/Tutorials
General
- How to configure
- How to use outside of the container
- Using the EntityManager API
- How to use locking
- How to use database auditing, proxy authentication and VPD
- How to use load balancing, replication and data partitioning
- How to access multiple databases from a single composite persistence unit
- How to optimize performance
Caching
- How to use caching
- How to enable cache coordination : for caching in a cluster.
- How to use database event driven cache invalidation using Oracle DCN/QCN.
Diagnostics
- How to configure logging
- How to configure a third party custom logger
- How to validate metadata against the database
- How to enable performance monitoring and metrics
Schema
- How to automatically create tables and generate DDL for a persistence unit
- How to create indexes
- How to use cascade on delete on the database
- How to use a multitenant shared schema on the database
Mapping
- How to use an EclipseLink ORM.XML Mapping file
- How to configure primary key generation
- How to define inheritance
- How to map an Enum type to coded values
- How to map a List of Enums
- How to preserve collection ordering (JPA 1.0)
- How to map relationships based on an expression instead of foreign keys
- How to enable history tracking
- How to use stored procedures for CRUD operations
- How to archive records instead of deleting them (soft deletes)
- How to configure your persistence unit to be extensible at runtime
Querying
- How to use pessimistic locking
- How to page query results
- How to execute a Query using an EclipseLink native DatabaseQuery
- How to optimize queries using batch and join fetching
- How to use FetchGroups and LoadGroups on queries, and for copying and merging
- How to execute a stored procedure
- How to execute an Oracle PLSQL stored function
- How to get the SQL for a Query
JPA 2.0
- Example JPA Employee Web model
- Example JPA 2.0 Employee model
- How to use Map key columns to map complex Maps
- How to use derived identifiers to map composite Ids through ManyToOne relationships
- How to map collections of Basic or Embeddable values using an ElementCollection mapping
- How to maintain order in a List relationship using an OrderColumn
- How to define dynamic queries using the JPA 2.0 Criteria API
JPA 2.1
- Bulk Update
- Stored Procedures
- JPQL function
- CDI Entity Listeners
- Treat
- Converters
- DDL generation
- Add Named Query
- Entity Graphs
- Unsynchronized Persistence Contexts
JPA-RS
NoSQL
Java SE Examples
Rich Client Platform (RCP)
Spring JPA
Using Native ORM through JPA
Using Native EclipseLink ORM API
Migration
Tutorials
Application Server Tutorials
- The following tutorials are for enterprise developers interested in container or application managed persistence using the JPA 1.0 or 2.0 API.
- See the Distributed JPA Application case study on how a Service/Workers parallel pattern based application uses JPA to deal with Optimistic lock exception scenarios using Java EE 6 API elements - specifically as a single persistence unit used by the distributed application as an alternative to using a shared L2 cache.
Enterprise Application Servers
- Java EE 5 Compliant Application Servers
- Step by step instructions by container for a quick-start Java EE EclipseLink JPA container-managed Application using a single JPA Entity on the major subset of all application servers
- We use a standard container managed @PersistenceContext(..TransactionType dependency injected EntityManager) that is injected on a @Stateless session bean so that the container can provide a thread safe proxy wrapper around the @NotThreadSafe EntityManager and provide us with instrumented transaction management and change tracking. The client servlet gets injected with the @EJB SSB by the web container and is completely separated from the JPA persistence concern.
- These tutorials need to be finished and/or expanded - vote for EclipseLink bug# 308477 if you would like this work to be fast tracked.
Container | Version | Java EE Spec. | Source | Issues |
---|---|---|---|---|
Oracle WebLogic Server | 10.3.6.0 / 12c | 5 + (JPA 2.0, JSF 2, JAX-RS 1.1) |
- See application-scoped datasource workaround. - TODO 20100115: Update for WebLogic 10.3.6 and JPA 2.0 - Verify weaving works in container and application managed EM modes (the current data model only uses @OneToOne and @ManyToMany) | |
Oracle OC4J | 10.1.3.5 | 1.4 (with EJB 3.0) | - Updated for version 10.1.3.5 | |
GlassFish | V3 | 6 | - | - Use V3 prelude - not TP2
- Use the 1.0.9+ snapshot plugin (with fixed library references) against a prelude server - currently at b73 which runs EclipseLink 2.0 with JPA 2.0 support out of the box |
GlassFish | V2.1.1 | 5 | - | - Requires GlassFish V2.1 build 32
- Current Production Release |
SUN Application Server | 9.1 | 5 | - | - See GlassFish V2 which is included in Sun AS 9 |
SAP NetWeaver Application Server | 7.2 | 5 | ||
JBoss | 6.0.0M1 | 6 | - Updated for JBoss 6.0.0M1
- Dynamic weaving is disabled due to (JIRA-572) - see static weaving workaround using the JBoss JSFEJB3 example TODO: >rework tutorial for JBoss 6.0.0 M1 | |
IBM WebSphere | 7.0.0.5 | 5 | 309201 CM EAR |
- Updated for Container Managed and Application Managed scenarios as of 20100419 - There is no WAS 7.0 Eclipse WTP Server plugin yet - you can attach the Eclipse IDE to a WebSphere 7 server in debug mode on port 7777 |
IBM WebSphere | 6.1.0.0 | 1.4/5 | - | - Supports JPA1/EJB3 with optional feature pack on Java SE 1.5
- The WAS 6.1 Eclipse WTP Server plugin (ehr 160221) should be in the next release of Ganymede 3.4 in Dec08 - or use manual or python deployment |
TMAX Jues | 6 | 5 | - 331717 - A wrapper around GlassFish server |
Lightweight Application Servers
Container | Version | Java EE Spec. | Source | Issues |
---|---|---|---|---|
Eclipse Virgo (was SpringSource dm) |
2.1 | 6 (WAR only) | - Virgo is an OSGI enabled web container based on the recently contributed VMWare Springsource dm server and the Gemini OSGI web container (which was aimed at Springsource OSGI users. | |
SpringSource tc | 6.0.20 | 5 (WAR only) | - | - see STS 2.3.0 as in TomCat server based |
IBM WebSphere CE | 2.1.0.1 | 5 | - | - WebSphere CE 2.1 is only certified on Java SE 1.5 (SUN JRE 1.6 runtime support is available) |
Apache Geronimo | 2.0.2 | 5 | - | - see WebSphere CE which wraps Geronimo, Derby and OpenJPA |
Jetty | 7 | ? | - | - Jetty is a web-only container (source) (binary) that can be targetted the same way we target Tomcat (NoServerPlatform) |
Apache Tomcat | 6.0.29 | 5 (w/o EJB) | 250476 | - 2.5 Servlet container will support application managed JPA entities using RESOURCE_LOCAL or JTA transactions.
- JTA datasource (without JTATransactionController) available when running as Tomcat service - SessionCustomizer is required for non-JTA and JTA datasource access. - Only static weaving (instrumentation) is available. - No @EJB or @PersistenceContext injection is available. - Apache Tomcat 7.0.6 is bundled with NetBeans 7.0 - 20110524: added JSF 2.0 configuration on Tomcat section |
EclipseLink JPA Examples Matrix by Container
- The following grid cross-references the above JPA Java EE Tutorials by Application server, Database and type of presentation framework - to answer the question "How to run EclipseLink JPA on an application server against a particular database"?
Database --> | Oracle | MySQL | Derby | JavaDB | HSQL | DB2 Ex |
---|---|---|---|---|---|---|
WebLogic | Servlet | Servlet | ||||
OC4J | Servlet | |||||
Glassfish | Servlet | |||||
Sun AS | Servlet | |||||
JBoss | Servlet or JSF | |||||
IBM WebSphere 7 | Servlet | |||||
Geronimo | ||||||
Tomcat | Servlet |
Under Construction
Querying
Java SE Examples
- GeoNames Example (under development bug 227113)
Database Platform Extensions
- Oracle: Spatial, VPD/OLS, TIMESTAMP, XDB
Advanced
- Dynamic JPA Example : Example extension for JPA without Java classes and XML
- ExtensibleJPA Example : Example showing extensible Entity Types (EclipseLink 2.2)
Using EclipseLink JPA with SEAM
Integrating EclipseLink JPA with an IDE
The following tutorials describe details on running EclipseLink JPA on a specific Java IDE.
- Eclipse 3.6 Helios EE
- SpringSource Tool Suite 2.3.0
- SUN NetBeans 7.0 Beta 2
- Oracle JDeveloper 11.1.2
- WebLogic Workshop
- IBM WebSphere Studio
- IBM Rational Application Developer 7.5
- IntelliJ IDEA 10 (community and commercial)
- Borland JBuilder
Integrating EclipseLink JPA with a Database Platform
The following tutorials describe details on running EclipseLink JPA on a specific database platform.
- Oracle 11 on Tomcat 6,
- MySQL
- Derby 10.5.3.0 on GlassFish V2 / Sun Application Server 9
- DB2 Express C 9.5 on IBM WebSphere CE
- JavaDB
- HSQL on JBoss
- SAP MaxDB 7.7.07.16 for Windows (x86_64, 64 bit) 32-bit :wiki : forum
- JPA on Sybase
- JPA on postgeSQL 9.3 on WebLogic 12.1.2.1 (OSX 10.9 64 bit)
References
- Maven update site for eclipse http://download.eclipse.org/technology/m2e/releases