OpenJPA is bundled with OpenEJB as the default persistence provider. An example of working persistence.xml for OpenJPA: {code:xml|title=persistence.xml} movieDatabase movieDatabaseUnmanaged org.superbiz.injection.jpa.Movie {code} Where the datasources above are configured in your openejb.xml as follows: {code:xml|title=openejb.xml} JdbcDriver = org.hsqldb.jdbcDriver JdbcUrl = jdbc:hsqldb:mem:moviedb JdbcDriver = org.hsqldb.jdbcDriver JdbcUrl = jdbc:hsqldb:mem:moviedb JtaManaged = false {code} Or in properties as follows: {code:xml|title=java.lang.System or InitialContext properties} p.put("movieDatabase", "new://Resource?type=DataSource"); p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); p.put("movieDatabaseUnmanaged", "new://Resource?type=DataSource"); p.put("movieDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); p.put("movieDatabaseUnmanaged.JtaManaged", "false"); {code} h1. Common exceptions h2. Table not found in statement Or as derby will report it "Table 'abc.xyz' doesn't exist" Someone has to create the database structure for your persistent objects. If you add the *openjpa.jdbc.SynchronizeMappings* property as shown below OpenJPA will auto-create all your tables, all your primary keys and all foreign keys exactly to match your objects. {code:xml|title=persistence.xml} {code} h2. Auto-commit can not be set while enrolled in a transaction Pending h2. This broker is not configured to use managed transactions. h3. Setup Using a EXTENDED persistence context ... {code:title=bean code} @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED) EntityManager entityManager; {code} on a persistence unit setup as RESOURCE_LOCAL ... {code:xml|title=persistence.xml} ... {code} inside of a transaction. {code:title=bean code} @TransactionAttribute(TransactionAttributeType.REQUIRED) public void addMovie(Movie movie) throws Exception { entityManager.persist(movie); } {code} Note the default transaction attribute for any ejb method is REQUIRED unless explicitly set otherwise in the bean class or method in question. h3. Solutions You can either: # Change your bean or it's method to use TransactionAttributeType.NOT_REQUIRED or TransactionAttributeType.NEVER which will guarantee it will not be invoked in a JTA transaction. # Change your persistence.xml so the persistence-unit uses transaction-type="TRANSACTION" making it capable of participating in a JTA transaction.