JBoss.org Community Documentation

Chapter 3. Entity Configuration Files

Introduction :

This section talks about various configuration parameters for getting entities to work within JBoss. JBoss EJB 3.0 is built on top of the Hibernate ORM solution, and more specifically, the Hibernate Entity Manager. This chapter explains the configurations related to the datasource, the persistence-unit and how they relate to each other.

Configuration Files :

To use EJB3 Entities within JBoss you'll need to do a few things.

Configure JBoss datasource :

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.

persistence.xml and .jar files :

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>
          
name

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.

jta-data-source, non-jta-data-source

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

jar-file and class

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.

properties

The properties element is used to specify vendor specific properties. This is where you will define your JBoss and Hibernate specific configurations.

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.


EAR and WAR files :

You can deploy your EJB3 entities and the persistence-unit through WAR files too. You will have to place the jar containing the entities and META-INF/persistence.xml, in the .war/WEB-INF/lib folder.

For deploying through an EAR, you need not mention the jar containing the entities and the persistence-unit in the application.xml. If you place the jar at the root of the EAR, the persistence-unit and the entities will be deployed.