I'm trying to get a project using OpenJPA 1.2.1 moving. I'm having
trouble trying to do enhancement at build time. I'm having other
problems with enhancement at load time, so I would think I could get
more information if I do this at build time.
In the following code excerpts, some things are replaced with "<<>>"
wrappers, for paranoia's sake.
The following is the relevant part of my build.xml:
----------
<path id="enhance.classpath">
<pathelement location="${openjpa.jar}"/>
<pathelement location="${jpa.jar}"/>
<pathelement location="${jta.jar}"/>
<pathelement location="${commons-lang.jar}"/>
<pathelement location="${serp.jar}"/>
<pathelement location="src"/>
<pathelement location="build/classes"/>
</path>
<taskdef classpathref="enhance.classpath" name="openjpac"
classname="org.apache.openjpa.ant.PCEnhancerTask"/>
<target name="enhance.classes">
<openjpac directory="build/enhancedClasses">
<fileset dir="build/classes">
<include name="**/domain/*.class"/>
</fileset>
</openjpac>
</target>
---------------
Following is my "META-INF/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="<<mypersistenceunit>>"
transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provid
er>
<jta-data-source>jdbc/catalog</jta-data-source>
<mapping-file><<filepath>>/domain/orm.xml</mapping-file>
<properties>
<property name="openjpa.Log" value="DefaultLevel=TRACE"/>
</properties>
</persistence-unit>
</persistence>
----------------
Following is my "domain/orm.xml" 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"
version="1.0">
<description><<application name>></description>
<package><<packagepath>>.domain</package>
<entity name="Catalog" class="<<packagepath>>.domain.Catalog">
</entity>
</entity-mappings>
----------------
The following is my build output:
----------------
16 dynamicContent TRACE [main] openjpa.Runtime - Setting the
following properties from
"file:/c:/Documents%20and%20Settings/<<pathtoproject>>/src/META-INF/pers
istence.xml" into configuration: {openjpa.Log=DefaultLevel=TRACE,
openjpa.MetaDataFactory=jpa(Resources=<<packagepath>>/domain/orm.xml),
javax.persistence.provider=org.apache.openjpa.persistence.PersistencePro
viderImpl, openjpa.ConnectionFactoryMode=managed,
openjpa.TransactionMode=managed,
openjpa.ConnectionFactoryName=jdbc/catalog, openjpa.Id=dynamicContent}
32 dynamicContent TRACE [main] openjpa.Runtime - No cache marshaller
found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
188 dynamicContent TRACE [main] openjpa.Runtime - No cache marshaller
found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
java.lang.IllegalArgumentException: java.lang.ClassNotFoundException:
<<packagepath>>.domain.Catalog
---------------
The "src" classpath entry is where it finds my
"META-INF/persistence.xml" (which is shown in the build output).
The "build/classes" classpath entry contains (at least)
"<<packagepath>>.domain.Catalog.class".
I don't understand why it's failing to find the domain class.
Another problem I'm having is that I don't even get this far when I run
the Ant task from Eclipse. Instead, I just get the following:
---------------
enhance.classes:
BUILD FAILED
<<filepath>>\build.xml:50: java.lang.NoClassDefFoundError:
org/apache/openjpa/lib/util/ParseException :
org/apache/commons/lang/exception/NestableRuntimeException
---------------
Line 50 is the "openjpac" call.