tags:

views:

69

answers:

1

Update 3: Addes following code to the pom so openjpa could find the persistence.xml file. Got some query errors left but I finally got openjpa to work :).

<resources>
  <resource>
    <directory>src/main/java</directory>
    <includes>
      <include>**/*.xml</include>
    </includes>
  </resource>
</resources>

Update2: Set up maven plugin for openjpa in my pom. Got a nice new error now while running my mavan build. I do have a folder named META-INF in my source folder containing persistence.xml and openjpa.xml.

[ERROR] Failed to execute goal org.codehaus.mojo:openjpa-maven-plugin:1.1:enhance (enhancer) on project scarletreports: Execution enhancer of goal org.codehaus.mojo:openjpa-maven-plugin:1.1:enhance failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null). This might mean that no configuration properties were found. Ensure that you have a META-INF/persistence.xml file, that it is available in your classpath, or that the properties file you are using for configuration is available. If you are using Ant, please see the <properties> or <propertiesFile> attributes of the task's nested <config> element. This can also occur if your OpenJPA distribution jars are corrupt, or if your security policy is overly strict. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:openjpa-maven-plugin:1.1:enhance (enhancer) on project scarletreports: Execution enhancer of goal org.codehaus.mojo:openjpa-maven-plugin:1.1:enhance failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null). This might mean that no configuration properties were found. Ensure that you have a META-INF/persistence.xml file, that it is available in your classpath, or that the properties file you are using for configuration is available. If you are using Ant, please see the <properties> or <propertiesFile> attributes of the task's nested <config> element. This can also occur if your OpenJPA distribution jars are corrupt, or if your security policy is overly strict.
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:593)

pom:

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>openjpa-maven-plugin</artifactId>
        <version>1.1</version>
        <configuration>
          <includes>**/jpa/**/*.class</includes>
          <addDefaultConstructor>true</addDefaultConstructor>
          <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
        </configuration>
        <executions>
          <execution>
            <id>enhancer</id>
            <phase>process-classes</phase>
            <goals>
              <goal>enhance</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

Update: appears that persistence.xml isn't included in the war file. Still running a local test from eclipse isn't working either. Placing the persitence.xml manually in the war gives the next error. My guess is that i miss some goals in my pom. I only got this in my pom in relation to openjpa.

<!-- include open jpa for connection with rational databases -->
    <dependency>
      <groupId>org.apache.openjpa</groupId>
      <artifactId>openjpa-all</artifactId>
      <version>2.0.1</version>
    </dependency>

Old question:

I have a problem using openjpa in my web application. I get the following error.

<openjpa-2.0.1-r422266:989424 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
 org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:76)

I can't figure out why i get this message since the property is defined in the config and the driver is included with maven (and it is deployed with my war file). This is my openjpa connection code.

public class UserManagerFactory {
 private EntityManagerFactory emf;
 private EntityManager em;

 public void initEM() {
  emf = Persistence.createEntityManagerFactory("localDB");
  em = emf.createEntityManager();
 }

 public User getUser() {
  initEM();
  List<User> results = em.createQuery("select u from users as u", User.class).getResultList();
  closeEM();
  return results.get(0);
 }

 public void closeEM() {
  em.close();
  emf.close();
 }
}

And this is my persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"&gt;
 <persistence-unit name="localDB" transaction-type="RESOURCE_LOCAL">
  <class>package.User</class>
  <properties>
   <!-- enable warnings for debugging -->
   <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
   <!-- connection properties -->
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost/test"/>
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
            <property name="openjpa.ConnectionUserName" value="root"/>
            <property name="openjpa.ConnectionPassword" value=""/>

  </properties>
 </persistence-unit>
</persistence>
A: 

I do have a folder named META-INF in my source folder containing persistence.xml and openjpa.xml.

That's not where resources are supposed to be when using Maven, resources are supposed to go under src/main/resources i.e. something like this:

.
|-- src
|   |-- main
|   |   |-- java
|   |   |   `-- ...
|   |   `-- resources
|   |       `-- META-INF
|   |           |-- openjpa.xml
|   |           `-- persistence.xml
|   `-- test
|       |-- java
|       |   `-- ...
|       `-- resources
|           `-- ...
`-- pom.xml

If you follow the convention, there is nothing to do. If you don't, you'll need to add some explicit configuration (including for tests). I suggest using the defaults.

Pascal Thivent
Thanks for the info. The original project wasn't an maven project and had some other structure. I'm refactoring it right away.
Mark Baijens
@Mark You're welcome. Glad it was useful.
Pascal Thivent
Your solution works great for maven/openjpa but eclipse isn't happy anymore. Eclipse expects the file in the build path. I can suppress the error with some preference in eclipse but i can't find an option to set the correct path so eclipse can validate the xml file. Got any ideas?
Mark Baijens
@Mark It also works with Eclipse. What are you using for the Maven integration?
Pascal Thivent
I'm using m2eclipse plugin
Mark Baijens
@Mark The standard Maven layout is definitely supported by m2eclipse. Update your project configuration (*right-click* on the project then *Maven* > *Update Project Configuration*).
Pascal Thivent