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
>