org.apache.avalon.excalibur.datasource.cluster
Class DefaultIndexedDataSourceCluster
java.lang.Object
org.apache.avalon.framework.logger.AbstractLogEnabled
org.apache.avalon.excalibur.datasource.cluster.AbstractDataSourceCluster
org.apache.avalon.excalibur.datasource.cluster.DefaultIndexedDataSourceCluster
- All Implemented Interfaces:
- Component, Configurable, DataSourceComponent, Disposable, IndexedDataSourceCluster, Initializable, LogEnabled, Serviceable, ThreadSafe
- public class DefaultIndexedDataSourceCluster
- extends AbstractDataSourceCluster
- implements IndexedDataSourceCluster
The DefaultIndexedDataSourceCluster requires that the user implement their own method of
selecting which DataSource in the cluster to use for each connection request. Calls to
getConnection() will throw an exception. Components which make use of this class must call
the getConnectionForIndex(int index) method instead.
The Configuration for a 2 database cluster is like this:
<datasources>
<indexed-cluster name="mydb-cluster" size="2">
<dbpool index="0">mydb-0</dbpool>
<dbpool index="1">mydb-1</dbpool>
</indexed-cluster>
</datasources>
<cluster-datasources>
<jdbc name="mydb-0">
<pool-controller min="1" max="10"/>
<auto-commit>true</auto-commit>
<driver>com.database.jdbc.JdbcDriver</driver>
<dburl>jdbc:driver://host0/mydb</dburl>
<user>username</user>
<password>password</password>
</jdbc>
<jdbc name="mydb-1">
<pool-controller min="1" max="10"/>
<auto-commit>true</auto-commit>
<driver>com.database.jdbc.JdbcDriver</driver>
<dburl>jdbc:driver://host1/mydb</dburl>
<user>username</user>
<password>password</password>
</jdbc>
</cluster-datasources>
With the following roles declaration:
<role name="org.apache.avalon.excalibur.datasource.DataSourceComponentSelector"
shorthand="datasources"
default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector">
<hint shorthand="jdbc" class="org.apache.avalon.excalibur.datasource.JdbcDataSource"/>
<hint shorthand="j2ee" class="org.apache.avalon.excalibur.datasource.J2eeDataSource"/>
<hint shorthand="indexed-cluster"
class="org.apache.avalon.excalibur.datasource.cluster.DefaultIndexedDataSourceCluster"/>
</role>
<role name="org.apache.avalon.excalibur.datasource.DataSourceComponentClusterSelector"
shorthand="cluster-datasources"
default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector">
<hint shorthand="jdbc" class="org.apache.avalon.excalibur.datasource.JdbcDataSource"/>
<hint shorthand="j2ee" class="org.apache.avalon.excalibur.datasource.J2eeDataSource"/>
</role>
An indexed-cluster definition enforces that the configuration specify a size. This size must
equal the number of datasources referenced as being members of the cluster. Any datasource can
be a member of the cluster.
The indexed-cluster can be obtained in the same manner as a non-clustered datasource. The only
difference is in how it is used. The IndexedDataSourceCluster requires that the caller specify
the index of the cluster member to use when requesting a connection.
The following code demonstrates a change that can be made to database enabled components so that
they will be able to work with both IndexedDataSourceCluster DataSources and regular
DataSources.
old:
Connection connection = m_dataSource.getConnection();
new:
Connection connection;
if ( m_dataSource instanceof IndexedDataSourceCluster )
{
connection = ((IndexedDataSourceCluster)m_dataSource).getConnectionForIndex( index );
}
else
{
connection = m_dataSource.getConnection();
}
- Since:
- 4.1
- Version:
- CVS $Revision: 1.4 $ $Date: 2004/02/28 11:47:20 $
- Author:
- Avalon Development Team
Method Summary |
java.sql.Connection |
getConnection()
Not supported in this component. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
DefaultIndexedDataSourceCluster
public DefaultIndexedDataSourceCluster()
getConnection
public java.sql.Connection getConnection()
throws java.sql.SQLException
- Not supported in this component. Will throw a NoValidConnectionException.
- Specified by:
getConnection
in interface DataSourceComponent
- Returns:
- Connection a valid connection for you to use
- Throws:
java.sql.SQLException
Copyright © 1997-2005 The Apache Software Foundation. All Rights Reserved.