Entity Configuration Files
To use EJB3 Entities within JBoss you'll need to do a few things.
- Configure a JBoss datasource using *-ds.xml file. Check out the documentation at our wiki or you can view example configurations for many different datasources within: %JBOSS_HOME%/docs/examples/jca
- Create a persistence.xml file and place it in the META-INF folder of your jar
For datasources, JBoss comes with the Hypersonic SQL database embedded within it and a default datasource available in JNDI under java:/DefaultDS
. Otherwise, you'll need to specify your own datasource. Please refer to the JBoss AS guide or the wiki mentioned earlier, on how to create a JBoss connection pool. Also, there are examples in the jboss distrubtion under %JBOSS_HOME%/docs/examples/jca.
Entities are placed in a EJB-JAR .jar file or a .jar file all their own. You must also define a persistence.xml file that resides in the META-INF folder of the .jar file. Here's an example of a persistence.xml file.
<?xml version="1.0" encoding="UTF-8"?>
<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="manager1">
<jta-data-source>java:/DefaultDS</jta-data-source>
<jar-file>../MyApp.jar</jar-file>
<class>org.acme.Employee</class>
<class>org.acme.Person</class>
<class>org.acme.Address</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
-
You are required to name your persistence unit. If your persistence classes are within a EJB JAR archive, and it is the only persistence unit defined, then you do not have to reference this name explicitly in your @PersistenceContext and @PersistenceUnit annotations.
-
This is the JNDI name of where the javax.sql.DataSource is located. This is ignored when *not* used within an application server. When running outside of an application server, you must specify JDBC connections with Hibernate specific properties (see below). If you're running inside JBoss, put the jndi name of the datasource you defined in the earlier section.
Note
JBoss by default binds the datasource to the java: namespace. Remember to use the java: while using the datasource name in the persistence.xml
-
The class element specifies a fully qualified classname that you will belong to the persistence unit. The jar-file element specifies another jar you want automatically scanned for @Entity classes. When using jar-file, you must specify a path relative to the jar file the persistence.xml file is in. By default also, the jar the persistence.xml file is placed in is scanned for @Entity classes as well.
-
The properties element is used to specify vendor specific properties. This is where you will define your JBoss and Hibernate specific configurations.
name
jta-data-source
, non-jta-data-source
jar-file and class
properties
JBoss EJB 3.0 is built on top of Hibernate 3.0 ORM solution. You may need to provide information to Hibernate so that it knows the database vendor dialect (MySQL, Oracle, etc...), caching, as well as other settings. JBoss EJB 3.0 also has some specific configurable properties as well. Here's a table of properties. We don't list all the Hibernate ones. You can browse through the Hibernate documentation for those.
Property | Description |
---|---|
hibernate.dialect | Usually Hibernate can figure out the database dialect itself, but maybe not. Check the hibernate documentation for information on this |
hibernate.hbm2ddl.auto=update | Creates the database schema on deploy if it doesn't exist. Alters it if it has changed. Useful for when you want to generate database schema from entity beans |
jboss.entity.manager.jndi.name | JBoss does not publish container managed EntityManagers in JNDI by default. Use this to bind it. |
jboss.entity.manager.factory.jndi.name | JBoss does not publish container managed EntityManagerFactorys in JNDI by default. Use this to bind it. |
jboss.no.implicit.datasource.dependency | JBoss tries to register deployment dependencies for datasource by guessing the dependency name based on the jndi name of the datasource. Use this switch if the guess is wrong. |
jboss.depends.{some arbitrary name} | Specify an MBean dependency for the persistence unit deployment. |
Table 3.1. Example Config Properties
<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="manager1">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="jboss.entity.manager.jndi.name" value="java:/Manager1"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/Manager1Factory"/>
</properties>
</persistence-unit>
</persistence>