Hi Derby Community,

I've found that Derby works create with both server and client side applications. I use Hibernate for object-relational mapping. Our client side applications are Eclipse rich client platform programs. Our server side applications are enterprise java beans 3.0 (EJB3) running under a JBoss application server. We use the same annotated plain old java objects (POJOs) on the server side and the client side (eliminating the need for data transfer objects).

The three xml files listed below may help you avoid configuration management problems when you start using Derby with JBoss (the default persistence provider in JBoss is hsql).

The first file is persistence.xml (include this file in the META-INF directory of the jar file that contains your bean)
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
  <persistence-unit name="erp">
<jta-data-source>java:/DerbyDS</jta-data-source> <properties> </properties>
  </persistence-unit>
</persistence>

The only thing you need to change is the persistence-unit name ("erp" in this example).

The second file is erp-derby-ds.xml (you can rename this to any filename that ends in -ds.xml; place the file in the deploy directory of your JBoss server)
 <?xml version="1.0" encoding="UTF-8" ?>
- <!--

The Derby embedded database JCA connection factory config
$Id: derby-ds.xml,v 1.1.4.1 2004/11/03 13:28:39 loubyansky Exp $
 -->
- <#> <datasources>
- <#> <local-tx-datasource>
- <!--

The jndi name of the DataSource, it is prefixed with java:/
 -->
- <!--

Datasources are not available outside the virtual machine
 -->
 <jndi-name>DerbyDS</jndi-name>
- <!--

for in-process persistent db, saved when jboss stops. The
org.jboss.jdbc.DerbyDatabase mbean is necessary for properly db shutdown
 -->
<connection-url>jdbc:derby:C:\Amp_Development_01\derbyDatabase\erp00;create=true</connection-url>
- <!--

The driver class
 -->
 <driver-class>org.apache.derby.jdbc.EmbeddedDriver</driver-class>
- <!--

The login and password
 -->
- <!--

The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use
 -->
 <min-pool-size>5</min-pool-size>
- <!--

The maximum connections in a pool/sub-pool
 -->
 <max-pool-size>20</max-pool-size>
- <!--

The time before an unused connection is destroyed
 -->
 <idle-timeout-minutes>5</idle-timeout-minutes>
- <!--

Whether to check all statements are closed when the connection is returned to 
the pool,
this is a debugging feature that should be turned off in production
 -->
 <track-statements />
- <!--

This mbean can be used when using in process persistent derby
 -->
 </local-tx-datasource>
 </datasources

Although not strictly necessary, you can create an ejb-jar.xml file that can be used at deployment time to pass parameters to your bean (the file is place in the META-INF directory of the jar file that contains your bean).
<?xml version="1.0"?>
<ejb-jar
      xmlns="http://java.sun.com/xml/ns/javaee";
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd";
      version="3.0">
  <enterprise-beans>
     <session>
<ejb-name>DatabaseBuilderBean</ejb-name> <ejb-class>com.charleskelly.amp.database_builder.DatabaseBuilderBean</ejb-class> <env-entry>
             <env-entry-name>schemaJarFileName</env-entry-name>
             <env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>C:\Amp_Development_01\jboss\server\default\deploy\ErpSchema.jar</env-entry-value>
         </env-entry>
</session>
  </enterprise-beans>
</ejb-jar>

I've found the "schemaJarFileName" to be helpful: it contains the ddl for erp Derby database. I use a bean to create tables and a second bean to install "initialization data" into the tables.

The following definitions within the bean(s) provide access to the attributes defined above:
private static final String NOT_INITIALIZED = "not initialized";
@Resource (name="schemaJarFileName") private String schemaJarFileName = NOT_INITIALIZED; @PersistenceUnit(unitName="erp") private EntityManagerFactory erpEntityManagerFactory; @PersistenceContext(unitName="erp") private EntityManager erpEntityManager;

I hope this is helpful for the community.
A good source of additional information is "Enterprise JavaBeans 3.0" by Bill Burke; O'Reilly 2006

Charlie

David Van Couvering wrote:

I think that would be a great thing to post, both on this list and perhaps on the JBoss forum, if such a thing exists...

David

Charlie Kelly wrote:

Hi David,

Yes, the EntitytManager is based on Hibernate; and Derby and Hibernate work well together.

There is an error in the xml files that are released with the binary version of JBoss.
I solved the problem today.  I'll post it if anyone wants it.

Thanks

Charlie


David Van Couvering wrote:

I think the JBoss Entity Manager is Hibernate, isn't it? I am pretty sure Derby works with that...

David

Charlie Kelly wrote:

Has anybody used Derby with JBoss (and perhaps EJB3 Entity Manager)?
I'm using JBoss 4.0.4

If yes, how did you configure your xml files?

Thanks

Charlie














Reply via email to