Hi all,

I added new DataSources in my openejb.xml file:

<Resource id="MyDB" type="DataSource">
 JdbcDriver org.postgresql.Driver
 JdbcUrl jdbc:postgresql://localhost/TestDB
 UserName xxx
 Password yyy
 JtaManaged true
</Resource>

<Resource id="MyDBun" type="DataSource">
 JdbcDriver org.postgresql.Driver
 JdbcUrl jdbc:postgresql://localhost/TestDB
 UserName xxx
 Password yyy
 JtaManaged false
</Resource>

Then I deployed an EJB application with this persistence.xml
<persistence-unit name="EJB_Module">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
       <jta-data-source>MyDB</jta-data-source>
       <non-jta-data-source>MyDBun</non-jta-data-source>
       <properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
       </properties>
</persistence-unit>

So according to SynchronizeMappings the tables etc. shall be automatically created.

But running the application I get following exception:
<openjpa-1.2.0-r422266:683325 fatal store error> org.apache.openjpa.util.StoreException: 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.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514) at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499) at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400) at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257) at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245) at org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:291) at org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:71) at org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:74) at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:231) at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:169) at org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238) at org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129) at org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:196)
   at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:149)
   at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:71)
at org.apache.openejb.server.ejbd.KeepAliveServer$Session.service(KeepAliveServer.java:213) at org.apache.openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:233)
   at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66)
   at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:91)
   at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:120)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
   at java.lang.Thread.run(Thread.java:619)
Caused by: <openjpa-1.2.0-r422266:683325 nonfatal store error> org.apache.openjpa.util.StoreException: ERROR: relation "country" does not exist {prepstmnt 16963612 INSERT INTO Country (id, name) VALUES (?, ?) [params=(long) 5, (String) aaa]} [code=0, state=42P01]
FailedObject: carpool.entities.coun...@17a687b
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:72) at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:131) 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) 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)
   ... 26 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: relation "country" does not exist {prepstmnt 16963612 INSERT INTO Country (id, name) VALUES (?, ?) [params=(long) 5, (String) aaa]} [code=0, state=42P01] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:866) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1504) at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:151) at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:120)
   ... 36 more



What does this '.....relation "country" does not exist".....' mean? I'm just using this simple entity bean which I try to persist in a stateless session bean.
@Entity
public class Country {
   private Long id;
   private String name;

   public void setId(Long id) {
       this.id = id;
   }

   @Id
   public Long getId() {
       return id;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getName() {
       return name;
   }
}


When I change my persistence.xml to the DataSources provided by openejb by default
<jta-data-source>My DataSource</jta-data-source>
<non-jta-data-source>My Unmanaged DataSource</non-jta-data-source>
then everything works just fine (but I don't want to use the default HSQL database).

Thank you for any help in advance.

Reply via email to