Using Apache OpenJPA with GlassFish


Last year Sahoo blogged about using OpenJPA with GlassFish. OpenJPA has evolved a lot since then. It has graduated from incubator to a top level project at Apche. It is also passing JPA TCK. I tried to use OpenJPA with Glassfish V2 . It was very easy to do so. Here are the steps I followed

Step 1: Downnload and install GlassFish
Download any of the latest builds of GlassFish v2 or v1_ur1 from here. Install it in any directory of your choice. I refer to that as GLASSFISH_HOME

Step #2: Install OpenJPA
Download a nightly snapshot of OpenJPA 1.0.0 from here. Unzip this to any location. In this blog, I refer to that location as OPENJPA_HOME.

Step #3: Install OpenJPA in GlassFish
All you need to do is to make OpenJPA implementation jar files and its runtime dependency files available to GlassFish runtime. This can be achieved as follows:

    cd $OPENJPA_HOME
    cp openjpa-1.0.0-SNAPSHOT.jar lib/commons-\*.jar lib/serp-1.11.0.jar $GLASSFISH_HOME/domains/domain1/lib 

GlassFish will automatically make this jar part of its classpath next time when you restart the server. Please note that $OPENJPA_HOME/lib/geronimo\*.jar are not required to be copied as GlassFish already contains equivalent jars. Same is true for $OPENJPA_HOME/lib/derby\*.jar

Step #4: Edit persistence.xml
Make a one line change to your persistence.xml to instruct GlassFish
that we want to use OpenJPA as the persistence provider for this
application. This is achieved by setting the provider element to org.apache.openjpa.persistence.PersistenceProviderImpl. Shown below is a sample persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name ="em1">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<properties>
<!-- Enable SQL Logging for OpenJPA -->
<property name="openjpa.Log" value="DefaultLevel=INFO,SQL=TRACE"/>
</properties>
</persistence-unit>
</persistence>

Step #5: Build and deploy your app
Now you can build your Java EE application and deploy it to GlassFish.

Comments:

Thanks, helpful information. Will try it out soon.

Posted by Mayank Mishra on May 30, 2007 at 04:06 PM PDT #

<property name="openjpa.Log" value="DefaultLevel=INFO,SQL=TRACE"/> SQL=Trace, eh ? I hope this setting only print the SQL statements fired by OpenJPA and does not clutter the log output with "FINER" debug information, like toplink does.

Posted by guest on May 31, 2007 at 02:42 PM PDT #

Thanks for the information. I tried it out and found that OpenJPA (1.0.0 build) works smoothly with Glassfish (9.1pe_b47 build). I also enabled automatic runtime mapping on persistent classes to synchronize their mappings and schema with adding <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,deleteTableContents')"/> in persistence.xml.

Posted by Sherry Shen on June 05, 2007 at 09:47 AM PDT #

I am getting an exception on server startup, after copying the libs:

java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider

Consequently, my application will not load.

Posted by Ulrich Mayring on June 13, 2007 at 06:33 PM PDT #

Did you also copy $OPENJPA_HOME/lib/geronimo-jpa_3.0_spec-1.0.jar into $GLASSFISH_HOME/domains/domain1/lib? This jar contains javax/persistence classes and need not be copied into glassfish

Posted by Mitesh on June 14, 2007 at 06:12 AM PDT #

Getting exception NoClassDefFoundError: oracle/dms/instrument/ExecutionContextForJDBC
Using OpenJPA 1.0.2, Sun Java System Application Server 9.1_01 (build b09d-fcs)

Posted by Johan Wester on May 29, 2008 at 09:56 PM PDT #

Solved problem - seems you need dms.jar (was not mentioned above).
Also, putting dms.jar in the $GLASSFISH_HOME/domains/domain1/lib does not work
I had to put it in $GLASSFISH_HOME/domains/domain1/lib/ext

Posted by Johan Wester on May 29, 2008 at 10:16 PM PDT #

Glassfish v.2.1, OpenJPA 1.2.1(1.3) not properly working with remote client. On remote side i create Entity with not null fields and try persist this entity by invoking remote ejb method. On server side appear entity with null fields and persist() throw javax.transaction.RollbackException. With Toplink all work.

Posted by Jeank on August 03, 2009 at 10:27 PM PDT #

I assume you are passing the entity to a remote EJB method that invokes em.persist. Are you receiving the entity correctly on the remote side? What kind of remote client are you using?

Posted by Mitesh Meswani on August 04, 2009 at 05:17 AM PDT #

On remote side all correct - before invocation remote EJB method i cheked all fields of entity. Remote client - java Swing client

Posted by Jeank on August 06, 2009 at 12:18 AM PDT #

Where did you get dms.jar file?

Posted by Vikrant on September 30, 2010 at 07:55 PM PDT #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Mitesh Meswani

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today
Bookmarks