Re: jpa provider

From: Gilberto C Andrade (gilbertoc..ecad.to.gov.br)
Date: Wed Jan 02 2008 - 15:02:24 EST

  • Next message: Andrus Adamchik: "Re: jpa provider"

    Hi, hope everyone is ok!

    (OBS.: I think this post is report e not a request!
            And sorry, it is a little long. )

    We are doing tests with annotated POJO and using orm (I mean using xml).
    This is done with the following persistence.xml file:

    > <?xml version="1.0" encoding="UTF-8"?>
    > <persistence version="1.0" 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">
    > <persistence-unit name="annotatedPU" transaction-type="RESOURCE_LOCAL">
    > <provider>org.apache.cayenne.jpa.Provider</provider>
    > <mapping-file>META-INF/orm.xml</mapping-file>
    > <class>com.gilbertoca.gfi.model.inventario.UnidadeMedida</class>
    > <class>com.gilbertoca.gfi.model.inventario.Produto</class>
    > <class>com.gilbertoca.gfi.model.inventario.Categoria</class>
    > <class>com.gilbertoca.gfi.model.inventario.Item</class>
    > <properties>
    > <property name="org.apache.cayenne.datasource.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
    > <property name="org.apache.cayenne.datasource.jdbc.url" value="jdbc:derby:gfi_db;create=true"/>
    > <property name="org.apache.cayenne.datasource.jdbc.username" value="gfi"/>
    > <property name="org.apache.cayenne.datasource.jdbc.password" value="value"/>
    > <property name="org.apache.cayenne.schema.create" value="false"/>
    > </properties>
    > </persistence-unit>
    > <persistence-unit name="metadataPU" transaction-type="RESOURCE_LOCAL">
    > <provider>org.apache.cayenne.jpa.Provider</provider>
    > <mapping-file>META-INF/inventario.xml</mapping-file>
    > <class>com.gilbertoca.gfi.model.inventario2.Categoria</class>
    > <properties>
    > <property name="org.apache.cayenne.datasource.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
    > <property name="org.apache.cayenne.datasource.jdbc.url" value="jdbc:derby:gfi_db;create=true"/>
    > <property name="org.apache.cayenne.datasource.jdbc.username" value="gfi"/>
    > <property name="org.apache.cayenne.datasource.jdbc.password" value="value"/>
    > <property name="org.apache.cayenne.schema.create" value="false"/>
    > </properties>
    > </persistence-unit>
    > </persistence-unit>
    > </persistence>

    The tests pass while using toplink and openjpa provider. And as you did
    see on last post, the cayenne Enhancer doesn't work (I used cayenne
    3.0M2 and cayenne 3.0-SNAPSHOT). But don't worry, I'm just trying to help!
    This way, while putting openjpa to enhance our POJOS, I could see that
    they using an maven ant pluging. So, I've tried it too, but I don't know
     if I'm using it correctly or if the shot was right:
    > <id>cayenne</id>
    > <build>
    > <plugins>
    > <plugin>
    > <artifactId>maven-antrun-plugin</artifactId>
    > <executions>
    > <execution>
    > <phase>process-classes</phase>
    > <configuration>
    > <tasks>
    > <java classname="org.apache.cayenne.enhancer.Enhancer"
    > classpathref="maven.runtime.classpath"
    > dir="target/classes" fork="true" />
    > </tasks>
    > </configuration>
    > <goals>
    > <goal>run</goal>
    > </goals>
    > </execution>
    > </executions>
    > </plugin>
    > </plugins>
    >
    > <!--plugins>
    > <plugin>
    > <groupId>org.apache.maven.plugins</groupId>
    > <artifactId>maven-surefire-plugin</artifactId>
    > <configuration>
    > <useSystemClassLoader>true</useSystemClassLoader>
    > <forkMode>once</forkMode>
    > <argLine>
    > -javaagent:${settings.localRepository}/org/apache/cayenne/cayenne-agent/${jpa_agent.version}/cayenne-agent-${jpa_agent.version}.jar
    > </argLine>
    > </configuration>
    > </plugin>
    > </plugins-->

    I'm using only the metadataPU persistence unit, which are using the
    <mapping-file>META-INF/inventario.xml</mapping-file> file:

    > <?xml version="1.0" encoding="UTF-8"?>
    > <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 http://incubator.apache.org/openjpa/orm http://incubator.apache.org/openjpa/xml/ns/persistence/openjpa_orm_1_0.xsd"
    > version="1.0">
    >
    > <persistence-unit-metadata>
    > <persistence-unit-defaults>
    > <schema>gfi</schema>
    > </persistence-unit-defaults>
    > </persistence-unit-metadata>
    > <entity class="com.gilbertoca.gfi.model.inventario2.Categoria">
    > <table name="CATEGORIA" schema="GFI"/>
    > <attributes>
    > <id name="cdCategoria">
    > <column name="CD_CATEGORIA" column-definition="INTEGER"/>
    > </id>
    > <basic name="nomeCategoria">
    > <column name="NOME_CATEGORIA" length="80"/>
    > </basic>
    > <basic name="descricaoCategoria">
    > <column name="DESCRICAO_CATEGORIA" length="255"/>
    > </basic>
    > <basic name="dtCadastro">
    > <column name="DT_CADASTRO"/>
    > </basic>
    > </attributes>
    > </entity>
    >
    > </entity-mappings>

    The results:

    > -------------------------------------------------------
    > T E S T S
    > -------------------------------------------------------
    > Running com.gilbertoca.gfi.service.PessoaServiceTest
    > [INFO] Provider - Extra PersistenceUnitInfo properties: null
    > [DEBUG] Configuration - added domain: metadataPU
    > [INFO] InstrumentingUnit - *** Adding transformer: org.apache.cayenne.jpa.instrument.UnitClassTransforme..abcc03
    > Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.729 sec <<< FAILURE!
    > ilbert..i-des05:~/dev/netbeans-config/workspace/gfi/core> cat target/surefire-reports/com.gilbertoca.gfi.service.PessoaServiceTest.txt
    > -------------------------------------------------------------------------------
    > Test set: com.gilbertoca.gfi.service.PessoaServiceTest
    > -------------------------------------------------------------------------------
    > Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.73 sec <<< FAILURE!
    > hello(com.gilbertoca.gfi.service.PessoaServiceTest) Time elapsed: 0.681 sec <<< ERROR!
    > javax.persistence.PersistenceException: No Persistence provider for EntityManager named metadataPU: Provider named org.apache.cayenne.jpa.Provider threw unexpected exception at create EntityManagerFactory:
    > java.lang.IllegalStateException
    > java.lang.IllegalStateException: Attempt to add a transformer failed - instrumentation is not initialized.
    > at org.apache.cayenne.jpa.instrument.InstrumentingUnit.addTransformer(InstrumentingUnit.java:69)
    > at org.apache.cayenne.jpa.Provider.createContainerEntityManagerFactory(Provider.java:243)
    > at org.apache.cayenne.jpa.Provider.createEntityManagerFactory(Provider.java:194)
    > at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
    > at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
    > at com.gilbertoca.gfi.service.PessoaServiceTest.setUp(PessoaServiceTest.java:32)
    > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    The interesting thing is that while using the old method
    (maven-surefire-plugin) to enhance the POJOs and using just the
    metadataPU persistence unit, the cayenne jpa try to enhance classes that
    don't exists on that persistence unit:
    > [INFO] Building jar: /tmp/surefirebooter6241.jar
    > *** CayenneAgent starting...
    >
    > -------------------------------------------------------
    > T E S T S
    > -------------------------------------------------------
    > Running com.gilbertoca.gfi.service.PessoaServiceTest
    > [INFO] Provider - Extra PersistenceUnitInfo properties: null
    > [DEBUG] Configuration - added domain: metadataPU
    > [INFO] InstrumentingUnit - *** Adding transformer: org.apache.cayenne.jpa.instrument.UnitClassTransforme..ae941
    > [INFO] UnitClassTransformer - Will transform managed class: com/gilbertoca/gfi/model/inventario/Item
    > [INFO] Enhancer - enhancing class com/gilbertoca/gfi/model/inventario/Item
    > [INFO] UnitClassTransformer - Will transform managed class: com/gilbertoca/gfi/model/inventario/UnidadeMedida
    > [INFO] Enhancer - enhancing class com/gilbertoca/gfi/model/inventario/UnidadeMedida
    > [INFO] UnitClassTransformer - Will transform managed class: com/gilbertoca/gfi/model/inventario/Produto
    > [INFO] Enhancer - enhancing class com/gilbertoca/gfi/model/inventario/Produto
    > Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 1.075 sec <<< FAILURE!

    > -------------------------------------------------------------------------------
    > Test set: com.gilbertoca.gfi.service.PessoaServiceTest
    > -------------------------------------------------------------------------------
    > Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 1.074 sec <<< FAILURE!
    > hello(com.gilbertoca.gfi.service.PessoaServiceTest) Time elapsed: 1.008 sec <<< ERROR!
    > javax.persistence.PersistenceException: No Persistence provider for EntityManager named metadataPU: Provider named org.apache.cayenne.jpa.Provider threw unexpected exception at create EntityManagerFactory:
    > java.lang.IllegalArgumentException
    > java.lang.IllegalArgumentException: Null id Produto.cd_produto
    > at org.apache.cayenne.jpa.bridge.DataMapConverter$JpaJoinColumnVisitor.onStartNode(DataMapConverter.java:454)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:92)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:113)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:113)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:118)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:113)
    > at org.apache.cayenne.util.TraversalUtil.traverse(TraversalUtil.java:80)
    > at org.apache.cayenne.jpa.bridge.DataMapConverter.toDataMap(DataMapConverter.java:95)
    > at org.apache.cayenne.jpa.Provider.createContainerEntityManagerFactory(Provider.java:248)
    > at org.apache.cayenne.jpa.Provider.createEntityManagerFactory(Provider.java:194)
    > at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
    > at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
    > at com.gilbertoca.gfi.service.PessoaServiceTest.setUp(PessoaServiceTest.java:32)
    > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    > at java.lang.reflect.Method.invoke(Method.java:585)

    Gilberto



    This archive was generated by hypermail 2.0.0 : Wed Jan 02 2008 - 15:16:00 EST