persistence.xml with Glassfish 3.1.1

Eddy picture Eddy · Feb 4, 2012 · Viewed 39k times · Source

I am very new to glassfish, JPA and so on and I have really problems with setting that up. What I am planning to do is a simple RESTful service with a persistent backend. I am using glassfish3 as application server and already deployed a simple REST service with the jersey-library. Now I want to provide access to a database via JPA. Glassfish is shipped with JavaDB/derby and EclipseLink, is that right? So, I want to use that :-)

I created a persistence.xml in META-INF:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="myPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.driver"   value="org.apache.derby.jdbc.ClientDataSource" /> <!-- org.apache.derby.jdbc.EmbeddedDriver -->
      <property name="javax.persistence.jdbc.url"      value="jdbc:derby://localhost:1527/sample;create=true" />
      <property name="javax.persistence.jdbc.user"     value="APP" />
      <property name="javax.persistence.jdbc.password" value="APP" />
      <property name="eclipselink.ddl-generation"      value="create-tables" />
    </properties>
  </persistence-unit>
</persistence>

Then I created a field in my resource, where I want to access/store som data:

@PersistenceUnit(unitName = "myPU")
EntityManagerFactory emf;

But "emf" is always NULL :-(

I guess that my persistence.xml is not configured appropriate.

Would be really glad if someone has a hint, what I am doing wrong...

thanks!

Answer

Jman picture Jman · Feb 4, 2012

I think it is better to create JNDI for db connection . You can do it easly with GlassFish.

Firstly create connection pool (you will set db connection settings);

Resources->JDBC->JDBC Connection Pools

After that crate JNDI name for this pool ;

Resources->JDBC->JDBC Resources

So lets say you set JNDI name as "dbCon"

And here your persistence.xml ;

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="myPU" transaction-type="JTA">
    <jta-data-source>dbCon</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

Note : You must copy your jdbc jar to \glassfish-3.1.1\glassfish\domains\domain1\lib\ext