Kaps
Kaps

Reputation: 21

OpenJPA + MySQL issue

I have been using OpenJPA with MySQL. Here is my persistence.xml file.

<?xml version="1.0" encoding="UTF-8"?>
<!--
  For DB connectivity  
   -->
      <persistence version="1.0">
        <persistence-unit name="jpa">
          <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
           <class>com.Login</class>
       </persistence-unit>

       <properties>
     <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/jpa"/>
          <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
      <property name="openjpa.ConnectionUserName" value="root"/>
      <property name="openjpa.ConnectionPassword" value="root"/>
      <property name="openjpa.jdbc.DBDictionary"  value="mysql(SimulateLocking=true)"/>
    <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
</properties>

      </persistence>

When I am executing my Java class, I am getting an exception which is given below. The same code is working fine if I use hibernate and change configuration in persistence.xml, But it is not working in OpenJPA. Can anyone help to solve this?

Exception in thread "main" javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "jpa" after trying the following discovered implementations: org.apache.openjpa.persistence.PersistenceProviderImpl from provider: org.apache.openjpa.persistence.PersistenceProviderImpl
    at javax.persistence.Persistence.createPersistenceException(Persistence.java:244)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:186)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:72)
    at com.JPALogin.main(JPALogin.java:26)
Caused by: <openjpa-2.2.0-r422266:1244990 nonfatal general error> org.apache.openjpa.util.GeneralException: org.xml.sax.SAXException: file:/E:/work/JPAPlain/build/classes/META-INF/persistence.xml [Location: Line: 5, C: 28]: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'persistence'.
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:427)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:347)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:324)
    at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:297)
    at org.apache.openjpa.persistence.PersistenceProductDerivation$ConfigurationParser.parse(PersistenceProductDerivation.java:772)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.parseResources(PersistenceProductDerivation.java:556)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:522)
    at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:336)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:86)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:153)
    at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:62)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:152)
    ... 2 more

Upvotes: 0

Views: 3315

Answers (2)

Rick
Rick

Reputation: 3840

How about you try something like this?

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <!-- For DB connectivity -->
    <persistence-unit name="jpa">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>com.Login</class>
        <properties>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/jpa" />
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
                    <property name="openjpa.ConnectionUserName" value="root" />
                    <property name="openjpa.ConnectionPassword" value="root" />
                    <property name="openjpa.jdbc.DBDictionary" value="mysql(SimulateLocking=true)" />
                    <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
                </properties>
    </persistence-unit>
</persistence>

Upvotes: 1

Raedwald
Raedwald

Reputation: 48684

SAXParseException: cvc-elt.1: Cannot find the declaration of element 'persistence'. at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource

I can't be sure, but it looks like the XML parser of your persistence.xml file is trying to validate the XML against a DTD, and it is complaining because it can't get a (useful) DTD. You might want to change the first line of your XML file to the following:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

I would not expect an invalid XML file or missing DTD to cause the parser to crash with a mysterious exception. So if that is the cause of the problem, I'd say the persistence provider code had a bug in it. I'd expect a more useful exception, with a message saying "invalid XML", or some such.

Upvotes: 0

Related Questions