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