geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kevin Sutter <kwsut...@gmail.com>
Subject Re: @PersistenceContext not working
Date Wed, 22 Dec 2010 15:00:15 GMT
Hi sim085,
Even though the @PersistenceUnit and @PersistenceContext annotations are
defined by the JPA specification, the actual processing of these annotations
are performed by the application server.  These annotations signal to the
application server that some processing needs to be done between the app
server (container) and the jpa provider -- like the creation of an EMF
and/or EM.  And, then these instances get injected into the bytecodes of the
Stateless Session Bean and/or Servlet.

Thus, I am going to cross link this message over to the Geronimo Users forum
to see if they can help you out.

Thanks,
Kevin

On Wed, Dec 22, 2010 at 8:28 AM, sim085 <sim085@hotmail.com> wrote:

>
> Hello to all, I am having problems with @PersistenceContext. It seems that
> this is not initializing the EntityManager and therefore this is remaining
> null. My code is as follows;
>
> -----
> @PersistenceContext(unitName="TestApp")
> private EntityManager entityManager;
> …
> public User findUser(Long id){
>        User user = this.entityManager.find(User.class, id);
>        return user;
> }
> -----
>
>
> This code is in a Stateless EJB which is deployed as part of an EAR
> application. The EAR application also has a WAR file which makes use of the
> above code. [NOTE: I am not using the @PersistenceContext from a Servlet. I
> am using it from Stateless EJB. The Servlet calls this Stateless EJB. I am
> saying this because I read that @PersistenceContext should not be used from
> Servlets.]
>
> The problem is that after deployment I get a NullPointerException saying
> that entityManager has not been initialized. However if I change the code
> as
> follows everything works fine.
>
> -----
> @PersistenceContext(unitName="TestApp")
> private EntityManager entityManager;
> …
> public User findUser(Long id) {
>        if(this.entityManager == null){
>                EntityManagerFactory factory =
>                        Persistence.createEntityManagerFactory(
>                                "TestApp", System.getProperties());
>                this.entityManager = factory.createEntityManager();
>                System.out.println("EntityManager initialized using
> EntityManagerFactory");
>        }
>        User user = this.entityManager.find(User.class, id);
>        return user;
> }
> -----
>
>
> As can be seen from the above code I am initializing the
> EntityManagerFactory using Persistence.createEntityManagerFactory. I also
> tried initializing the EntityManagerFactory using @PersistenceUnit
> annotation but this does not work either. In other words it seems that JPA
> annotations are not working.
> I did a search over the Internet and I read that the problem could be that
> the annotations used as sub-modules of other modules (ex: Under the
> WEB-INF/lib folder of the WAR file) do not get their annotations processed.
> However I tried to counter this by putting my EJB module in the EAR file
> and
> deleteing the module from the WAR file which is also in the EAR file. The
> deployment works fine. However with the second code I still get the message
> “EntityManager initialized using EntityManagerFactory” which means that the
> @PersistenceContext was not processed.
> Does anyone know what I might be doing wrong!?
> My persistence.xml file is as follows. I am using RESOURCE_LOCAL (which
> mind
> you works on Geronimo but not on GlassFish) because of other problems
> related with using data sources.
>
> -----
>    <persistence-unit name="TestApp" transaction-type="RESOURCE_LOCAL">
>
>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>                <!--
>                        <jta-data-source>MyDatasource</jta-data-source>
>
>  <non-jta-data-source>MyNonDatasource</non-jta-data-source>
>                -->
>                <properties>
>                        <property name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(ForeignKeys=true)"/>
>                        <property name="openjpa.ConnectionURL"
> value="jdbc:derby://localhost:1527/MyDatabase"/>
>                        <property name="openjpa.ConnectionDriverName"
> value="org.apache.derby.jdbc.ClientDriver"/>
>                        <property name="openjpa.ConnectionUserName"
> value="admin"/>
>                        <property name="openjpa.ConnectionPassword"
> value="password"/>
>                        <property name="openjpa.Log"
> value="DefaultLevel=WARN, Tool=INFO"/>
>                        </properties>
>        </persistence-unit>
> </persistence>
> -----
>
> I do not know if this is a problem with Geronimo or OpenJPA. The reason I
> posted here is because I am using OpenJPA as my Provider and therefore I am
> assuming that OpenJPA is responsable to process the @PersistenceContext
> annotion. I am not sure of this. Sorry if I posted this in the wrong place.
> The @Stateless annotions however are being processed correctly.
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/PersistenceContext-not-working-tp5859331p5859331.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Mime
View raw message