Hi Christian,
You might have a typo in persistence.xml. The error you're seeing happens
because OpenJPA can't get a connection to the database.
Specifically it looks like you're missing the // in
jdbc:mysql://localhost:3306/colibrits
<property
name="openjpa.ConnectionURL"
value="jdbc:mysql:localhost:3306/colibrits"/>
It's a weird error message though, I would have expected something like this
:
<openjpa-1.1.0-SNAPSHOT-r420667:605679M nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: There were errors
initializing your configuration: <openjpa-1.1.0-SNAPSHOT-r420667:605679M
fatal store error> org.apache.openjpa.util.StoreException: Cannot create
JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL
'jdbc:mysql:localhost:3306/schematest'
at org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
DataSourceFactory.java:237)
at
org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(
JDBCConfigurationImpl.java:683)
<snip>
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC
driver of class 'com.mysql.jdbc.Driver' for connect URL
'jdbc:mysql:localhost:3306/schematest'
at org.apache.commons.dbcp.BasicDataSource.createDataSource(
BasicDataSource.java:780)
at org.apache.commons.dbcp.BasicDataSource.getConnection(
BasicDataSource.java:540)
at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(
DelegatingDataSource.java:112)
at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(
DecoratingDataSource.java:93)
at org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
DataSourceFactory.java:229)
... 27 more
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:243)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(
BasicDataSource.java:773)
Could you try adding in the // and see if that resolves the problem?
-Mike
On Dec 20, 2007 12:26 PM, Christian Eugster <[EMAIL PROTECTED]>
wrote:
> Hi, I am new to openjpa and did not find any answer to my problem googling
> and searching the mail-archives:
>
> I try to run a program using openjpa to connect to a mysql server. The
> configuration file is as follows (omitting the comments):
>
> **********************************
> PERSISTENCE.XML
> **********************************
> <?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 C:\Projekte\Eclipse
> 3.x\ColibriTS\ch.eugster.colibri.core\META-INF\persistence_1_0.xsd">
> <persistence-unit name="colibri" transaction-type="RESOURCE_LOCAL">
> <provider>
> org.apache.openjpa.persistence.PersistenceProviderImpl
> </provider>
> <mapping-file>orm.xml</mapping-file>
> <!-- <class>ch.eugster.colibri.core.db.tables.User</class> -->
> <properties>
> <property
> name="openjpa.ConnectionURL"
> value="jdbc:mysql:localhost:3306/colibrits"/>
> <property
> name="openjpa.ConnectionDriverName"
> value="com.mysql.jdbc.Driver"/>
> <property
> name="openjpa.ConnectionUserName"
> value="colibri"/>
> <property
> name="openjpa.ConnectionPassword"
> value="colibri"/>
> <property
> name="dialect"
> value="org.apache.openjpa.jdbc.sql.MySQLDictionary"/>
> </properties>
> </persistence-unit>
> </persistence>
>
> As you can see I tried with <mapping-file> and <class> tags, both did not
> work. The mappingfile looks like this:
>
> **********************************
> ORM.XML
> **********************************
> <?xml version="1.0" encoding="UTF-8"?>
> <orm:entity-mappings version="1.0" xmlns:orm="
> 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 orm_1_0.xsd ">
> <orm:mapped-superclass
> class="ch.eugster.colibri.core.db.tables.BasicTable"
> access="PROPERTY"
> metadata-complete="true">
> <orm:attributes>
> <orm:id name="id">
> <orm:generated-value strategy="AUTO"
> /></orm:id>
> <orm:basic name="deleted"></orm:basic>
> <orm:version name="version"></orm:version>
> <orm:transient name="dirty" ></orm:transient>
> <orm:transient name="listeners" /></orm:attributes>
> </orm:mapped-superclass>
> <orm:entity class="ch.eugster.colibri.core.db.tables.User"
> access="PROPERTY" metadata-complete="true" name="user">
> <orm:attribute-override name="id">
> <orm:column name="user_id" nullable="false"
> unique="true"></orm:column>
> </orm:attribute-override>
> <orm:attribute-override name="version">
> <orm:column name="user_version"></orm:column>
> </orm:attribute-override>
> <orm:attribute-override name="deleted">
> <orm:column name="user_deleted"></orm:column>
> </orm:attribute-override>
> <orm:attributes>
> <orm:basic name="username" fetch="LAZY"
> optional="false">
> <orm:column name="user_username"
> length="100"
>
> unique="true"></orm:column></orm:basic>
> <orm:basic name="password" fetch="LAZY"
> optional="true">
> <orm:column name="user_password"
> length="100"></orm:column></orm:basic>
> <orm:basic name="posLogin" fetch="LAZY"
> optional="false">
> <orm:column name="user_pos_login"
> length="100"
>
> unique="true"></orm:column></orm:basic>
> <orm:basic name="status" fetch="LAZY"
> optional="false">
> <orm:column
> name="user_status"></orm:column></orm:basic></orm:attributes>
> </orm:entity>
> </orm:entity-mappings>
>
> The classfiles look like these:
>
> **********************************
> BASICTABLE.JAVA
> **********************************
> package ch.eugster.colibri.core.db.tables;
>
> import java.io.Serializable;
> import java.util.ArrayList;
>
> import javax.persistence.Basic;
> import javax.persistence.Id;
> import javax.persistence.MappedSuperclass;
> import javax.persistence.Transient;
> import javax.persistence.Version;
>
> import ch.eugster.colibri.core.db.events.Event;
> import ch.eugster.colibri.core.db.events.IEvent;
> import ch.eugster.colibri.core.db.events.IListener;
>
> @MappedSuperclass
> public abstract class BasicTable implements Serializable, Cloneable {
>
> @Id
> private Long id = null;
>
> @Version
> protected int version = 0;
>
> @Basic
> protected boolean deleted = false;
>
> @Transient
> protected transient boolean dirty = false;
>
> @Transient
> protected transient ArrayList<IListener> listeners = new
> ArrayList<IListener>();
>
> protected static Long ZERO_ID = new Long(0l);
>
> public BasicTable() {
>
> }
>
> @Id
> public Long getId() {
> return id;
> }
>
> public void setId(Long id) {
> this.id = id;
> }
>
> @Basic
> public boolean isDeleted() {
> return deleted;
> }
>
> public void setDeleted(boolean deleted) {
> this.deleted = deleted;
> }
>
> @Version
> public int getVersion() {
> return version;
> }
>
> public void setVersion(int version) {
> this.version = version;
> }
>
> // public void store() {
> // //TODO Connection.getDefault().store(this);
> // setDirty(false);
> // fireEvent(new Event(IEvent.Type.STORE_EVENT, this));
> // }
>
> public void insert() {
> //TODO Connection.getDefault().insert(this);
> setDirty(false);
> fireEvent(new Event(IEvent.Type.INSERT_EVENT, this));
> }
>
> public void update() {
> //TODO Connection.getDefault().update(this);
> setDirty(false);
> fireEvent(new Event(IEvent.Type.UPDATE_EVENT, this));
> }
>
> public void delete() {
> if (isDeleteable())
> {
> setDeleted(true);
> //TODO Connection.getDefault().update(this);
> setDirty(false);
> fireEvent(new Event(IEvent.Type.DELETE_EVENT,
> this));
> }
> }
>
> public void remove(BasicTable object) {
> if (isRemoveable())
> {
> //TODO Connection.getDefault().delete(object);
> }
> }
>
> public boolean isDeleteable()
> {
> return true;
> }
>
> public boolean isRemoveable()
> {
> return false;
> }
>
> protected String stringValueOf(String value) {
> return value == null ? "" : value;
> }
>
> public boolean needsInsert() {
> return (this.getId() == null);
> }
>
> public boolean needsUpdate() {
> return isDirty();
> }
>
> public boolean isDirty() {
> return dirty;
> }
>
> public void setDirty(boolean dirty) {
> this.dirty = dirty;
> }
>
> public void fireEvent(Event e) {
> IListener[] l = listeners.toArray(new IListener[0]);
> for (int i = 0; i < l.length; i++) {
> l[i].handleEvent(e);
> }
> }
>
> public void addListener(IListener listener) {
> if (!listeners.contains(listener)) {
> listeners.add(listener);
> }
> }
>
> public void removeListener(IListener listener) {
> if (listeners.contains(listener)) {
> listeners.remove(listener);
> }
> }
>
> public void removeListeners() {
> listeners.clear();
> }
>
> protected ArrayList<IListener> getListeners() {
> return listeners;
> }
> }
>
> And:
>
> **********************************
> USER.JAVA
> **********************************
> /*
> * Created on 13.03.2003
> *
> * To change this generated comment go to
> * Window>Preferences>Java>Code Generation>Code Template
> */
> package ch.eugster.colibri.core.db.tables;
>
> import javax.persistence.Basic;
>
>
> /**
> * @author administrator
> */
> public class User extends BasicTable {
>
> public static final long serialVersionUID = 100000001l;
>
> @Basic
> private String username = null; //$NON-NLS-1$
> @Basic
> private String password = null; //$NON-NLS-1$
> @Basic
> private Long posLogin = null;
> @Basic
> private State status = User.State.WORKER;
>
> public User() {}
>
> @Basic
> public String getUsername()
> {
> return username;
> }
>
> public void setUsername(String username)
> {
> this.username = username;
> }
>
> @Basic
> public String getPassword()
> {
> return password;
> }
>
> public void setPassword(String password)
> {
> this.password = password;
> }
>
> @Basic
> public Long getPosLogin()
> {
> return posLogin;
> }
>
> public void setPosLogin(Long posLogin)
> {
> this.posLogin = posLogin;
> }
>
> @Basic
> public State getStatus()
> {
> return status;
> }
>
> public void setStatus(State status)
> {
> this.status = status;
> }
>
> public static enum State
> {
> WORKER(1),
> MANAGER(2),
> ADMINISTRATOR(3);
>
> protected int status = 0;
>
> private State(int status)
> {
> this.status = status;
> }
>
> public String toText() {
> switch (this) {
> case WORKER: return "Angestellte/r";
> case MANAGER: return "Manager";
> case ADMINISTRATOR: return "Administrator";
> default: return "Unbekannt";
> }
> }
> }
> }
>
>
>
> I get the following Errormessage:
>
> **********************************
> ERRORMESSAGE
> **********************************
> 78 colibri INFO [main] openjpa.Runtime - Starting OpenJPA 1.0.1
> 281 colibri INFO [main] openjpa.jdbc.JDBC - Using dictionary class "
> org.apache.openjpa.jdbc.sql.MySQLDictionary".
> Exception in thread "main" <openjpa-1.0.1-r420667:592145 nonfatal general
> error> org.apache.openjpa.persistence.PersistenceException: There were
> errors initializing your configuration: <openjpa-1.0.1-r420667:592145
> fatal store error> org.apache.openjpa.util.StoreException: null
> at
> org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
> DataSourceFactory.java:234)
> at
> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(
> JDBCConfigurationImpl.java:709)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(
> ConfigurationImpl.java:289)
> at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(
> OpenJPAConfigurationImpl.java:1463)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(
> AbstractBrokerFactory.java:638)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(
> AbstractBrokerFactory.java:169)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(
> DelegatingBrokerFactory.java:142)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:192)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:145)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:56)
> at ch.eugster.colibri.core.db.connections.DataSources.open(
> DataSources.java:22)
> at ch.eugster.colibri.core.Main.main(Main.java:35)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.lib.jdbc.DelegatingConnection.getAutoCommit(
> DelegatingConnection.java:200)
> at org.apache.openjpa.lib.jdbc.DelegatingConnection.getAutoCommit(
> DelegatingConnection.java:200)
> at
> org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection
> .<init>(ConfiguringConnectionDecorator.java:109)
> at
> org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator.decorate(
> ConfiguringConnectionDecorator.java:93)
> at org.apache.openjpa.lib.jdbc.DecoratingDataSource.decorate(
> DecoratingDataSource.java:100)
> at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(
> DecoratingDataSource.java:94)
> at
> org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
> DataSourceFactory.java:226)
> ... 15 more
>
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(
> AbstractBrokerFactory.java:205)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(
> DelegatingBrokerFactory.java:142)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:192)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:145)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:56)
> at ch.eugster.colibri.core.db.connections.DataSources.open(
> DataSources.java:22)
> at ch.eugster.colibri.core.Main.main(Main.java:35)
> Caused by: java.lang.RuntimeException: There were errors initializing your
> configuration: <openjpa-1.0.1-r420667:592145 fatal store error>
> org.apache.openjpa.util.StoreException: null
> at
> org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
> DataSourceFactory.java:234)
> at
> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(
> JDBCConfigurationImpl.java:709)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(
> ConfigurationImpl.java:289)
> at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(
> OpenJPAConfigurationImpl.java:1463)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(
> AbstractBrokerFactory.java:638)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(
> AbstractBrokerFactory.java:169)
> at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(
> DelegatingBrokerFactory.java:142)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:192)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:145)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:56)
> at ch.eugster.colibri.core.db.connections.DataSources.open(
> DataSources.java:22)
> at ch.eugster.colibri.core.Main.main(Main.java:35)
> Caused by: java.lang.NullPointerException
> at org.apache.openjpa.lib.jdbc.DelegatingConnection.getAutoCommit(
> DelegatingConnection.java:200)
> at org.apache.openjpa.lib.jdbc.DelegatingConnection.getAutoCommit(
> DelegatingConnection.java:200)
> at
> org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection
> .<init>(ConfiguringConnectionDecorator.java:109)
> at
> org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator.decorate(
> ConfiguringConnectionDecorator.java:93)
> at org.apache.openjpa.lib.jdbc.DecoratingDataSource.decorate(
> DecoratingDataSource.java:100)
> at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(
> DecoratingDataSource.java:94)
> at
> org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(
> DataSourceFactory.java:226)
> ... 15 more
>
> at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(
> ConfigurationImpl.java:303)
> at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(
> OpenJPAConfigurationImpl.java:1463)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(
> AbstractBrokerFactory.java:638)
> at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(
> AbstractBrokerFactory.java:169)
> ... 6 more
>
>
> **********************************
>
> Does anyone have a hint what I am doing wrong?
>
> Thanks in advance!
>
> Christian
> --
> ****************************
> Christian Eugster
> Grissian Widum 14
> I-39010 Tisens
> --------------------------------------
> Handy Schweiz: 0041 79 594 85 45
> Handy Italia: 0039 333 888 77 64
> Email: [EMAIL PROTECTED]
>
>
> Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
> Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
>