The DBAbstract Server is used to act as a middleware server between client and
any database server that can be accessed using a JDBC Driver.
The
DBAbstract Server can be configured in a number of ways at startup but this is
not the aim of this section.
This section will explain the usage of the
SampleServer class in the ro.raducora.samples package.
A server is
started on a user assigned port, with 3 assigned properties files: one for the
server, one for the ClientDBAdapter and one for the ClientTCPAdapter.
The
server starter also starts a Telnet Server on the PORT consecutively following
the DBAbstract Server Port.The Telnet Server usage is intuitive and allows for
server debugging and properties reloading from file without stopping the server.
Command Usage: java ro.raducora.samples.SampleServer port
config_tcp_path.xml config_db_path.xml config_serv_path.xml
A sample of parameters passing to the SampleServer class follows:
java -server ro.raducora.samples.SampleServer 11111 ./conf/ClientTCP.xml
./conf/ClientDB.xml ./conf/Server.xml
There is provided a shell script called "startConfServer.bat"
that passes the parameters above to the SampleServer class.
All other
server configurations are tuned from the properties xml files.
The Server XML Properties file allows for tuning two properties of the server:
This allows to specify a maximum number of connections the server will accept.The property is compulsory.
When a client connects to the server through another DBAbstract Server, the server that finally solved the connection to a real database can send a RedirectException to the client which will connect directly to it.
The "Server.xml" sample configuration file in the "conf/"
directory contains settings to alter the behaviour for the 2 properties
mentioned above. The defaults should be kept.
A configuration file of this type can be validated against the Server.dtd file.
The ClientDB Properties file is used to configure DBAbstract Server access to
particular databases.
When the client sends the database name to the
DBAbstract Server, the database name is actually used as a key to find the
properties for the connection.
A sample configuration for a database
follows below:
<!--The key to search for represents the database name the
client connects to -->
<DATABASE NAME="shop">
<!--The real name of the
database can be different from the name the client knows and uses.
In this way, connections can be established to databases with the
same name but with different vendor implementations by providing
different key names for each real database name-->
<REAL_DATABASE_NAME>shop</REAL_DATABASE_NAME>
<!--The subprotocol to use with the JDBC Driver used to
connect to the server-->
<DB_SERVER_SUBPROTOCOL>mysql</DB_SERVER_SUBPROTOCOL>
<!--The real database server hostname used in the database
connection. For ODBC connections, this should be an empty tag. It
can be of form: HOSTNAME[:PORT]-->
<DB_SERVER_HOSTNAME>localhost</DB_SERVER_HOSTNAME>
<!--Path to directory where jar driver is held for the
connection. It must be an empty tag for ODBC connections.-->
<DRIVER_JAR_PATH>e:/lib/</DRIVER_JAR_PATH>
<!--The jar file where the driver is held for the
connection. It must be an empty tag for ODBC connections.-->
<DRIVER_JAR_NAME>mysql-connector-java-3.1.0-alpha-bin.jar</DRIVER_JAR_NAME>
<!--The Driver class name to load.-->
<DRIVER_CLASS_NAME>com.mysql.jdbc.Driver</DRIVER_CLASS_NAME>
<!--Minimum Number of opened connections in a pool.-->
<MIN_NO_CONN>2</MIN_NO_CONN>
<!--Maximum Number of allowed connections in a pool.-->
<MAX_NO_CONN>100</MAX_NO_CONN>
</DATABASE>
There is also a DEFAULTS Setting which is used as a fallback if the database name isn't found in the configuration file.
The ClientTCP properties file is used to provide a DBAbstract server the possibility to access another
DBAbstract server in order to find a database for a particular client.
This is usually used as a fallback if the DbAbstract Server cannot access directly a database to solve the
connection and has to call another server which could solve the connection to a real database.
A sample configuration for a database follows below:
<!-- #example of DBAbstract Server and Port for a specific database name -->
<DATABASE NAME="shop">
<SERVER_IP>localhost</SERVER_IP>
<SERVER_PORT>11111</SERVER_PORT>
</DATABASE>
There is also a DEFAULTS Setting which is used as a fallback if the database name isn't found in the configuration file.