|
Page Edited :
OPENEJBx30 :
OpenJPA
OpenJPA has been edited by David Blevins (May 16, 2008). Content:OpenJPA is bundled with OpenEJB as the default persistence provider. An example of working persistence.xml for OpenJPA: persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name="movie-unit"> <jta-data-source>movieDatabase</jta-data-source> <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> <class>org.superbiz.injection.jpa.Movie</class> <properties> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> </properties> </persistence-unit> </persistence> Where the datasources above are configured in your openejb.xml as follows: openejb.xml <Resource id="movieDatabase" type="DataSource"> JdbcDriver = org.hsqldb.jdbcDriver JdbcUrl = jdbc:hsqldb:mem:moviedb </Resource> <Resource id="movieDatabaseUnmanaged" type="DataSource"> JdbcDriver = org.hsqldb.jdbcDriver JdbcUrl = jdbc:hsqldb:mem:moviedb JtaManaged = false </Resource> Or in properties as follows: 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"); Common exceptionsTable not found in statementOr 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. persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="movie-unit"> <!-- your other stuff --> <properties> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> </properties> </persistence-unit> </persistence> Auto-commit can not be set while enrolled in a transactionPending This broker is not configured to use managed transactions.SetupUsing a EXTENDED persistence context ... bean code @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED)
EntityManager entityManager;
on a persistence unit setup as RESOURCE_LOCAL ... persistence.xml <persistence-unit name="movie-unit" transaction-type="RESOURCE_LOCAL"> ... </persistence-unit> inside of a transaction. bean code @TransactionAttribute(TransactionAttributeType.REQUIRED) public void addMovie(Movie movie) throws Exception { entityManager.persist(movie); } Note the default transaction attribute for any ejb method is REQUIRED unless explicitly set otherwise in the bean class or method in question. SolutionsYou can either:
|
Unsubscribe or edit your notifications preferences
