You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Björn Harrtell <bj...@gmail.com> on 2011/01/01 01:44:47 UTC

Poblems injecting EntityManager in an annotated Jersey resource

Hi,

I've been investigating using injected EntityManager into jersey resources
to get context managed transactions. I've gotten it to work with Glassfish 3
but have failed to get it working with OpenEJB which I would prefer to be
using.

The jersey issue http://java.net/jira/browse/JERSEY-230 describes both a
preferred implementation and a fix done for Glassfish 1,5 years ago (fix
might be relevant?). I've implemented a resource called PersonResource as
desribed in the issue with a persistance unit called "testunit" and it works
with Glassfish 3.0.1 (I can successfully make a transaction using the
injected EntityManager), but with Tomcat 6/OpenEJB 3.1.3 I get a null
reference for the EntityManager i.e it doesn't seem to be injected. The
OpenEJB log indicates that things get initialized correctly (?) at
deployment:

2011-01-01 01:11:47,966 - INFO  - Configuring enterprise application:
/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2
2011-01-01 01:11:48,115 - INFO  - Configuring PersistenceUnit(name=testunit)
2011-01-01 01:11:48,127 - INFO  - Auto-creating a Resource with id 'Default
JDBC DatabaseNonJta' of type 'DataSource for 'testunit'.
2011-01-01 01:11:48,127 - INFO  - Configuring Service(id=Default JDBC
DatabaseNonJta, type=Resource, provider-id=Default JDBC Database)
2011-01-01 01:11:48,128 - INFO  - Creating Resource(id=Default JDBC
DatabaseNonJta)
2011-01-01 01:11:48,148 - INFO  - Adjusting PersistenceUnit testunit
<jta-data-source> to Resource ID 'Default JDBC Database' from 'jdbc/test'
2011-01-01 01:11:48,148 - INFO  - Adjusting PersistenceUnit testunit
<non-jta-data-source> to Resource ID 'Default JDBC DatabaseNonJta' from
'null'
2011-01-01 01:11:48,164 - INFO  - Enterprise application
"/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2"
loaded.
2011-01-01 01:11:48,164 - INFO  - Assembling app:
/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2
2011-01-01 01:11:48,824 - INFO  - PersistenceUnit(name=testunit,
provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider
time 655ms
2011-01-01 01:11:48,913 - INFO  - Jndi(name=PersonResourceLocalBean) -->
Ejb(deployment-id=PersonResource)
2011-01-01 01:11:48,959 - INFO  - Created Ejb(deployment-id=PersonResource,
ejb-name=PersonResource, container=Default Stateless Container)
2011-01-01 01:11:48,959 - INFO  - Deployed
Application(path=/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2)
2011-01-01 01:11:49,201 - INFO  - Configuring enterprise application:
/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb
2011-01-01 01:11:49,232 - INFO  - Enterprise application
"/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb"
loaded.
2011-01-01 01:11:49,232 - INFO  - Assembling app:
/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb
2011-01-01 01:11:49,232 - INFO  - Deployed
Application(path=/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb)

I'm guessing a different implementation using separate classes for the bean
and resource might work but I'm not really sure how to do that and would
prefer the implementation as is described in
http://java.net/jira/browse/JERSEY-230

/Björn

Re: Poblems injecting EntityManager in an annotated Jersey resource

Posted by Björn Harrtell <bj...@gmail.com>.
I've managed to track down the Glassfish revision that fixed the problem
there, hoping that might help someone that knows more than me about this
stuff :) :

http://java.net/projects/glassfish/sources/svn/revision/25742 (the note
"Added interceptor registration spi to enable jax-rs injection into EJB
components implemented as resources")

<http://java.net/projects/glassfish/sources/svn/revision/25742>/Björn

Den 1 januari 2011 01:44 skrev Björn Harrtell <bj...@gmail.com>:

> Hi,
>
> I've been investigating using injected EntityManager into jersey resources
> to get context managed transactions. I've gotten it to work with Glassfish 3
> but have failed to get it working with OpenEJB which I would prefer to be
> using.
>
> The jersey issue http://java.net/jira/browse/JERSEY-230 describes both a
> preferred implementation and a fix done for Glassfish 1,5 years ago (fix
> might be relevant?). I've implemented a resource called PersonResource as
> desribed in the issue with a persistance unit called "testunit" and it works
> with Glassfish 3.0.1 (I can successfully make a transaction using the
> injected EntityManager), but with Tomcat 6/OpenEJB 3.1.3 I get a null
> reference for the EntityManager i.e it doesn't seem to be injected. The
> OpenEJB log indicates that things get initialized correctly (?) at
> deployment:
>
> 2011-01-01 01:11:47,966 - INFO  - Configuring enterprise application:
> /home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2
> 2011-01-01 01:11:48,115 - INFO  - Configuring
> PersistenceUnit(name=testunit)
> 2011-01-01 01:11:48,127 - INFO  - Auto-creating a Resource with id 'Default
> JDBC DatabaseNonJta' of type 'DataSource for 'testunit'.
> 2011-01-01 01:11:48,127 - INFO  - Configuring Service(id=Default JDBC
> DatabaseNonJta, type=Resource, provider-id=Default JDBC Database)
> 2011-01-01 01:11:48,128 - INFO  - Creating Resource(id=Default JDBC
> DatabaseNonJta)
> 2011-01-01 01:11:48,148 - INFO  - Adjusting PersistenceUnit testunit
> <jta-data-source> to Resource ID 'Default JDBC Database' from 'jdbc/test'
> 2011-01-01 01:11:48,148 - INFO  - Adjusting PersistenceUnit testunit
> <non-jta-data-source> to Resource ID 'Default JDBC DatabaseNonJta' from
> 'null'
> 2011-01-01 01:11:48,164 - INFO  - Enterprise application
> "/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2"
> loaded.
> 2011-01-01 01:11:48,164 - INFO  - Assembling app:
> /home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2
> 2011-01-01 01:11:48,824 - INFO  - PersistenceUnit(name=testunit,
> provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider
> time 655ms
> 2011-01-01 01:11:48,913 - INFO  - Jndi(name=PersonResourceLocalBean) -->
> Ejb(deployment-id=PersonResource)
> 2011-01-01 01:11:48,959 - INFO  - Created Ejb(deployment-id=PersonResource,
> ejb-name=PersonResource, container=Default Stateless Container)
> 2011-01-01 01:11:48,959 - INFO  - Deployed
> Application(path=/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/jpatest2)
> 2011-01-01 01:11:49,201 - INFO  - Configuring enterprise application:
> /home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb
> 2011-01-01 01:11:49,232 - INFO  - Enterprise application
> "/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb"
> loaded.
> 2011-01-01 01:11:49,232 - INFO  - Assembling app:
> /home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb
> 2011-01-01 01:11:49,232 - INFO  - Deployed
> Application(path=/home/bjorn/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/openejb)
>
> I'm guessing a different implementation using separate classes for the bean
> and resource might work but I'm not really sure how to do that and would
> prefer the implementation as is described in
> http://java.net/jira/browse/JERSEY-230
>
> /Björn
>