JBoss 7 datasource for Apache Derby

17.03.2013

JBoss DataSource for Apache Derby

This short article describes how configure a DataSource for Apache Derby 10.9 in JBoss AS 7.1.1. Generally there are two ways to create a DataSource in JBoss:

  • Copy the JDBC driver into the deployments directory
  • Create a module with the JDBC driver

Also it is necessary to create a DataSource definition in the file standalone.xml. It is recommended to deploy the driver as module.

Direct Deployment

The first solution is a very easy way to deploy the Derby driver in the application server. If you quickly want to test something it is sufficient. But in a productive environment it is better to create a module definition in the JBoss. (see next section)

To deploy the Derby driver directly you simply copy the driver derbyclient.jar into the directory [JBOSS]/standalone/deployments. If the server is running the new file is recognized by JBoss and automatically deployed.

Then you have to adapt the file [JBOSS]/standalone/configuration/standalone.xml. Add the following section into the file:

<datasources>

...

<datasource jndi-name="java:/DerbyDS" pool-name="DerbyDS" enabled="true" use-ccm="false">
            <connection-url>jdbc:derby://localhost:1527/jhDB;create=true</connection-url>
            <driver-class>org.apache.derby.jdbc.ClientDriver</driver-class>
    <driver>derbyclient.jar</driver>
            <security>
                <user-name>demo</user-name>
                <password>demo</password>
            </security>
            <validation>
                <validate-on-match>false</validate-on-match>
                <background-validation>false</background-validation>
            </validation>
            <statement>
                <share-prepared-statements>false</share-prepared-statements>
            </statement>
        </datasource>

...
</datasources>

Please note: JBoss 7.1.1 has a bug (AS7-4222). When deploying a JDBC driver direct in the deployments directory an error occurs in the logfile or console:

14:58:20,140 INFO  [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report
JBAS014775:    New missing/unsatisfied dependencies:
      service jboss.jdbc-driver.derbyclient_jar (missing) dependents: [service jboss.data-source.java:/DerbyDS]

...

14:58:20,337 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "derbyclient.jar"
14:58:20,338 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014776:    Newly corrected services:
      service jboss.jdbc-driver.derbyclient_jar (no longer required)

Deployment as module

To deploy the driver as a module you have to create the following directory [JBOSS]/modules/org/apache/derby/main ([JBOSS]/modules/org/apache should already exist.). In this directory create a file module.xml with the following content:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.apache.derby">
        <resources>
            <resource-root path="derbyclient.jar"/>
        </resources>
        <dependencies>
            <module name="javax.api"/>
        </dependencies>
</module>

Copy the Derby JDBC driver derbyclient.jar into the directory [JBOSS]/modules/org/apache/derby/main, too.

Now you have to adapt the file standalone.xml in the directory [JBOSS]/standalone/configuration. Add the following datasource definition in the section datasources.

<datasources>

...

<datasource jndi-name="java:/DerbyDS" pool-name="DerbyDS" enabled="true" use-ccm="false">
   <connection-url>jdbc:derby://localhost:1527/jhDB;create=true</connection-url>
   <driver>org.apache.derby</driver>
   <security>
        <user-name>demo</user-name>
        <password>demo</password>
   </security>
   <validation>
        <validate-on-match>false</validate-on-match>
        <background-validation>false</background-validation>
   </validation>
   <statement>
        <share-prepared-statements>false</share-prepared-statements>
   </statement>
</datasource>


<drivers>
   <driver name="org.apache.derby" module="org.apache.derby">
       <xa-datasource-class>org.apache.derby.jdbc.ClientXADataSource</xa-datasource-class>
   </driver>
</drivers>

...
</datasources>

When you restart JBoss the datasource is available. You can verify this by opening the JBoss Admin Console:

Further informations