Tuscany RDB DAS Database Setup Utility

 

This utility provides a jar file to be used by RDB DAS sample applications (web or standalone) to do database setup. 


So far  the samples provided canned pre-created Derby database with tables and data.   There was no convenient way to  refresh  table  data  during  the samples  execution.  This utility  supports Derby database at present and uses a config file to get the setup information.


APIs

public DBInitializer() – uses default provided ConfigFile CannedSampleDBConfig.xml

public DBInitializer(String ConfigFileLocation)

public DBInitializer (InputStream ConfigFileStream)

public void initializeDatabase(boolean clean) - Create database tables and fill data. If clean=true, all tables will be dropped and recreated.

public void initializeDatabaseData(boolean clean) - create database data (with clean=true, if a table has pre-existing data, it will be deleted first)

public void refreshDatabaseData() – calls initializeDatabase(clean=true)

public boolean isDatabaseReady() - will return true, if the tables exist in the database

public boolean isDatabasePopulated() - will return true, if the tables have data

 

Assumptions:

<table> element lists tables in proper sequence, i.e. parent tables first and then child tables. This sequence will be used in create,insert,delete,drop
to take care of referential integrity.

The config file required by utility supports the following features through different attributes and elements. Sample xml file is shown at the end.

<ConnectionInfo>

This element provides connection specific information - like vendor specific database URL, user name, password etc. If the DataSource is

provided by the web container, user needs to only fill dataSource attribute in this. In case of standalone J2SE samples, user needs to fill ConnectionProperties
element inside ConnectionInfo. These two ways of connection specification are mutually exclusive.

<table>

  This element needs to specify the table names required by the sample. Only these tables will be considered for creation, data population. This

gives flexibility to the user to choose the required set of tables based on the sample's requirement. It also needs to specify in the attributes, the Create SQL command used to create this table. <table> has sequence element <row> which is used to provide the data to be populated in the table.

Set Up


To use this utility, include its jar and required database driver's jar in the classpath. Provide the config file used by this utility , similar to the example below, in the source folder of the sample.

DBConfig.xml example

 

<?xml version="1.0" encoding="ASCII"?>

<!--

  Licensed to the Apache Software Foundation (ASF) under one

  or more contributor license agreements.  See the NOTICE file

  distributed with this work for additional information

  regarding copyright ownership.  The ASF licenses this file

  to you under the Apache License, Version 2.0 (the

  "License"); you may not use this file except in compliance

  with the License.  You may obtain a copy of the License at

 

  http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreed to in writing,

  software distributed under the License is distributed on an

  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

  KIND, either express or implied.  See the License for the

  specific language governing permissions and limitations

  under the License.

 -->

<DBConfig xmlns="http:///org.apache.tuscany.das.rdb/dbconfig.xsd">

            <ConnectionInfo>

                        <ConnectionProperties

                                    driverClass="org.apache.derby.jdbc.EmbeddedDriver"

                                    databaseURL="jdbc:derby:target/dastest; create = true"

                                    loginTimeout="600000"/>

            </ConnectionInfo>

            <Table name="COMPANY"

            SQLCreate="CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(30), EOTMID INTEGER)" >

                        <row>51, 'ACME Publishing', 0</row>

                        <row>52, 'Do-rite plumbing', 0</row>

                        <row>53, 'MegaCorp', 0</row>

            </Table>

            <Table name="DEPARTMENT"

              SQLCreate="CREATE TABLE DEPARTMENT (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY, NAME  

              VARCHAR(30),LOCATION VARCHAR(30), DEPNUMBER VARCHAR(10),COMPANYID INT)" >              

                        <row>'Advanced Technologies', 'NY', '123', 1</row>

                        <row>'Default Name', '', '', 51</row>

                        <row>'Default Name', '', '', 51</row>

                        <row>'Default Name', '', '', 51</row>

                        <row>'Default Name', '', '', 51</row>

                        <row>'Default Name', '', '', 51</row>

                        <row>'Default Name', '', '', 51</row>

            </Table>

            <Table name="EMPLOYEE"

            SQLCreate="CREATE TABLE EMPLOYEE (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,NAME

            VARCHAR(30),SN VARCHAR(10), MANAGER SMALLINT, DEPARTMENTID INT)" >

                        <row>'John Jones','E0001',0,12</row>

                        <row>'Mary Smith','E0002',1,null</row>

                        <row>'Jane Doe','E0003',0,12</row>

                        <row>'Al Smith','E0004',1,12</row>

            </Table>

</DBConfig>