velosurf.sql
Class Database

java.lang.Object
  extended by velosurf.sql.Database

public class Database
extends java.lang.Object

This class encapsulates a connection to the database and contains all the stuff relative to it.

To get a new instance, client classes should call one of the getInstance static methods.

Author:
Claude Brisson

Field Summary
protected  int caching
          default caching mode
static int CASE_SENSITIVE
           
static int CASE_UNKNOWN
          case-sensitive policy
protected  int caseSensivity
          case-sensivity
protected  ConnectionPool connectionPool
          Pool of connections
private static java.util.Map connectionsByConfigFile
          map config files -> instances
private static java.util.Map connectionsByParams
          map parameters -> instances
private static int contextCase
          case-sensivity for context
private  Cryptograph cryptograph
          cryptograph used to encrypt/decrypt database ids
protected  java.lang.String driverClass
          driver class name, if provided in the config file
protected  DriverInfo driverInfo
          driver infos (database vendor specific)
protected  boolean driverLoaded
          whether the JDBC driver has been loaded
protected  java.util.Map<java.lang.String,Entity> entities
          map name->entity
static int LOWERCASE
           
protected  int maxConnections
           
protected  int minConnections
           
protected  java.lang.String password
          database user's password
protected  PreparedStatementPool preparedStatementPool
          pool of prepared statements
protected  boolean readOnly
          default access mode
protected  ReverseEngineer reverseEngineer
           
protected  Entity rootEntity
          root entity that contains all root attributes and actions
protected  java.lang.String schema
          schema
private  java.lang.String seed
          random seed used to initialize the cryptograph
private static java.util.Map sharedCatalog
          Shared catalog, to share entities among instances.
protected  StatementPool statementPool
          pool of statements
protected  ConnectionPool transactionConnectionPool
          Pool of connections for transactions
protected  PreparedStatementPool transactionPreparedStatementPool
          pool of prepared statements for transactions
protected  StatementPool transactionStatementPool
          pool of statements for transactions
static int UPPERCASE
           
protected  java.lang.String url
          database url
protected  java.lang.String user
          database user
 
Constructor Summary
private Database()
          builds a new connection
private Database(java.lang.String user, java.lang.String password, java.lang.String url)
          builds a new connection
private Database(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver)
          builds a new connection
private Database(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver, java.lang.String schema)
          builds a new connection
 
Method Summary
 java.lang.String adaptCase(java.lang.String identifier)
          changes to lowercase or uppercase if needed
static java.lang.String adaptContextCase(java.lang.String str)
           
 void addEntity(Entity entity)
          add a new entity
 void close()
          close the connection
protected  void connect()
           
 java.lang.String deobfuscate(java.lang.Object value)
          de-obfuscate the given value
 void displayStats()
          display statistics about the statements pools
 java.lang.Object evaluate(java.lang.String query)
          evaluate a query to a scalar
 Action getAction(java.lang.String name)
          get a root action
 Attribute getAttribute(java.lang.String name)
          get a root attribute
 int getCaseSensivity()
          get database case-sensivity
 ConnectionWrapper getConnection()
          get a jdbc connection
 DriverInfo getDriverInfo()
          get database vendor
 java.util.Map<java.lang.String,Entity> getEntities()
           
 Entity getEntity(java.lang.String name)
          get an existing entity
 Entity getEntityCreate(java.lang.String name)
          get a named entity or creeate it if it doesn't exist
static Database getInstance(java.io.InputStream config)
          get a new connection
static Database getInstance(java.io.InputStream config, XIncludeResolver xincludeResolver)
          get a new connection
static Database getInstance(java.lang.String configFilename)
          get a unique Database from config filename
static Database getInstance(java.lang.String user, java.lang.String password, java.lang.String url)
          get a unique Database from connection params
static Database getInstance(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver)
          get a unique Database from connection params
static Database getInstance(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver, java.lang.String schema)
          get a unique Database from connection params
private  java.lang.Integer getMagicNumber(java.lang.String schema)
          get the integer key used to share schema entities among instances
 ReverseEngineer getReverseEngineer()
           
 Entity getRootEntity()
           
 java.lang.String getSchema()
          get the schema
 ConnectionWrapper getTransactionConnection()
          get the underlying jdbc connection used for transactions, and mark it right away as busy
protected  void initCryptograph()
           
protected  void loadDriver()
          loads the appropriate driver
 java.lang.String obfuscate(java.lang.Object value)
          obfuscate the given value
protected  void open(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver)
          open the connection
protected  void open(java.lang.String user, java.lang.String password, java.lang.String url, java.lang.String driver, java.lang.String schema)
          open the connection
 PooledPreparedStatement prepare(java.lang.String query)
          prepare a query
 RowIterator query(java.lang.String query)
          issue a query
 RowIterator query(java.lang.String query, Entity entity)
          issue a query, knowing the resulting entity
private  void readConfigFile(java.io.InputStream config, XIncludeResolver xincludeResolver)
          read configuration from the given input stream
protected  void setCaching(int cachingMethod)
           
 void setCase(int caseSensivity)
           
 void setDriver(java.lang.String driverClass)
           
 void setMaxConnections(int maxConnections)
           
 void setMinConnections(int minConnections)
           
 void setPassword(java.lang.String password)
           
protected  void setReadOnly(boolean readOnly)
           
 void setSchema(java.lang.String schema)
           
 void setSeed(java.lang.String seed)
           
 void setURL(java.lang.String url)
           
 void setUser(java.lang.String user)
           
 PooledPreparedStatement transactionPrepare(java.lang.String query)
          prepare a query which is part of a transaction
 int transactionUpdate(java.lang.String query)
          issue an update query that is part of a transaction
 int update(java.lang.String query)
          issues an update query
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

user

protected java.lang.String user
database user


password

protected java.lang.String password
database user's password


url

protected java.lang.String url
database url


schema

protected java.lang.String schema
schema


driverLoaded

protected boolean driverLoaded
whether the JDBC driver has been loaded


driverClass

protected java.lang.String driverClass
driver class name, if provided in the config file


connectionPool

protected ConnectionPool connectionPool
Pool of connections


minConnections

protected int minConnections

maxConnections

protected int maxConnections

transactionConnectionPool

protected ConnectionPool transactionConnectionPool
Pool of connections for transactions


statementPool

protected StatementPool statementPool
pool of statements


transactionStatementPool

protected StatementPool transactionStatementPool
pool of statements for transactions


preparedStatementPool

protected PreparedStatementPool preparedStatementPool
pool of prepared statements


transactionPreparedStatementPool

protected PreparedStatementPool transactionPreparedStatementPool
pool of prepared statements for transactions


readOnly

protected boolean readOnly
default access mode


caching

protected int caching
default caching mode


entities

protected java.util.Map<java.lang.String,Entity> entities
map name->entity


rootEntity

protected Entity rootEntity
root entity that contains all root attributes and actions


driverInfo

protected DriverInfo driverInfo
driver infos (database vendor specific)


seed

private java.lang.String seed
random seed used to initialize the cryptograph


cryptograph

private Cryptograph cryptograph
cryptograph used to encrypt/decrypt database ids


CASE_UNKNOWN

public static final int CASE_UNKNOWN
case-sensitive policy

See Also:
Constant Field Values

CASE_SENSITIVE

public static final int CASE_SENSITIVE
See Also:
Constant Field Values

UPPERCASE

public static final int UPPERCASE
See Also:
Constant Field Values

LOWERCASE

public static final int LOWERCASE
See Also:
Constant Field Values

caseSensivity

protected int caseSensivity
case-sensivity


contextCase

private static int contextCase
case-sensivity for context


connectionsByParams

private static java.util.Map connectionsByParams
map parameters -> instances


connectionsByConfigFile

private static java.util.Map connectionsByConfigFile
map config files -> instances


sharedCatalog

private static java.util.Map sharedCatalog
Shared catalog, to share entities among instances.
Key is hashcode of (name+password+url+schema), value is an entities map.


reverseEngineer

protected ReverseEngineer reverseEngineer
Constructor Detail

Database

private Database()
builds a new connection


Database

private Database(java.lang.String user,
                 java.lang.String password,
                 java.lang.String url)
          throws java.sql.SQLException
builds a new connection

Parameters:
user - user name
password - password
url - database url
Throws:
java.sql.SQLException - thrown by the database engine

Database

private Database(java.lang.String user,
                 java.lang.String password,
                 java.lang.String url,
                 java.lang.String driver)
          throws java.sql.SQLException
builds a new connection

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
Throws:
java.sql.SQLException - thrown by the database engine

Database

private Database(java.lang.String user,
                 java.lang.String password,
                 java.lang.String url,
                 java.lang.String driver,
                 java.lang.String schema)
          throws java.sql.SQLException
builds a new connection

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
schema - schema name to use
Throws:
java.sql.SQLException - thrown by the database engine
Method Detail

getInstance

public static Database getInstance(java.lang.String user,
                                   java.lang.String password,
                                   java.lang.String url)
                            throws java.sql.SQLException
get a unique Database from connection params

Parameters:
user - user name
password - password
url - database url
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine

getInstance

public static Database getInstance(java.lang.String user,
                                   java.lang.String password,
                                   java.lang.String url,
                                   java.lang.String driver)
                            throws java.sql.SQLException
get a unique Database from connection params

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine

getInstance

public static Database getInstance(java.lang.String user,
                                   java.lang.String password,
                                   java.lang.String url,
                                   java.lang.String driver,
                                   java.lang.String schema)
                            throws java.sql.SQLException
get a unique Database from connection params

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
schema - schema
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine

getInstance

public static Database getInstance(java.lang.String configFilename)
                            throws java.sql.SQLException,
                                   java.io.FileNotFoundException,
                                   java.io.IOException
get a unique Database from config filename

Parameters:
configFilename - config filename
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine
java.io.FileNotFoundException
java.io.IOException

getInstance

public static Database getInstance(java.io.InputStream config)
                            throws java.sql.SQLException,
                                   java.io.IOException
get a new connection

Parameters:
config - config filename
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine
java.io.IOException

getInstance

public static Database getInstance(java.io.InputStream config,
                                   XIncludeResolver xincludeResolver)
                            throws java.sql.SQLException,
                                   java.io.IOException
get a new connection

Parameters:
config - config filename
Returns:
a new connection
Throws:
java.sql.SQLException - thrown by the database engine
java.io.IOException

open

protected void open(java.lang.String user,
                    java.lang.String password,
                    java.lang.String url,
                    java.lang.String driver)
             throws java.sql.SQLException
open the connection

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
Throws:
java.sql.SQLException - thrown by the database engine

open

protected void open(java.lang.String user,
                    java.lang.String password,
                    java.lang.String url,
                    java.lang.String driver,
                    java.lang.String schema)
             throws java.sql.SQLException
open the connection

Parameters:
user - user name
password - password
url - database url
driver - driver java class name
schema - schema name
Throws:
java.sql.SQLException - thrown by the database engine

connect

protected void connect()
                throws java.sql.SQLException
Throws:
java.sql.SQLException

setReadOnly

protected void setReadOnly(boolean readOnly)

setCaching

protected void setCaching(int cachingMethod)

setUser

public void setUser(java.lang.String user)

setPassword

public void setPassword(java.lang.String password)

setURL

public void setURL(java.lang.String url)

setDriver

public void setDriver(java.lang.String driverClass)

setSchema

public void setSchema(java.lang.String schema)

setMinConnections

public void setMinConnections(int minConnections)

setMaxConnections

public void setMaxConnections(int maxConnections)

setSeed

public void setSeed(java.lang.String seed)

setCase

public void setCase(int caseSensivity)

loadDriver

protected void loadDriver()
loads the appropriate driver


initCryptograph

protected void initCryptograph()

getReverseEngineer

public ReverseEngineer getReverseEngineer()

query

public RowIterator query(java.lang.String query)
                  throws java.sql.SQLException
issue a query

Parameters:
query - an SQL query
Returns:
the resulting RowIterator
Throws:
java.sql.SQLException

query

public RowIterator query(java.lang.String query,
                         Entity entity)
                  throws java.sql.SQLException
issue a query, knowing the resulting entity

Parameters:
query - an SQL query
entity - the resulting entity
Returns:
return the resulting row iterator
Throws:
java.sql.SQLException

evaluate

public java.lang.Object evaluate(java.lang.String query)
evaluate a query to a scalar

Parameters:
query - an sql query
Returns:
the resulting scalar

prepare

public PooledPreparedStatement prepare(java.lang.String query)
prepare a query

Parameters:
query - an sql query
Returns:
the pooled prepared statement corresponding to the query

transactionPrepare

public PooledPreparedStatement transactionPrepare(java.lang.String query)
prepare a query which is part of a transaction

Parameters:
query - an sql query
Returns:
the prepared statemenet corresponding to the query

update

public int update(java.lang.String query)
issues an update query

Parameters:
query - an sql query
Returns:
the number of affected rows

transactionUpdate

public int transactionUpdate(java.lang.String query)
issue an update query that is part of a transaction

Parameters:
query - an sql query
Returns:
the number of affected rows

close

public void close()
           throws java.sql.SQLException
close the connection

Throws:
java.sql.SQLException - thrown by the database engine

displayStats

public void displayStats()
display statistics about the statements pools


getConnection

public ConnectionWrapper getConnection()
                                throws java.sql.SQLException
get a jdbc connection

Returns:
a jdbc connection wrapper (which extends java.sql.Connection)
Throws:
java.sql.SQLException

getTransactionConnection

public ConnectionWrapper getTransactionConnection()
                                           throws java.sql.SQLException
get the underlying jdbc connection used for transactions, and mark it right away as busy

Returns:
a jdbc connection wrapper (which extends java.sql.Connection)
Throws:
java.sql.SQLException

readConfigFile

private void readConfigFile(java.io.InputStream config,
                            XIncludeResolver xincludeResolver)
                     throws java.sql.SQLException,
                            java.io.IOException
read configuration from the given input stream

Parameters:
config - input stream on the config file
Throws:
java.sql.SQLException - thrown by the database engine
java.io.IOException

adaptCase

public java.lang.String adaptCase(java.lang.String identifier)
changes to lowercase or uppercase if needed

Parameters:
identifier -
Returns:
changed identifier

addEntity

public void addEntity(Entity entity)
add a new entity


getRootEntity

public Entity getRootEntity()

getEntityCreate

public Entity getEntityCreate(java.lang.String name)
get a named entity or creeate it if it doesn't exist

Parameters:
name - name of an entity
Returns:
the named entity

getEntity

public Entity getEntity(java.lang.String name)
get an existing entity

Parameters:
name - the name of an entity
Returns:
the named entity

getEntities

public java.util.Map<java.lang.String,Entity> getEntities()

getAttribute

public Attribute getAttribute(java.lang.String name)
get a root attribute

Parameters:
name - name of an attribute
Returns:
the named attribute

getAction

public Action getAction(java.lang.String name)
get a root action

Parameters:
name - name of an attribute
Returns:
the named attribute

obfuscate

public java.lang.String obfuscate(java.lang.Object value)
obfuscate the given value

Parameters:
value - value to obfuscate
Returns:
obfuscated value

deobfuscate

public java.lang.String deobfuscate(java.lang.Object value)
de-obfuscate the given value

Parameters:
value - value to de-obfuscate
Returns:
obfuscated value

getDriverInfo

public DriverInfo getDriverInfo()
get database vendor

Returns:
the database vendor

getCaseSensivity

public int getCaseSensivity()
get database case-sensivity

Returns:
case-sensivity

getMagicNumber

private java.lang.Integer getMagicNumber(java.lang.String schema)
get the integer key used to share schema entities among instances


getSchema

public java.lang.String getSchema()
get the schema

Returns:
the schema

adaptContextCase

public static java.lang.String adaptContextCase(java.lang.String str)


~ooOoo~