users@jersey.java.net

Re: [Jersey] Jersey + Mysql + Hibernate/JPA + Glassfish v2.1

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Wed, 14 Oct 2009 21:13:20 +0200

On Oct 14, 2009, at 8:47 PM, Roan Brasil Monteiro wrote:

> Can someone help me with it, please? Well I have it only to test,
> when I am using like that is working:
>
> emf = Persistence.createEntityManagerFactory("citespace-jpa");
> this.em = emf.createEntityManager();
>
> em.getTransaction().begin();
> Place p = new Place();
> p.setName("Roan");
> em.persist(p);
> em.getTransaction().commit();
> em.close();
> emf.close();
>

OK.


>
>
> This way I am getting NullPointerException
>
>
> @PersistenceContext(unitName="citespace-jpa")
> EntityManager em;
>

Note that it is not currently possible to support the injection of an
EntityManager and avail of container managed persistence. Injection of
EE resources and container managed persistent will be fully supported
for Java EE 6 (it is actually supported now in the GF v3 promoted
builds if using managed beans or EJBs in the war).

It is how possible to support the injection of Only an
EntityManagerFactory (see below).


>
> @GET
> @Produces("text/plain")
> public String getIt() {
> StringBuilder strb = new StringBuilder();
>
> Place p = em.find(Place.class, 1);
> strb.append(p.getId()+":"+p.getName());
>
>
> Can someone help with that, please?
>

If you want to support injection of an EntityManagerFactory;

   @PersistenceContext(unitName="citespace-jpa")
        EntityManagerFactory emf;

then in your web.xml you need to:

1) change the servlet class to:

    com.sun.jersey.server.impl.container.servlet.ServletAdaptor

2) add a persistence unit, for example:

    <persistence-unit-ref>
      <persistence-unit-ref-name>persistence/citespace-jpa</
persistence-unit-ref-name>
      <persistence-unit-name>citespace-jpa</persistence-unit-name>
    </persistence-unit-ref>

3) add a servlet init parameter referencing 2)

   <init-param>
     <param-name>unit:citespace-jpa</param-name>
     <param-value>persistence/citespace-jpa</param-value>
   </init-param>


This enables Jersey to look up the EntityManagerFactory instance using
JNDI with the name:

   java:comp/env/unit:citespace-jpa

and inject that.

See the bookmark sample for details:

   http://download.java.net/maven/2/com/sun/jersey/samples/bookmark/1.1.3-ea/bookmark-1.1.3-ea-project.zip

Paul.

> My persistence.xml
>
> <?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="citespace-jpa" transaction-
> type="RESOURCE_LOCAL" >
> <provider>org.hibernate.ejb.HibernatePersistence</provider>
> <jta-data-source>jdbc/TestDS</jta-data-source>
> <!-- <non-jta-data-source>java:/jdbc/citespace-jpaDS</non-
> jta-data-source> -->
> <properties>
> <property name="hibernate.dialect"
> value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
> <property name="hibernate.hbm2ddl.auto" value="update"/>
> <property name="hibernate.show_sql" value="true"/>
> <property name="hibernate.format_sql" value="true"/>
> </properties>
> </persistence-unit>
> </persistence>
>
>
> and my web.xml
>
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
> ">
> <servlet>
> <servlet-name>Jersey Web Application</servlet-name>
> <servlet-
> class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-
> class>
> <init-param>
> <param-name>com.sun.jersey.config.property.packages</
> param-name>
> <param-value>com.citespace.citespacerest</param-value>
> </init-param>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>Jersey Web Application</servlet-name>
> <url-pattern>/webresources/*</url-pattern>
> </servlet-mapping>
> </web-app>
> --
> Atenciosamente,
>
> Roan Brasil Monteiro
> http://roanbrasil.wordpress.com/