You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Frank Schwarz <fr...@gmx.de> on 2008/03/14 10:12:21 UTC

Using JPA orm.xml with Cayenne3M3

Hi,

is it possible to declare mappings in a JPA conform orm.xml file with 
Cayenne3M3. Unfortunately, I have not been successful so far.

---%<--- META-INF/persistence.xml ----
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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" version="1.0">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.cayenne.jpa.Provider</provider>
        <mapping-file>META-INF/orm.xml</mapping-file>
        <properties>
...
        </properties>
    </persistence-unit>
</persistence>

---%<--- META-INF/orm.xml ----
<?xml version="1.0"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">
    <entity class="oopex.cayenne3.jpax.usecases.model.Person" 
name="Person" access="FIELD">
        <table name="PERSON" />
        <attributes>
            <id name="id">
                <generated-value strategy="SEQUENCE" />
            </id>
        </attributes>
    </entity>
</entity-mappings>

The error message is:
Exception in thread "main" java.lang.IllegalArgumentException: entity 
must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.checkEntityType(TypeCheckingEntityManager.java:64)
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown 
Source)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown Source)

Kind regards,
Frank

Re: Using JPA orm.xml with Cayenne3M3

Posted by Andrus Adamchik <an...@objectstyle.org>.
Thanks for opening a Jira. Will need to check it out.

Andrus

On Mar 14, 2008, at 7:12 PM, Frank Schwarz wrote:

> I did some debugging. EntityMapMergeProcessor#mergeOverride seems to  
> be the culprit. It is called from  
> EntityMapLoader#updateFromXML(PersistenceUnitInfo). As this method  
> is empty (at least in milestone 3) the entities declared in orm.xml  
> will get lost.
>
> Kind regards,
> Frank
>
> Andrus Adamchik schrieb:
>> Out of ideas.. What kind of packaging are you using? Is this a JAR,  
>> a WAR, an unpacked folder?
>>
>> Andrus
>
>


Re: Using JPA orm.xml with Cayenne3M3

Posted by Frank Schwarz <fr...@gmx.de>.
I did some debugging. EntityMapMergeProcessor#mergeOverride seems to be 
the culprit. It is called from 
EntityMapLoader#updateFromXML(PersistenceUnitInfo). As this method is 
empty (at least in milestone 3) the entities declared in orm.xml will 
get lost.

Kind regards,
Frank

Andrus Adamchik schrieb:
> Out of ideas.. What kind of packaging are you using? Is this a JAR, a 
> WAR, an unpacked folder?
>
> Andrus


Re: Using JPA orm.xml with Cayenne3M3

Posted by Andrus Adamchik <an...@objectstyle.org>.
Out of ideas.. What kind of packaging are you using? Is this a JAR, a  
WAR, an unpacked folder?

Andrus


On Mar 14, 2008, at 5:38 PM, Frank Schwarz wrote:
> Hi Andrus,
>
> unfortunately the problem remains the same. See trace below.
>
> Kind regards,
> Frank
>
> *** CayenneAgent starting with arguments: jpa-eager-load
> 14.03.2008 16:33:14 org.apache.cayenne.jpa.Provider  
> createEntityManagerFactory
> INFO: Extra PersistenceUnitInfo properties: {}
> 14.03.2008 16:33:14  
> org.apache.cayenne.jpa.instrument.InstrumentingUnit addTransformer
> INFO: *** Adding transformer:  
> org.apache.cayenne.jpa.instrument.UnitClassTransformer@1de3f2d
> 14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger  
> logPoolCreated
> INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
>       Driver class: org.h2.Driver
>       Min. connections in the pool: 1
>       Max. connections in the pool: 5
> 14.03.2008 16:33:14 org.apache.cayenne.jpa.Provider  
> createEntityManagerFactory
> INFO: Extra PersistenceUnitInfo properties: {}
> 14.03.2008 16:33:14  
> org.apache.cayenne.jpa.instrument.InstrumentingUnit addTransformer
> INFO: *** Adding transformer:  
> org.apache.cayenne.jpa.instrument.UnitClassTransformer@1feca64
> 14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger  
> logPoolCreated
> INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
>       Driver class: org.h2.Driver
>       Min. connections in the pool: 1
>       Max. connections in the pool: 5
> *** insert ***
> 14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger  
> logBeginTransaction
> INFO: --- transaction started.
> *** finished ***
> Exception in thread "main" java.lang.IllegalArgumentException:  
> entity must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager 
> .checkEntityType(TypeCheckingEntityManager.java:64)
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown  
> Source)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown  
> Source)
>
> Andrus Adamchik schrieb:
>> To ensure that the agent discovers all classes on startup, pass  
>> 'jpa-eager-load' parameter to the agent:
>>
>>   -javaagent:/path/cayenne-agent-3.0M3.jar=jpa-eager-load
>>
>> This makes startup slower, but all the entity classes will be  
>> guaranteed enhanced. This is missing from the docs, let me add it  
>> now.
>>
>> Andrus
>>
>> On Mar 14, 2008, at 4:45 PM, Frank Schwarz wrote:
>>
>
>


Re: Using JPA orm.xml with Cayenne3M3

Posted by Frank Schwarz <fr...@gmx.de>.
Hi Andrus,

unfortunately the problem remains the same. See trace below.

Kind regards,
Frank

*** CayenneAgent starting with arguments: jpa-eager-load
14.03.2008 16:33:14 org.apache.cayenne.jpa.Provider 
createEntityManagerFactory
INFO: Extra PersistenceUnitInfo properties: {}
14.03.2008 16:33:14 org.apache.cayenne.jpa.instrument.InstrumentingUnit 
addTransformer
INFO: *** Adding transformer: 
org.apache.cayenne.jpa.instrument.UnitClassTransformer@1de3f2d
14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger logPoolCreated
INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
        Driver class: org.h2.Driver
        Min. connections in the pool: 1
        Max. connections in the pool: 5
14.03.2008 16:33:14 org.apache.cayenne.jpa.Provider 
createEntityManagerFactory
INFO: Extra PersistenceUnitInfo properties: {}
14.03.2008 16:33:14 org.apache.cayenne.jpa.instrument.InstrumentingUnit 
addTransformer
INFO: *** Adding transformer: 
org.apache.cayenne.jpa.instrument.UnitClassTransformer@1feca64
14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger logPoolCreated
INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
        Driver class: org.h2.Driver
        Min. connections in the pool: 1
        Max. connections in the pool: 5
*** insert ***
14.03.2008 16:33:14 org.apache.cayenne.access.QueryLogger 
logBeginTransaction
INFO: --- transaction started.
*** finished ***
Exception in thread "main" java.lang.IllegalArgumentException: entity 
must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.checkEntityType(TypeCheckingEntityManager.java:64)
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown 
Source)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown Source)

Andrus Adamchik schrieb:
> To ensure that the agent discovers all classes on startup, pass 
> 'jpa-eager-load' parameter to the agent:
>
>    -javaagent:/path/cayenne-agent-3.0M3.jar=jpa-eager-load
>
> This makes startup slower, but all the entity classes will be 
> guaranteed enhanced. This is missing from the docs, let me add it now.
>
> Andrus
>
> On Mar 14, 2008, at 4:45 PM, Frank Schwarz wrote:
>


Re: Using JPA orm.xml with Cayenne3M3

Posted by Andrus Adamchik <an...@objectstyle.org>.
To ensure that the agent discovers all classes on startup, pass 'jpa- 
eager-load' parameter to the agent:

    -javaagent:/path/cayenne-agent-3.0M3.jar=jpa-eager-load

This makes startup slower, but all the entity classes will be  
guaranteed enhanced. This is missing from the docs, let me add it now.

Andrus

On Mar 14, 2008, at 4:45 PM, Frank Schwarz wrote:

> Hi Andrus,
>
> the complete trace looks like this:
>
> *** CayenneAgent starting...
> 14.03.2008 10:04:41 org.apache.cayenne.jpa.Provider  
> createEntityManagerFactory
> INFO: Extra PersistenceUnitInfo properties: {}
> 14.03.2008 10:04:42  
> org.apache.cayenne.jpa.instrument.InstrumentingUnit addTransformer
> INFO: *** Adding transformer:  
> org.apache.cayenne.jpa.instrument.UnitClassTransformer@ab95e6
> 14.03.2008 10:04:42 org.apache.cayenne.access.QueryLogger  
> logPoolCreated
> INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
>       Driver class: org.h2.Driver
>       Min. connections in the pool: 1
>       Max. connections in the pool: 5
> *** insert ***
> 14.03.2008 10:04:42 org.apache.cayenne.access.QueryLogger  
> logBeginTransaction
> INFO: --- transaction started.
> *** finished ***
> Exception in thread "main" java.lang.IllegalArgumentException:  
> entity must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager 
> .checkEntityType(TypeCheckingEntityManager.java:64)
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown  
> Source)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown  
> Source)
> Java Result: 1
>
> If you like, I can provide you the sample.
>
> Regards,
> Frank
>
> Andrus Adamchik schrieb:
>> Hi Frank,
>>
>> is the application started with cayenne-agent?
>>
>> Andrus
>>
>> On Mar 14, 2008, at 11:12 AM, Frank Schwarz wrote:
>>
>>> Hi,
>>>
>>> is it possible to declare mappings in a JPA conform orm.xml file  
>>> with Cayenne3M3. Unfortunately, I have not been successful so far.
>>>
>>> ---%<--- META-INF/persistence.xml ----
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <persistence 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 
>>> " version="1.0">
>>>  <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
>>>      <provider>org.apache.cayenne.jpa.Provider</provider>
>>>      <mapping-file>META-INF/orm.xml</mapping-file>
>>>      <properties>
>>> ...
>>>      </properties>
>>>  </persistence-unit>
>>> </persistence>
>>>
>>> ---%<--- META-INF/orm.xml ----
>>> <?xml version="1.0"?>
>>> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/ 
>>> orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd 
>>> " version="1.0">
>>>  <entity class="oopex.cayenne3.jpax.usecases.model.Person"  
>>> name="Person" access="FIELD">
>>>      <table name="PERSON" />
>>>      <attributes>
>>>          <id name="id">
>>>              <generated-value strategy="SEQUENCE" />
>>>          </id>
>>>      </attributes>
>>>  </entity>
>>> </entity-mappings>
>>>
>>> The error message is:
>>> Exception in thread "main" java.lang.IllegalArgumentException:  
>>> entity must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
>>>      at  
>>> org 
>>> .apache 
>>> .cayenne 
>>> .jpa 
>>> .TypeCheckingEntityManager 
>>> .checkEntityType(TypeCheckingEntityManager.java:64)
>>>      at  
>>> org 
>>> .apache 
>>> .cayenne 
>>> .jpa 
>>> .TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java: 
>>> 150)
>>>      at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown  
>>> Source)
>>>      at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown  
>>> Source)
>>>
>>> Kind regards,
>>> Frank
>>>
>>
>>
>>
>
>


Re: Using JPA orm.xml with Cayenne3M3

Posted by Frank Schwarz <fr...@gmx.de>.
Hi Andrus,

the complete trace looks like this:

*** CayenneAgent starting...
14.03.2008 10:04:41 org.apache.cayenne.jpa.Provider 
createEntityManagerFactory
INFO: Extra PersistenceUnitInfo properties: {}
14.03.2008 10:04:42 org.apache.cayenne.jpa.instrument.InstrumentingUnit 
addTransformer
INFO: *** Adding transformer: 
org.apache.cayenne.jpa.instrument.UnitClassTransformer@ab95e6
14.03.2008 10:04:42 org.apache.cayenne.access.QueryLogger logPoolCreated
INFO: Created connection pool: jdbc:h2:tcp://localhost:9092/sample
        Driver class: org.h2.Driver
        Min. connections in the pool: 1
        Max. connections in the pool: 5
*** insert ***
14.03.2008 10:04:42 org.apache.cayenne.access.QueryLogger 
logBeginTransaction
INFO: --- transaction started.
*** finished ***
Exception in thread "main" java.lang.IllegalArgumentException: entity 
must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.checkEntityType(TypeCheckingEntityManager.java:64)
        at 
org.apache.cayenne.jpa.TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown 
Source)
        at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown Source)
Java Result: 1

If you like, I can provide you the sample.

Regards,
Frank

Andrus Adamchik schrieb:
> Hi Frank,
>
> is the application started with cayenne-agent?
>
> Andrus
>
> On Mar 14, 2008, at 11:12 AM, Frank Schwarz wrote:
>
>> Hi,
>>
>> is it possible to declare mappings in a JPA conform orm.xml file with 
>> Cayenne3M3. Unfortunately, I have not been successful so far.
>>
>> ---%<--- META-INF/persistence.xml ----
>> <?xml version="1.0" encoding="UTF-8"?>
>> <persistence 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" 
>> version="1.0">
>>   <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
>>       <provider>org.apache.cayenne.jpa.Provider</provider>
>>       <mapping-file>META-INF/orm.xml</mapping-file>
>>       <properties>
>> ...
>>       </properties>
>>   </persistence-unit>
>> </persistence>
>>
>> ---%<--- META-INF/orm.xml ----
>> <?xml version="1.0"?>
>> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
>> http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">
>>   <entity class="oopex.cayenne3.jpax.usecases.model.Person" 
>> name="Person" access="FIELD">
>>       <table name="PERSON" />
>>       <attributes>
>>           <id name="id">
>>               <generated-value strategy="SEQUENCE" />
>>           </id>
>>       </attributes>
>>   </entity>
>> </entity-mappings>
>>
>> The error message is:
>> Exception in thread "main" java.lang.IllegalArgumentException: entity 
>> must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
>>       at 
>> org.apache.cayenne.jpa.TypeCheckingEntityManager.checkEntityType(TypeCheckingEntityManager.java:64) 
>>
>>       at 
>> org.apache.cayenne.jpa.TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150) 
>>
>>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown 
>> Source)
>>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown 
>> Source)
>>
>> Kind regards,
>> Frank
>>
>
>
>


Re: Using JPA orm.xml with Cayenne3M3

Posted by Andrus Adamchik <an...@objectstyle.org>.
Hi Frank,

is the application started with cayenne-agent?

Andrus

On Mar 14, 2008, at 11:12 AM, Frank Schwarz wrote:

> Hi,
>
> is it possible to declare mappings in a JPA conform orm.xml file  
> with Cayenne3M3. Unfortunately, I have not been successful so far.
>
> ---%<--- META-INF/persistence.xml ----
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence 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 
> " version="1.0">
>   <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
>       <provider>org.apache.cayenne.jpa.Provider</provider>
>       <mapping-file>META-INF/orm.xml</mapping-file>
>       <properties>
> ...
>       </properties>
>   </persistence-unit>
> </persistence>
>
> ---%<--- META-INF/orm.xml ----
> <?xml version="1.0"?>
> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"  
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd 
> " version="1.0">
>   <entity class="oopex.cayenne3.jpax.usecases.model.Person"  
> name="Person" access="FIELD">
>       <table name="PERSON" />
>       <attributes>
>           <id name="id">
>               <generated-value strategy="SEQUENCE" />
>           </id>
>       </attributes>
>   </entity>
> </entity-mappings>
>
> The error message is:
> Exception in thread "main" java.lang.IllegalArgumentException:  
> entity must be Persistent: oopex.cayenne3.jpax.usecases.model.Person
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager 
> .checkEntityType(TypeCheckingEntityManager.java:64)
>       at  
> org 
> .apache 
> .cayenne 
> .jpa 
> .TypeCheckingEntityManager.persist(TypeCheckingEntityManager.java:150)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.insert(Unknown  
> Source)
>       at oopex.cayenne3.jpax.usecases.HalloWorldMain.main(Unknown  
> Source)
>
> Kind regards,
> Frank
>