<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<config>

	<properties>
		<!-- provider name must match the property-section containing the connection data -->
		<databaseProvider>sqlserver</databaseProvider>
	</properties>

	<properties-hsqldb>
		<!-- JDBC properties for a HSQLDB Database connection -->
		<!-- Required jar file: hsqldb.jar -->
		<jdbcClass>org.hsqldb.jdbc.JDBCDriver</jdbcClass>
		<jdbcURL>jdbc:hsqldb:file:hsqldb/sample;shutdown=true</jdbcURL>
		<jdbcUser>sa</jdbcUser>
		<jdbcPwd></jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.hsql.DBMSHandlerHSql</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<!-- no properties -->
		</dbmsHandlerProperites>
	</properties-hsqldb>

	<properties-mysql>
		<!-- JDBC properties for a MySQL Database connection -->
		<!-- Required jar file: mysql-connector-java-5.1.6-bin.jar -->
		<jdbcClass>com.mysql.jdbc.Driver</jdbcClass>
		<jdbcURL>jdbc:mysql://localhost</jdbcURL>
		<jdbcUser>root</jdbcUser>
		<jdbcPwd>esteam</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.mysql.DBMSHandlerMySQL</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<databaseName>DBSAMPLE</databaseName>
		</dbmsHandlerProperites>
	</properties-mysql>
	
	<properties-postgresql>
		<!-- JDBC properties for a PostreSQL Database connection -->
		<!-- Required jar file: postgresql-8.3-603.jdbc4.jar -->
		<jdbcClass>org.postgresql.Driver</jdbcClass>
		<jdbcURL>jdbc:postgresql://localhost</jdbcURL>
		<jdbcUser>postgres</jdbcUser>
		<jdbcPwd>postgres</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.postgresql.DBMSHandlerPostgreSQL</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<databaseName>DBSAMPLE</databaseName>
		</dbmsHandlerProperites>
	</properties-postgresql>
	
	<properties-h2>
		<!-- JDBC properties for a H2 Database connection -->
		<!-- Required jar file: h2-1.1.107.jar -->
		<jdbcClass>org.h2.Driver</jdbcClass>
		<jdbcURL>jdbc:h2:h2/DBSAMPLE</jdbcURL>
		<jdbcUser>sa</jdbcUser>
		<jdbcPwd></jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.h2.DBMSHandlerH2</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<databaseName>DBSAMPLE</databaseName>
		</dbmsHandlerProperites>
	</properties-h2>
	
	<properties-derby>
		<!-- JDBC properties for a Derby Database connection -->
		<!-- Required jar file: derby-10.4.2.0.jar -->
		<jdbcClass>org.apache.derby.jdbc.EmbeddedDriver</jdbcClass>
		<jdbcURL>jdbc:derby:derby/DBSAMPLE;create=true</jdbcURL>
		<jdbcUser></jdbcUser>
		<jdbcPwd></jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.derby.DBMSHandlerDerby</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<databaseName>DBSAMPLE</databaseName>
		</dbmsHandlerProperites>
	</properties-derby>

	<properties-oracle>
		<!-- JDBC properties for an Oracle Database connection -->
		<!-- Required jar file: ojdbc14.jar -->
		<jdbcClass>oracle.jdbc.driver.OracleDriver</jdbcClass>
		<jdbcURL>jdbc:oracle:thin:@esteams12:1521:ora12</jdbcURL>
		<jdbcUser>DBSAMPLE</jdbcUser>
		<jdbcPwd>DBSAMPLE</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.oracle.DBMSHandlerOracle</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<!-- no properties -->
		</dbmsHandlerProperites>
	</properties-oracle>

	<properties-sqlserver>
		<!-- JDBC properties for a Microsoft SQL-Server Database connection -->
		<jdbcClass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcClass>
		<jdbcURL>jdbc:sqlserver://esteams12\sql17</jdbcURL>
		<jdbcUser>jdbcUser</jdbcUser>
		<jdbcPwd>jdbcPwd</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<dbmsHandlerClass>org.apache.empire.dbms.sqlserver.DBMSHandlerMSSQL</dbmsHandlerClass>
		<dbmsHandlerProperites>
			<databaseName>DBSAMPLE</databaseName>
			<useSequenceTable>false</useSequenceTable>
			<!-- useDateTime2: set to false for databases using DATETIME for timestamps instead of DATETIME2 -->
			<useDateTime2>true</useDateTime2>
		</dbmsHandlerProperites>
	</properties-sqlserver>
	
	<!-- log4j configuration node -->
	<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

		<appender name="default" class="org.apache.log4j.ConsoleAppender">
			<layout class="org.apache.log4j.PatternLayout">
				<param name="ConversionPattern" value="%-5p : %m		at %l %n"/>
			</layout>
		</appender>
	
		<!-- log detail configuration -->
		<logger name="org.apache.empire.xml" additivity="false">
			<level value="info"/>
			<appender-ref ref="default"/>
		</logger>

		<logger name="org.apache.empire.commons" additivity="false">
			<level value="warn"/>
			<appender-ref ref="default"/>
		</logger>

		<logger name="org.apache.empire.db" additivity="false">
			<level value="info"/>
			<appender-ref ref="default"/>
		</logger>

		<logger name="org.apache.empire.db.context" additivity="false">
			<level value="debug"/>
			<appender-ref ref="default"/>
		</logger>

		<!-- Set this level to "debug" to log all SQL-Statements -->		
		<logger name="org.apache.empire.db.DBDatabase" additivity="false">
			<level value="debug"/>
			<appender-ref ref="default"/>
		</logger>

		<logger name="org.apache.empire.samples.db" additivity="false">
			<level value="debug"/>
			<appender-ref ref="sample"/>
		</logger>

		<root>
			<priority value="info"/>
			<appender-ref ref="default"/>
		</root>

	</log4j:configuration>
	
</config>
