On Feb 15, 2008, at 9:36 AM, <[EMAIL PROTECTED]> <[EMAIL PROTECTED] > wrote:

Hi,

well it works now. Because I have changed the persistence provider to Hibernate. The problem now is that entities are not persisted. persist() simply does nothing. But no error is shown.

The persistence.xml is as follows. I have also a full log of the whole Hibernate. I cannot find an error.

<?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 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "> <persistence-unit name="testFacadePu" transaction- type="RESOURCE_LOCAL">
                <provider>org.hibernate.ejb.HibernatePersistence</provider>
                
<non-jta-data-source>java:jdbc/DerbyDatabase</non-jta-data-source>
                <properties>
                        <property name="hibernate.hbm2ddl.auto" 
value="create-drop" />
                        <property name="openjpa.jdbc.SynchronizeMappings"
                                value="buildSchema(ForeignKeys=true)" />
                        <property name="hibernate.hbm2ddl.auto" 
value="create-drop" />
                </properties>
        </persistence-unit>
</persistence>

I'd definitely use transaction-type="TRANSACTION" instead of transaction-type="RESOURCE_LOCAL" with either OpenJPA or Hibernate. RESOURCE_LOCAL is very difficult to use and transaction- type="TRANSACTION" is not slow like people normally think. At the very least, start with the default of transaction-type="TRANSACTION", get that to work and switch it later if it's still important.

Regardless of if you use transaction-type="RESOURCE_LOCAL" or transaction-type="TRANSACTION" you definitely should supply both <jta- data-source> and <non-jta-data-source>.

The DataSource for the jta-data-source should always have it's 'JtaManaged' property set to 'true' (this is the default) The DataSource for the non-jta-data-source should always have it's 'JtaManaged' property set to 'false'.

In your test code, you could do it like this:


      if (DB_MODE == MYSQL) {
properties.setProperty("MySqlDatabase", "new://Resource? type=DataSource"); properties.setProperty("MySqlDatabase.JdbcUrl", "jdbc:mysql://localhost:3306/tpg-server"); properties.setProperty("MySqlDatabase.JdbcDriver", "com.mysql.jdbc.Driver");
          properties.setProperty("MySqlDatabase.UserName", "tpg");
          properties.setProperty("MySqlDatabase.Password", "tpg");

properties.setProperty("MySqlDatabaseUnmanaged", "new:// Resource?type=DataSource"); properties.setProperty("MySqlDatabaseUnmanaged.JdbcUrl", "jdbc:mysql://localhost:3306/tpg-server"); properties.setProperty("MySqlDatabaseUnmanaged.JdbcDriver", "com.mysql.jdbc.Driver"); properties.setProperty("MySqlDatabaseUnmanaged.UserName", "tpg"); properties.setProperty("MySqlDatabaseUnmanaged.Password", "tpg"); properties.setProperty("MySqlDatabaseUnmanaged.JtaManaged", "false");
      } else if (DB_MODE == DERBY) {
properties.setProperty("DerbyDatabase", "new://Resource? type=DataSource"); properties.setProperty("DerbyDatabase.JdbcUrl", "jdbc:derby:derbyDB;create=true"); properties.setProperty("DerbyDatabase.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");

properties.setProperty("DerbyDatabaseUnmanaged", "new:// Resource?type=DataSource"); properties.setProperty("DerbyDatabaseUnmanaged.JdbcUrl", "jdbc:derby:derbyDB;create=true"); properties.setProperty("DerbyDatabaseUnmanaged.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver"); properties.setProperty("DerbyDatabaseUnmanaged.JtaManaged", "false");
      }


-David


Reply via email to