<?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>hsqldb</databaseProvider>
	</properties>

	<properties-hsqldb>
		<!-- JDBC properties for a HSQLDB Database connection -->
		<!-- Required jar file: hsqldb.jar -->
		<jdbcClass>org.hsqldb.jdbcDriver</jdbcClass>
		<jdbcURL>jdbc:hsqldb:file:hsqldb/sample;shutdown=true</jdbcURL>
		<jdbcUser>sa</jdbcUser>
		<jdbcPwd></jdbcPwd>
		<!-- Empire-db driver configuration -->
		<empireDBDriverClass>org.apache.empire.db.hsql.DBDatabaseDriverHSql</empireDBDriverClass>
		<empireDBDriverProperites>
			<!-- no properties -->
		</empireDBDriverProperites>
	</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 -->
		<empireDBDriverClass>org.apache.empire.db.mysql.DBDatabaseDriverMySQL</empireDBDriverClass>
		<empireDBDriverProperites>
			<databaseName>DBSAMPLE</databaseName>
		</empireDBDriverProperites>
	</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 -->
		<empireDBDriverClass>org.apache.empire.db.postgresql.DBDatabaseDriverPostgreSQL</empireDBDriverClass>
		<empireDBDriverProperites>
			<databaseName>DBSAMPLE</databaseName>
		</empireDBDriverProperites>
	</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 -->
		<empireDBDriverClass>org.apache.empire.db.h2.DBDatabaseDriverH2</empireDBDriverClass>
		<empireDBDriverProperites>
			<databaseName>DBSAMPLE</databaseName>
		</empireDBDriverProperites>
	</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 -->
		<empireDBDriverClass>org.apache.empire.db.derby.DBDatabaseDriverDerby</empireDBDriverClass>
		<empireDBDriverProperites>
			<databaseName>DBSAMPLE</databaseName>
		</empireDBDriverProperites>
	</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:@192.168.0.2:1521:ora10</jdbcURL>
		<jdbcUser>DBSAMPLE</jdbcUser>
		<jdbcPwd>DBSAMPLE</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<empireDBDriverClass>org.apache.empire.db.oracle.DBDatabaseDriverOracle</empireDBDriverClass>
		<empireDBDriverProperites>
			<!-- no properties -->
		</empireDBDriverProperites>
	</properties-oracle>

	<properties-sqlserver>
		<!-- JDBC properties for a Microsoft SQL-Server Database connection -->
		<jdbcClass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcClass>
		<jdbcURL>jdbc:sqlserver://esteamsvr12\sql14</jdbcURL>
		<jdbcUser>jdbcUser</jdbcUser>
		<jdbcPwd>jdbcPwd</jdbcPwd>
		<!-- Empire-db driver configuration -->
		<empireDBDriverClass>org.apache.empire.db.sqlserver.DBDatabaseDriverMSSQL</empireDBDriverClass>
		<empireDBDriverProperites>
			<databaseName>DBSAMPLE</databaseName>
			<useSequenceTable>false</useSequenceTable>
			<!-- useDateTime2: set to false for databases using DATETIME for timestamps instead of DATETIME2 -->
			<useDateTime2>true</useDateTime2>
		</empireDBDriverProperites>
	</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.TTCCLayout"/ -->
			<layout class="org.apache.log4j.PatternLayout">
				<!-- param name="ConversionPattern" value="NSB(%c) %-5p %m	at %l%n"/ -->
				<param name="ConversionPattern" value="%-5p [%d{yyyy/MM/dd HH:mm}]: %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="warn"/>
			<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="default"/>
		</logger>

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

	</log4j:configuration>
	
</config>
