mondrian.spi
Interface DialectFactory

All Known Implementing Classes:
DialectManager.CachingDialectFactory, DialectManager.ChainDialectFactory, DialectManager.ConstructorDialectFactory, JdbcDialectFactory

public interface DialectFactory

Factory that creates Dialect objects.

If you create a class that implements Dialect, you may optionally provide a factory by creating a constant field in that class. For example:

 public class MyDialect implements Dialect {
     public static final DialectFactory FACTORY =
         new JdbcDialectFactory(MyDialect.class, null);

     public MyDialect(Connection connection) {
         ...
     }

     ...
 }

(The field must be public, static, final, named "FACTORY", of type DialectFactory or a subclass, and its value must not be null.)

Explicitly providing a factory gives you more control about how dialects are produced.

If you do not provide such a field, Mondrian requires that the dialect has a public constructor that takes a Connection as a parameter, and automatically creates a factory that calls the class's public constructor.

However, an explicit DialectFactory is superior:

  1. When a dialect cannot handle a given connection, a dialect factory can return null, whereas a dialect's constructor can only throw an exception.
  2. A dialect factory can maintain a pool or cache of dialect objects.

If your dialect is a subclass of JdbcDialectImpl you may wish to use a dialect factory that is a subclass of JdbcDialectFactory.

Since:
Jan 13, 2009
Version:
$Id: //open/mondrian/src/main/mondrian/spi/DialectFactory.java#2 $
Author:
jhyde

Method Summary
 Dialect createDialect(javax.sql.DataSource dataSource, java.sql.Connection connection)
          Creates a Dialect.
 

Method Detail

createDialect

Dialect createDialect(javax.sql.DataSource dataSource,
                      java.sql.Connection connection)
Creates a Dialect.

If the dialect cannot handle this connection, returns null.

Parameters:
dataSource - JDBC data source
connection - JDBC connection
Returns:
dialect for this connection, or null if this factory's dialect is not appropriate for the connection
Throws:
java.lang.RuntimeException - if underlying systems give an error

Get Mondrian at SourceForge.net. Fast, secure and free Open Source software downloads