tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Blevins <david.blev...@visi.com>
Subject Re: Override PersistenceContext
Date Fri, 20 Feb 2009 07:45:51 GMT

On Feb 16, 2009, at 5:13 AM, <Thomas.TH.Hamacher@partner.bmw.ch> <Thomas.TH.Hamacher@partner.bmw.ch

 > wrote:

> Hi @all,
>
> I´d like to override the settings for the PersistenceContext, but  
> somehow it does not work.
> My Scenario is as follows: I´ve got a REFERENCED JAR and my local  
> project. The referenced jar contains some stateless services, with  
> an annotated EntityManager pointing to the default  
> PersistenceContext without declaring a unitName.
>
> Then I´ve got my project, which also has it´s own persistence.xml  
> and some services. As there are 2 persistence-units-defintions now,  
> the services from the referenced as well as those from my local  
> project fail to start, because injection does not work anymore. So  
> far so good! So I decided to override the persistenceUnit from the  
> services in the referencedJar and point them to a specific  
> persistence-unit-name.
>

The override looks perfect and I hacked up a test case to verify the  
overriding occurs as expected and all was fine.  So there must be  
something else going on here.

When we process annotations we actually update the descriptor that  
comes with the application and it is possible to set a flag so that it  
will be written back to disk allowing you to see the final and  
definitive set of metadata.  Set the 'openejb.descriptors.output' flag  
to 'true' and scan the log output for the paths to the update ejb- 
jar.xml file(s).

If what is going on doesn't become obvious, post the log output as  
well as the generated ejb-jar.xml.

-David


>
> This is my business class from the referenced jar (where  
> CustomerManager is it´s local interface annotated with @Local):
> -----------------------------------------------------------------------------
> package company;
>
> @Stateless
> public class CustomerManagerImpl implements CustomerManager {
>
> ...
>        @PersistenceContext
>        private EntityManager entityManager;
> ...
> }
>
> -----------------------------------------------------------------------------
>
> Now I included an ejb-jar.xml in my /classes/META-INF directory  
> within my local project and redefined the EntityManager as follows:
>
>
> -----------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
>                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd

> "
>                version="3.0"
>                metadata-complete="true" >
>        <enterprise-beans>
>                <session>
>                        <ejb-name>CustomerManagerImpl</ejb-name>
>                        <business-local>company.CustomerManager</ 
> business-local>
>                        <ejb-class>company.CustomerManagerImpl</ejb- 
> class>
>                        <session-type>Stateless</session-type>
>                        <persistence-context-ref>
>                                <persistence-context-ref- 
> name>company.CustomerManagerImpl/entityManager</persistence-context- 
> ref-name>
>                                <persistence-unit-name>IisTestPU</ 
> persistence-unit-name>
>                        </persistence-context-ref>
>                </session>
>        </enterprise-beans>
> </ejb-jar>
> -----------------------------------------------------------------------------
>
> If I put anything wrong in this ejb-jar.xml I always receive an  
> error. So I assume, that the ejb-jar is interpreted correctly, but  
> anyways I receive an error when booting openEJB.
>
> ERROR - FAIL ... CustomerManagerImpl:   The persistence unit "" does  
> not exist.  Update the "entityManager" PersistenceContext ref to one  
> of the avail
> able units [CleoServicePU, IisTestPU] or declare the unit in a  
> persistence.xml like the following:<persistence xmlns="http://java.sun.com/xml/ns/persi
> stence" version="1.0"><persistence-unit name=""><jta-data- 
> source>java:openejb/Resource/myDataSource</jta-data-source><non-jta- 
> data-source>java:openejb
> /Resource/myUnmanagedDataSource</non-jta-data- 
> source><properties><property name="openjpa.jdbc.SynchronizeMappings"  
> value="buildSchema(ForeignKeys=true
> )"/></properties></persistence-unit></persistence>
>
>
> Did I miss anything?
>
> Thomas
>


Mime
View raw message