Presentation given at InterConnect 2016. With the introduction of EclipseLink as another JPA provider for WebSphere, this presentation will help with the usage and migration scenarios.
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
1. PEJ-5303
OpenJPA and EclipseLink
Usage Scenarios Explained
Kevin Sutter, STSM
WebSphere Java EE and JPA Architect
Twitter: @kwsutter
LinkedIn: https://www.linkedin.com/in/kevinwsutter
Cindy High, Senior Software Engineer
WebSphere Migration Toolkit
Twitter: @CTHigh
LinkedIn: http://www.linkedin.com/in/cindyhigh
2. Please Note:
2
• IBM’s statements regarding its plans, directions, and intent are subject to change or withdrawal without notice at IBM’s sole
discretion.
• Information regarding potential future products is intended to outline our general product direction and it should not be relied on in
making a purchasing decision.
• The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any
material, code or functionality. Information about potential future products may not be incorporated into any contract.
• The development, release, and timing of any future features or functionality described for our products remains at our sole discretion.
• Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual
throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the
amount of multiprogramming in the user’s job stream, the I/O configuration, the storage configuration, and the workload processed.
Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.
3. Agenda
• OpenJPA and EclipseLink
• JPA version comparisons
• OpenJPA to EclipseLink Migration
• High level concepts
• OpenJPA to EclipseLink Investigation
• Specific differences
• Migration Toolkit
• Summary
• Q & A
3
5. OpenJPA and EclipseLink
• Apache OpenJPA
• Basis for WebSphere’s JPA solution for JPA 1.0 and JPA
2.0
• EclipseLink
• JPA Reference Implementation – “gospel”
• Basis for WebSphere Liberty’s JPA solution for JPA 2.1
• Moving forward…
• OpenJPA will continue to be supported in WebSphere for
many, many years
• At least until JPA 2.0 is deprecated…
• Both WebSphere traditional and Liberty
5
6. Multiple JPA Providers
• Do I have to switch providers?
• Absolutely not!
• If you are happy with the current OpenJPA offering, there is
no need to move to EclipseLink
• If you want to use the JPA 2.1 features, you may need to
change…
• Many of the JPA 2.1 features have corresponding OpenJPA
proprietary solutions
• Apache OpenJPA (ie. JPA 2.0) is compatible with other Java EE 7
features
• Allows for an easier, more gradual JPA migration
6
7. Key JPA 2.1 Features available in OpenJPA
• Schema Generation (JPA 2.1 Spec, Section 9.4)
• Generates DDL or interacts directly with database to define table schemas
based on JPA Entity definitions
• Similar functionality provided by OpenJPA’s schema mapper
• Entity Graphs (JPA 2.1 Spec, Section 3.7)
• Allows for specified fetching or processing of a graph of Entity objects
• Similar functionality provided by OpenJPA’s FetchPlan and FetchGroup
• Stored Procedure Queries (JPA 2.1 Spec, Section 3.10.17)
• Ability to invoke database stored procedures
• Similar functionality provided by OpenJPA’s Query invocation
7
8. Additional JPA 2.1 Features available in OpenJPA
• Basic Attribute Type Conversion (JPA 2.1 Spec, Section 3.8)
• Similar functionality support provided by OpenJPA’s Externalizer feature
• @Index and @ForeignKey annotations (JPA 2.1 Spec, Sections 11.1.19 and 11.1.23)
• Similar functionality provided by OpenJPA’s annotations
• Unwrap utility methods for EntityManager, Cache, etc (JPA 2.1 Spec Sections 3.1.1 and 7.10)
• Similar functionality provided by OpenJPA’s implementation --
EntityManagerImpl.unwrap() and OpenJPAPersistence.cast()
• Object construction when mapping results from native SQL (JPA 2.1 Spec, Section 3.10.16.2.2)
• Similar functionality provided by OpenJPA’s internal ResultShape object
8
9. Additional JPA 2.1 Features NOT available in OpenJPA
• Criteria API Updates (JPA 2.1 Spec, Sections 6.5.15 and 6.5.7)
• Bulk update/delete
• Support for TREAT, ON, and FUNCTION operators
• Unsynchronized Persistence Contexts (JPA 2.1 Spec, Section 7.6.1)
• Provides more control over when Persistence Contexts are synchronized
with a transaction. Useful for mobile applications.
• EntityListeners and CDI (JPA 2.1 Spec, Section 3.5.1)
• EntityListeners can now use CDI for injection of objects
• JPQL Updates for JPA 2.1 (JPA 2.1 Spec, Chapter 4)
• Several extensions to JPQL in support of the other features
• OpenJPA’s JPQL will stay at the JPA 2.0 level
9
10. Feature Comparison Chart
10
Key JPA 2.1 Features Available in current OpenJPA solution?
Schema Generation Yes, SynchronizeMappings
Entity Graphs Yes, FetchPlans and FetchGroups
Stored Procedures Yes, Query interface
Basic Attribute Type Conversion Yes, Externalizer (and Factory)
@Index and @ForeignKey annotations Yes, proprietary @Index and @ForeignKey annotations
Unwrap utility functions Yes, EntityManagerImpl.unwrap() and OpenJPAPersistence.cast()
Object construction when mapping results with native SQL Yes, ResultShape (internal OpenJPA implementation)
Criteria API updates No
Unsynchronized PersistenceContexts No
EntityListeners and CDI No
JPQL Updates in support of JPA 2.1 No
11. Bottom Line
• YOU DO NOT NEED TO MIGRATE
• Our Advice
• Continue using OpenJPA for your existing applications
• Use EclipseLink for your new applications
• But… If you want to use EclipseLink with existing applications,
the following slides will discuss what to look out for when
migrating existing applications
11
13. Cache
• DataCache
• OpenJPA's L2 cache is disabled out of the box. EclipseLink's L2 cache
is enabled by default.
• If you are migrating an application that isn't using the OpenJPA cache,
it is highly recommended to disable the EclipseLink cache using:
<shared-cache-mode>NONE</shared-cache-mode>
• Query (Results) Cache
• If QueryCache is enabled for OpenJPA, it will cache all Named Queries
and JPQL Statement Results
• EclipseLink only caches Named Queries Results
• More information on EclipseLink QueryCache here
13
14. Weaving/enhancement/transformation
• OpenJPA: Entities must be enhanced
• EclipseLink: Entities do not have to be enhanced
• Documented missing features (lazy loading, performance
gains, etc)
• WebSphere container automatically weaves/enhances Entities
for both OpenJPA and EclipseLink
• Applications packaged with entities pre-enhanced by OpenJPA
must be recompiled and repackaged
• Removes OpenJPA specific enhancement bytecode
14
16. Investigation
• Goal
• Find differences in behavior between OpenJPA and EclipseLink
• OpenJPA → EclipseLink migration issues
• Data
• Entities from OpenJPA's testing framework (>700 entities)
• Process
• Auto generate databases tables using both providers
• Use tables created by OpenJPA for verification
• Database: DB2
• Results
• Errors (fix EclipseLink)
• Table differences
16
17. Private Accessor Methods
• JPA 2.1 Spec: property accessor methods must be public or
protected
• OpenJPA: ignores “private” fields
• EclipseLink: persists “private” fields
• Migrating issue: missing database column error
• Solution: Add @Transient to the method
• Forces EclipseLink to ignore the field
17
Add @Transient
18. Getter/Setter accessor methods
• Annotated getter method with no corresponding setter
• OpenJPA: silently ignores the field
• EclipseLink: throws an error during entity validation
• Solution: remove annotation
18
Missing setVersion method
19. No-arg Constructor
• JPA 2.1 Spec: an entity must have a no-arg constructor
• OpenJPA: if missing, generates a no-arg constructor.
• EclipseLink: throws an error only if the no-arg constructor is missing,
but other constructors exist.
• Solution: Add an empty no-arg constructor
19
Add no-arg
constructor
20. Unannotated Collections
• Unannotated fields of type java.util.Collection or any of it’s
subinterfaces (List<E>, Queue<E>, Set<E>, etc)
• OpenJPA: ignores fields
• EclipseLink: persists fields
• Solution: Add @javax.persistence.Transient
20
Add @Transient
21. @javax.persistence.ElementCollection
• @ElementCollection generates a Separate table
• Two columns: id, value
• Different value column name
• OpenJPA: 'element’
• CREATE TABLE EntityA_LISTOFSTRINGS (ENTITYA_ID INTEGER,
element VARCHAR(254))
• EclipseLink: field name
• CREATE TABLE EntityA_LISTOFSTRINGS (EntityA_ID INTEGER,
LISTOFSTRINGS VARCHAR(255))
• Solution: Add @javax.persistence.Column
21
Add @Column
22. Behavior Mismatch: @GeneratedValue
• Generate values for primary keys
• Strategies: TABLE, SEQUENCE, IDENTITY, AUTO
• No Strategy or 'AUTO': JPA provider picks the strategy
• Good news: OpenJPA and EclipseLink default to 'TABLE' strategy
• Bad news: different table schemas are created
• Solution
• Change entity to explicitly use 'TABLE' strategy
• Map to existing OpenJPA table
22
23. Java Persistence Query Language (JPQL)
• @NamedQuery: specify named query in JPQL
• OpenJPA: ignores invalid unused JPQL statements
• EclipseLink: validates all JPQL statement by default
• Solutions
• Solution 1: fix JPQL statements
• Solution 2: set eclipselink's invalid JPQL tolerance property to
true
23
24. Unique Names
• Tables, NamedQuery, SQLResultSetMapping must have unique
names
• OpenJPA behavior is undefined
• Example: tables with same name are combined
• EclipseLink throws an error during entity validation
• Solution: review entities (manual process) 24
26. Summary
• Do I want to utilize my existing database tables?
• Modifications to the entities may be necessary
• Database tables previously created (by OpenJPA) may
not match EclipseLink’s generated tables
• OpenJPA may have been more lenient with spec
violations than Eclipselink is
• Recommendation
• Continue using OpenJPA for existing applications
• Migrate to EclipseLink only for new applications
26
28. Do you need to migrate?
Best practice is to
• Use OpenJPA for your existing applications
• Use EclipseLink for your new applications
But…
If you need to migrate, we have tools to assist.
28
29. An Overview of WebSphere Migration Tools
A set of tools help you:
- Migrate from third-party application servers to WebSphere Application Server
- Migrate between versions of WebSphere Application Server
- Migrate to WebSphere Application Server to the Cloud
29
Migration discovery Binaries analysis Source migration Config migration
On-line tool that helps you
• Estimate the effort required to
migrate your application to
WebSphere Application Server
from third-party application
servers
• Select the IBM cloud platform
suited to host your application
and estimate migration to that
platform
Command-line analysis of application
binaries that provides
• High level evaluation report
showing the Java EE
technologies your application
uses
• Detailed analysis for migration
between versions of
WebSphere traditional, Liberty,
and Liberty Core
• Cloud migration for instant
runtimes differences
• Java EE 7 differences
• Cloud connectivity analysis
Eclipse plugins that scans application
source to provide
• High level evaluation report
• A line-by-line analysis of code
changes required
• Detailed analysis for migrating
from third-party applications
servers
• Detailed analysis for migration
between versions of WebSphere
traditional, Liberty, and Liberty
Core
• Java EE 7 differences
• Cloud migration for instant
runtimes differences
• Cloud connectivity analysis
Eclipse plugin that helps migrate
server configuration
• From third-party application
servers to WebSphere
Application Server
• Between versions of
WebSphere Application Server
including WebSphere traditional
to Liberty.
30. How can the migration toolkit help?
• Scan for OpenJPA to EclipseLink differences
• The Eclipse-based, source scanning migration tool
• Contains 19 Java rules with 9 quick fixes
• Contains 5 XML rules with 2 quick fixes
• Focuses on annotated JPA applications
• Provides some configuration support
• The binary scanning tool
• Detects Entities enhanced for OpenJPA
• Contains 2 Java rules
• Contains 5 XML rules
30
31. Where can I get the migration tools?
• http://wasdev.net
31
• Eclipse Marketplace
32. How do I use the Eclipse migration tool?
Select Run > Analysis… to configure the JPA related rules.
• Choose the OpenJPA to EclipseLink JPA Migration rule set if you are only
interested in the JPA rules.
32
33. How do I use the Eclipse migration tool?
• Select Run > Analysis to configure JPA related rules.
• Choose the WebSphere
Application Server Version
Migration rule set if you want
to do more analysis.
• Select Java EE 7 as the
target Java EE version
• Select JPA
33
34. 34
See the code to change
• After running Analysis, use the Software Analyzer Results view to
interpret the scan.
38. 38
What can I expect? -- XML rules
Note: The rule Mapping files are not processed during OpenJPA to
EclipseLink migration is a reminder that most of the rules are Java
annotation rules. If define your Entities in mapping files rather than using
JPA annotations, you will need to make manual mapping file changes.
39. What if I don’t have source code?
The binary scanner detects
• Enhanced Java code – only in the binary scanner
• the XML issues
• org.apache.openjpa packages in use
39
40. How do I use the binary scanner?
• java -jar binaryAppScanner.jar --help
40
42. Other Tools: Integrity Checker
• EclipseLink provides a way to verify descriptor's metadata against database
metadata
• Setup the integrity checker using a session customizer (link)
• Catches missing tables or columns without having to persist
• Example: private getter methods
• setShouldCatchExceptions(true) - find all entities with missing columns
• Cons: doesn't catch everything or maybe anything…
• Failed to catch @ElementColumn resulting in a different column name
in the separate table, @GeneratedValue looking for a different table
• Doesn't compare column types
• Better than nothing, but it missed many common issues
42
43. Useful Links
• EclipseLink JPA provider for Liberty profile article
https://developer.ibm.com/wasdev/blog/2014/05/28/
eclipselink-jpa-provider-liberty-profile/
• EclipseLink Migration Wiki Page
https://wiki.eclipse.org/EclipseLink/Examples/JPA/Migration/
OpenJPA
43
44. Useful Links
• WebSphere Application Server Migration Toolkit
• wasdev.net download and links to the documentation
• https://developer.ibm.com/wasdev/downloads/#asset/tools-WebSphere_Application_Server_Migration_Toolkit
• Eclipse Marketplace
• https://marketplace.eclipse.org/content/ibm-websphere-application-server-migration-toolkit
• Migration Toolkit for Application Binaries
• wasdev.net download and links to the documentation
• https://developer.ibm.com/wasdev/downloads/#asset/tools-Migration_Toolkit_for_Application_Binaries
44
45. Sampling of Related Sessions…
• PEJ-5296: Java EE 7 Overview
– Monday, 10:30am-11:30am, Mandalay Bay North, South Pacific Ballroom A
• PEJ-2876: Configuring WebSphere Application Server for Enterprise Messaging Needs
– Monday, 12:00pm-1:00pm, Mandalay Bay North, Islander Ballroom G
• PEJ-2139: Technical Deep Dive into IBM WebSphere Liberty
– Monday, 3:00pm-4:00pm, Mandalay Bay North, South Pacific Ballroom A
• PEJ-1603: IBM WebSphere Liberty in the Wild
– Tuesday, 1:15pm-2:15pm, Mandalay Bay North, South Pacific Ballroom A
• PEJ-6480: Don’t Wait! Developing Responsive Applications with Java EE 7
– Tuesday, 1:15pm-2:15pm, Mandalay Bay North, Islander Ballroom G
• PEJ-1979: Hands-On with the IBM WebSphere Application Server Migration Toolkit (LAB)
– Tuesday, 01:15 PM - 02:15 PM, MGM Grand - Room 320
• PEJ-2151: Agile Development Using Java EE 7 with WebSphere Liberty Profile (LAB)
– Wednesday, 8:30am-9:30am, MGM Grand Room 306
• PEJ-1973: WAS Migration: Benefits, Planning, and Best Practices
– Wednesday, 12:00pm-1:00pm, Mandalay Bay North, South Pacific Ballroom A
• PEJ-1902: Migrate Java EE Applications to Cloud with Cloud Migration Toolkit
– Wednesday, 2:30pm-12:15pm, Mandalay Bay North, Islander Ballroom G
• PEJ-5303: OpenJPA and EclipseLink Usage Scenarios Explained
– Thursday, 11:30am-12:15pm, Mandalay Bay North, South Pacific Ballroom A
45 45
47. Notices and Disclaimers Con’t.
47
Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not
tested those products in connection with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products.
Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the
ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The provision of the information contained h erein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual
property right.
IBM, the IBM logo, ibm.com, Aspera®, Bluemix, Blueworks Live, CICS, Clearcase, Cognos®, DOORS®, Emptoris®, Enterprise Document Management System™, FASP®,
FileNet®, Global Business Services ®, Global Technology Services ®, IBM ExperienceOne™, IBM SmartCloud®, IBM Social Business®, Information on Demand, ILOG,
Maximo®, MQIntegrator®, MQSeries®, Netcool®, OMEGAMON, OpenPower, PureAnalytics™, PureApplication®, pureCluster™, PureCoverage®, PureData®,
PureExperience®, PureFlex®, pureQuery®, pureScale®, PureSystems®, QRadar®, Rational®, Rhapsody®, Smarter Commerce®, SoDA, SPSS, Sterling Commerce®,
StoredIQ, Tealeaf®, Tivoli®, Trusteer®, Unica®, urban{code}®, Watson, WebSphere®, Worklight®, X-Force® and System z® Z/OS, are trademarks of International Business
Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM
trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
48. Thank You
Your Feedback is Important!
Access the InterConnect 2016 Conference Attendee
Portal to complete your session surveys from your
smartphone,
laptop or conference kiosk.