I would like to put some of the hibernate configuration in a property file to make it editable without build and deploy.
I tried to solve my problem by following the instructions from Create JPA EntityManager without persistence.xml configuration file
app.properties:
hibernate.show_sql=true hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=validate hibernate.show_sql=true hibernate.format_sql=true hibernate.default_schema=myschema
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Persistence deployment descriptor for dev profile --> <persistence 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" version="1.0"> <persistence-unit name="pu"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/appDatasource</jta-data-source> <properties> <property name="jboss.entity.manager.factory.jndi.name" value="java:/appEntityManagerFactory"/> </properties> </persistence-unit> </persistence>
In the initialization code the application executes the following sequence, (which finds the properties),
Properties props = new Properties(); InputStream is = ClassLoader.getSystemResourceAsStream( "app.properties" ); props.load( is ); Persistence.createEntityManagerFactory( "pu", props );
but fails with the error message:
INFO [SessionFactoryImpl] building session factory INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured ERROR [STDERR] javax.persistence.PersistenceException: [PersistenceUnit: pu] Unable to build EntityManagerFactory
Does anyone have an idea what could be wrong with my configuration?
Versions: JBoss 4.3 Seam: 2.1.2
EDIT:
JBoss JNDI enlists "pu" as persistence unit:
persistence.units:ear=app.ear,jar=app.jar,unitName=pu (class: org.hibernate.impl.SessionFactoryImpl)
xml should be put in the EJB JAR's META-INF directory. If you package the persistence unit as a set of classes in a WAR file, persistence. xml should be located in the WAR file's WEB-INF/classes/META-INF directory.
The persistence. xml file must define a persistence-unit with a unique name in the current scoped classloader. The provider attribute specifies the underlying implementation of the JPA EntityManager. In JBoss AS, the default and only supported / recommended JPA provider is Hibernate.
The Java Persistence API allows you to define multiple persistence units, each of which can map to a separate database.
As an alternative to your current approach and since you're using Hibernate, you could use Hibernate to configure JPA by declaring a hibernate.cfg.xml
file using the hibernate.ejb.cfgfile
property, like this:
<persistence> <persistence-unit name="manager1" transaction-type="JTA"> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/> </properties> </persistence-unit> </persistence>
My understanding is that the hibernate.cfg.xml
is just supposed to be on the classpath (so it could be outside the packaged archive).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With