You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Vincenzo Brancato <vi...@googlemail.com> on 2012/03/26 11:32:41 UTC

JPA Enhancement with Eclipse and Ant: Class not found Exception

Hello,

I am new to openJPA. In the past I developed a few applications with
EclipseLink and Glassfish. My new task ist to port my application to Tomcat
and use openJPA. To understand openJPA I wrote a little test application
and I am getting crazy. First I used the Eclipse openJPA Plugin. This
worked partially. I was able to read from database and manipulate some
data. Then I googled a few errors I got and discovered that I need
buildtime enhancement. I have two classes: Todo.java and Todo_java. First
is my Managed Bean. The second class is my persistent Entity. Both classes
are annotated. I am using an persistence.xml that you can see here:

<?xml version="1.0" encoding="UTF-8" ?>
<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_2_0.xsd"
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="TODO" transaction-type="RESOURCE_LOCAL">

        <class>openJPA.Todo_</class>

        <properties>
            <!-- Authentifizierungsinformationen zum Aufschalten auf die
Datenbank. -->
            <property name="openjpa.ConnectionDriverName"
value="oracle.jdbc.driver.OracleDriver" />
            <property name="openjpa.ConnectionURL"
                value="jdbc:oracle:thin:@12.235.789.123:1523:Test" />
            <property name="openjpa.ConnectionUserName" value="XXX" />
            <property name="openjpa.ConnectionPassword" value="XXX" />

            <property name="openjpa.Log" value="DefaultLevel=TRACE"/>
        </properties>

    </persistence-unit>
</persistence>



This is my enhance.xml:



<?xml version="1.0" encoding="UTF-8"?>
<project name="testJSF">

    <path id="jpa.enhancement.classpath">
        <pathelement location="build"/>

        <!-- lib contains all of the jars that came with the OpenJPA binary
download -->
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>


    <target name="enhance">
        <!-- define the openjpac task -->
        <taskdef name="openjpac"
classname="org.apache.openjpa.ant.PCEnhancerTask">
            <classpath refid="jpa.enhancement.classpath"/>
        </taskdef>

        <!-- invoke enhancer the enhancer -->
        <openjpac>
            <config propertiesFile="src/META-INF/persistence.xml" />
            <classpath refid="jpa.enhancement.classpath"/>
            <fileset dir="build">
                <include name="**/*.class" />
            </fileset>
        </openjpac>
        <echo message="Enhancing complete."/>
    </target>

</project>

First the class "Todo_" was not found while building. Later I added
<include name="**/*.class" /> and that error went away. But now I get this
error:


Buildfile: C:\Users\XXX\EclipseWorkspace\testJSF\enhance.xml

enhance:
    [openjpac] 12  TODO  TRACE  [Worker-74] openjpa.Runtime - Setting the
following properties from
"file:/C:/Users/XXX/EclipseWorkspace/testJSF/src/META-INF/persistence.xml"
into configuration: {openjpa.ConnectionPassword=dimsdev,
openjpa.ConnectionDriverName=oracle.jdbc.driver.OracleDriver,
openjpa.MetaDataFactory=jpa(Types=openJPA.Todo_),
openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0,
openjpa.ConnectionUserName=DIMSDEV,
openjpa.ConnectionURL=jdbc:oracle:thin:@12.235.789.123:1523:Test,
openjpa.Id=TODO}
    [openjpac] 38  TODO  TRACE  [Worker-74] openjpa.Runtime - No cache
marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
    [openjpac] 425  TODO  TRACE  [Worker-74] openjpa.Runtime - No cache
marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
    [openjpac] java.lang.IllegalArgumentException:
java.lang.ClassNotFoundException: beans.TodoBean
    [openjpac]     at serp.util.Strings.toClass(Strings.java:164)
    [openjpac]     at serp.util.Strings.toClass(Strings.java:108)
    [openjpac]     at
org.apache.openjpa.lib.meta.ClassArgParser.parseTypes(ClassArgParser.java:164)
    [openjpac]     at
org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:4779)
    [openjpac]     at
org.apache.openjpa.ant.PCEnhancerTask.executeOn(PCEnhancerTask.java:89)
    [openjpac]     at
org.apache.openjpa.lib.ant.AbstractTask.execute(AbstractTask.java:171)
    [openjpac]     at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    [openjpac]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
    [openjpac]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
    [openjpac]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    [openjpac]     at java.lang.reflect.Method.invoke(Unknown Source)
    [openjpac]     at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    [openjpac]     at org.apache.tools.ant.Task.perform(Task.java:348)
    [openjpac]     at org.apache.tools.ant.Target.execute(Target.java:390)
    [openjpac]     at
org.apache.tools.ant.Target.performTasks(Target.java:411)
    [openjpac]     at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    [openjpac]     at
org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    [openjpac]     at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    [openjpac]     at
org.eclipse.ant.internal.core.ant.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    [openjpac]     at
org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    [openjpac]     at
org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:665)
    [openjpac]     at
org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:498)
    [openjpac]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
    [openjpac]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
    [openjpac]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    [openjpac]     at java.lang.reflect.Method.invoke(Unknown Source)
    [openjpac]     at org.eclipse.ant.core.AntRunner.run(AntRunner.java:378)
    [openjpac]     at
org.eclipse.ant.internal.launching.launchConfigurations.AntLaunchDelegate.runInSameVM(AntLaunchDelegate.java:321)
    [openjpac]     at
org.eclipse.ant.internal.launching.launchConfigurations.AntLaunchDelegate.launch(AntLaunchDelegate.java:274)
    [openjpac]     at
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:854)
    [openjpac]     at
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:703)
    [openjpac]     at
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:696)
    [openjpac]     at
org.eclipse.core.externaltools.internal.model.ExternalToolBuilder.launchBuild(ExternalToolBuilder.java:181)
    [openjpac]     at
org.eclipse.core.externaltools.internal.model.ExternalToolBuilder.doBuildBasedOnScope(ExternalToolBuilder.java:169)
    [openjpac]     at
org.eclipse.core.externaltools.internal.model.ExternalToolBuilder.build(ExternalToolBuilder.java:88)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
    [openjpac]     at
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
    [openjpac]     at
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
    [openjpac]     at
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
    [openjpac]     at
org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:513)
    [openjpac]     at
org.eclipse.core.internal.resources.Workspace.build(Workspace.java:422)
    [openjpac]     at
org.eclipse.ui.actions.GlobalBuildAction$1.run(GlobalBuildAction.java:180)
    [openjpac]     at
org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
    [openjpac] 464  TODO  TRACE  [Worker-74] openjpa.MetaData - Clearing
metadata repository "org.apache.openjpa.meta.MetaDataRepository@1da7c60".

BUILD FAILED
C:\Users\XXX\EclipseWorkspace\testJSF\enhance.xml:21:
java.lang.IllegalArgumentException: java.lang.ClassNotFoundException:
beans.TodoBean

Total time: 2 seconds

Why do I get this error? Now I assume that my entity "Todo_" was found by
the builder. But the builder wants to enhance my ManagedBean "Todo". Ist
this required? I mentioned only the "Todo_" class in my persistence.xml and
only the "Todo_" class is annotated as Entity. What should I do for getting
this little application (my first application) running.

Thanks in advance for your help
Steve