Hi *,

I use OpenJPA 1.2.0 and Derby 10.4.2.0 as an embedded database.

When I write my class to persist into persistence.xml (<class>*</class>),
everything works fine: I can write into the db, make queries on it, etc.

But I don't want it that way. Classes to persist are not "known" at time,
when the EntityManager is created. 

So runtime enhancement is enabled, the class to persist is going to be
persist. But when I commit the EntityManager.getTransaction(), the following
stackrace is comming up:

Exception in thread "main" <openjpa-1.2.0-r422266:683325 fatal store error>
org.apache.openjpa.persistence.RollbackException: The transaction has been
rolled back.  See the nested exceptions for details on the errors that
occurred.
        at
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
        at
com.dvelop.test.me.OpenJPAWithDerby.writeStatementsIntoDB(OpenJPAWithDerby.java:68)
        at com.dvelop.test.me.OpenJPAWithDerby.main(OpenJPAWithDerby.java:48)
Caused by: <openjpa-1.2.0-r422266:683325 fatal general error>
org.apache.openjpa.persistence.PersistenceException: The transaction has
been rolled back.  See the nested exceptions for details on the errors that
occurred.
        at
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2163)
        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
        at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
        at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826)
        at
org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
        at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350)
        at
org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877)
        at
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
        ... 2 more
Caused by: <openjpa-1.2.0-r422266:683325 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Table/View 'STATEMENT'
does not exist. {INSERT INTO Statement (mID, mMessage) VALUES (?, ?)}
[code=20000, state=42X05]
        at 
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4238)
        at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4203)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
        at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
        at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:74)
        at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
        at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
        at
org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
        at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
        at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:655)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
        ... 9 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Table/View
'STATEMENT' does not exist. {INSERT INTO Statement (mID, mMessage) VALUES
(?, ?)} [code=20000, state=42X05]
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:201)
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:57)
        at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:228)
        at
org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:164)
        at
org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection.prepareStatement(ConfiguringConnectionDecorator.java:140)
        at
org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:164)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.prepareStatement(JDBCStoreManager.java:1449)
        at
org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:153)
        at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.prepareStatement(PreparedStatementManagerImpl.java:160)
        at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:114)
        at
org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:82)
        at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:89)
        at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:72)
        ... 16 more
=================
My persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.0">
        <persistence-unit name="openjpa" transaction-type="RESOURCE_LOCAL">
        
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        </persistence-unit>
</persistence>
=================
My class to persistent:

import java.util.UUID;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Statement {

        @Id
        private String mID = UUID.randomUUID().toString();
        
        private String mMessage;
        
        public Statement() {
        }
        
        public Statement(String pMessage) {
                mMessage = pMessage;
        }
        
        public String getMessage() {
                return mMessage;
        }
        
}
=================
My Test:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import org.apache.openjpa.persistence.PersistenceProviderImpl;

import
com.dvelop.esb.esbruntime.service.persistenceservice.impl.openjpa.domain.Statement;

public class OpenJPAWithDerby {

        public static void main(String[] args) {

                EntityManagerFactory lEntityManagerFactory = new
PersistenceProviderImpl().createEntityManagerFactory("openjpa",
getProperties("C:\\tmp\\DerbyTest"));
                EntityManager lEntityManager =
lEntityManagerFactory.createEntityManager();

                writeStatementsIntoDB(lEntityManager);
//               queryStatementsFromDB(lEntityManager);

                lEntityManager.close();

        }

        private static void writeStatementsIntoDB(EntityManager pEntityManager) 
{

                for (int i = 0; i < 10; i++) {

                        pEntityManager.getTransaction().begin();

                        StringBuilder lSB = new StringBuilder();
                        for (int j = 0; j < i; j++)
                                lSB.append("Blub ");
                        Statement lStatement = new Statement(i + ": " + 
lSB.toString());

                        pEntityManager.persist(lStatement);
                        pEntityManager.getTransaction().commit();
                }
                
        }

        private static void queryStatementsFromDB(EntityManager pEntityManager) 
{

                Query q = pEntityManager.createQuery("select stats from "
                                + Statement.class.getName() + " stats");
                List<Statement> lResults = q.getResultList();

                for (Statement lStatement : lResults) {
                        System.out.println(lStatement.getMessage());
                }

        }

        private static Map<String, String> getProperties(String pDBName) {

                Map<String, String> props = new HashMap<String, String>();
                
                props.put("openjpa.ConnectionURL", "jdbc:derby:" + pDBName +
";create=true");        
                props.put("openjpa.ConnectionDriverName",
"org.apache.derby.jdbc.EmbeddedDriver");
                props.put("openjpa.jdbc.SynchronizeMappings", "buildSchema");   
                props.put("openjpa.Log", "DefaultLevel=INFO");          
                props.put("openjpa.ConnectionFactoryProperties", 
"PrettyPrint=true,
PrettyPrintLineLength=22");
                
                return props;

        }
        
}
=================

So where and what is the point, I don't get? Is the property
"openjpa.jdbc.SynchronizeMappings" not correctly set?

For any hints I am very thankful.

Cheers,
 Kevin
-- 
View this message in context: 
http://n2.nabble.com/OpenJPA-doesn%27t-create-table-in-embedded-DerbyDB-tp1082390p1082390.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to