users@jersey.java.net

Re: [Jersey] Jersey and JPA best practices?

From: Florian Hars <hars_at_bik-gmbh.de>
Date: Fri, 19 Dec 2008 12:47:51 +0100

Paul Sandoz schrieb:
> I recommend emailing mailto:users_at_glassfish.dev.java.net
> to ask questions related to the persistence context support in EE.

But my problem is not with persistence in EE in general, but with persistence
with jersey. This code as a servlet works like a charm:

import javax.persistence.{EntityManager,PersistenceContext}
import javax.servlet.http._

class SUsers extends HttpServlet {
  
  private var em: EntityManager = _

  @PersistenceContext{ val unitName="test" }
  def setEntityManager(e: EntityManager) { em = e }

  def allUsers = {
    {<html><body><table>
      { for (user <- jpa.User.getAll(em)) yield
         <tr><td>{ user.userName }</td></tr>
      }
     </table></body></html>}.toString
  }

  override def service(rq : HttpServletRequest, resp : HttpServletResponse) {
    resp setContentType "text/html";
    resp.getWriter() println allUsers
  }
}

What does not work is the naive translation into a jersey resource, there em is
always null:

import javax.persistence.{EntityManager,PersistenceContext}
import javax.ws.rs._
import javax.ws.rs.core._

@Path("user/")
class Users {
  
  private var em: EntityManager = _

  @PersistenceContext{ val unitName="test" }
  def setEntityManager(e: EntityManager) { em = e }

  @GET
  @Produces(Array("text/html"))
  def allUsers = {
    {<html><body><table>
      { for (user <- jpa.User.getAll(em)) yield
         <tr><td>{ user.userName }</td></tr>
      }
     </table></body></html>}.toString
  }
}

Is this even expected to work, or is this one of the things scheduled for
JavaEE 6? The bookmarks example seems to imply that it should work (or at least
equivalent code using an EntityManagerFactory), but it doesn't...

- Florian.