Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

Feature

Apache Geronimo

JBoss v4

JDBC access

Geronimo does not have any direct integration with JDBC but supports access through the generic J2CA framework. The TranQL project has J2CA adapters for various databases.

JDBC access in JBoss is through JDBC connectors based on the JCA specification.

JCA implementation

Geronimo supports the JCA 1.5 specification and is backward compatible to the JCA 1.0 specification.

JBoss AS 4.0 implements the JCA (Java Connector Architecture) 1.5 specification instead of the JCA 1.0 in JBoss AS 3.2.

Data sources supported

TranQL has generic wrappers for data source, ConnectionPoolDatasource, and XADataSource.

Supports 5 types of data sources:

  • no-tx-datasource
  • local-tx-datasource
  • xa-datasource
  • ha-local-tx-datasource
  • ha-xa-datasource

Data source failover

TranQL has specialized drivers for certain databases (including Apache Derby, Oracle and soon DB2) that provide a tighter integration with the advanced features of the driver.
It is at this level that features such as load-balancing and failover would be provided. You can also use a C-JDBC wrapper for providing database clustering and failover.

JBoss has data source failover capabilities implemented through two data sources.
1) ha-local-tx-datasource - for local transactions.
2) ha-xa-datasource - for distributed transactions

XA support

Supports XA transactions, Local Transactions, and No transaction.

Supports XA transactions, Local Transactions, and No transaction.

Connection Manager Configurability

The J2CA framework is interceptor based which allows different parts of the connection framework to be plugged in.
Although you cannot plug in a custom connection manager now, this capability can be added fairly easily.

You can plug in your own custom connection manager if required.

JTA implementation

Transaction support is provided through JOTM and HOWL.

Full support for JTA through JBossJTA.

Connection pooling and management

Custom Geronimo Code and TranQL used for connection pooling and management.

JBossCX framework used for connection pooling and management.

Legacy driver support

Geronimo also provides this through the TranQL- connector JDBC to JCA wrapper in Geronimo. Supports JDBC 3.0 and 2.1.

JBoss provides connection to RDBMS that have not yet implemented JCA- JDBC drivers through JCA wrappers for JDBC drivers.

...

Copy the mysql-ds.xml file to the deploy directory of your JBoss server (<jboss_home>\server\<your_server_name>\deploy) and edit it as shown in the following example:

Code Block
xmlxml
borderStylesolid
titleUpdate the mysql-ds.xml file
xml
<jndi-name>jdbc/TradeDB</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/tradedb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>password</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>

...

From a command prompt or shell go to the brokerage directory and run ant. This will build the war file and place it directly in the brokerage directory. The war created by the ant build contains a JBoss specific deployment descriptor, the jboss-web.xml file in the WEB-INF directory of the WAR is shown in the following example.

xml
Code Block
xml
borderStylesolid
titleJBoss deployment descriptor
xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
  <context-root>/brokerage</context-root>
  <resource-ref>
      <res-ref-name>jdbc/TradeDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <jndi-name>java:jdbc/TradeDB</jndi-name>
  </resource-ref>
</jboss-web>

...

First, create an xml file called mysql-geronimo-plan.xml. Copy the plan shown in the following example and paste it in the xml file.

xml
Code Block
xml
borderStylesolid
titleData source deployment plan
xml
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2">

  <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
    <dep:moduleId>
	  <dep:groupId>user</dep:groupId>
	  <dep:artifactId>jdbcdatasource</dep:artifactId>
	  <dep:version>2.0</dep:version>
	  <dep:type>car</dep:type>
	</dep:moduleId>
	<dep:dependencies>
	  <dep:dependency>
	    <dep:groupId>mysql</dep:groupId>
		<dep:artifactId>mysql-connector-java</dep:artifactId>
		<dep:version>3.1.14-bin</dep:version>
		<dep:type>jar</dep:type>
	  </dep:dependency>
	</dep:dependencies>
  </dep:environment>
<resourceadapter>
  <outbound-resourceadapter>
    <connection-definition>
      <connectionfactory-interface>
        javax.sql.DataSource
      </connectionfactory-interface>
      <connectiondefinition-instance>
        <name>TradeDS</name>
        <config-property-setting name="UserName">
          root
        </config-property-setting>
        <config-property-setting name="Password">
          password
        </config-property-setting>
        <config-property-setting name="Driver">
          com.mysql.jdbc.Driver
        </config-property-setting>
        <config-property-setting name="ConnectionURL">
          jdbc:mysql://localhost:3306/tradedb
        </config-property-setting>
        <config-property-setting name="CommitBeforeAutocommit">
           false
        </config-property-setting>
        <config-property-setting name="ExceptionSorterClass">
           org.tranql.connector.NoExceptionsAreFatalSorter
        </config-property-setting>
        <connectionmanager>
          <local-transaction/>
          <single-pool>
             <max-size>10</max-size>
             <min-size>0</min-size>
             <blocking-timeout-milliseconds>
                5000
              </blocking-timeout-milliseconds>
              <idle-timeout-minutes>
                30
              </idle-timeout-minutes>
              <match-one/>
          </single-pool>
        </connectionmanager>
      </connectiondefinition-instance>
    </connection-definition>
  </outbound-resourceadapter>
</resourceadapter>
</connector>

...

The geronimo-web.xml file is located in the <brokerage_home>\web\descriptors\geronimo directory and looks like the following example.

xml
Code Block
xml
borderStylesolid
titlegeronimo-web.xml
xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1" xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.1">
    <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
	    <dep:moduleId>
		    <dep:groupId>BrokerageApp</dep:groupId>
			<dep:artifactId>MySqlDS</dep:artifactId>
			<dep:version>2.0</dep:version>
			<dep:type>car</dep:type>
		</dep:moduleId>

		<dep:dependencies>
		    <dep:dependency>
		        <dep:groupId>user</dep:groupId>
			    <dep:artifactId>jdbcdatasource</dep:artifactId>
			    <dep:version>2.0</dep:version>
			    <dep:type>car</dep:type>
			</dep:dependency>
		</dep:dependencies>

	</dep:environment>
<context-root>/brokerage</context-root>

<resource-ref>

	<ref-name>jdbc/TradeDB</ref-name>

     <resource-link>TradeDS</resource-link>

</resource-ref>

</web-app>

...