<?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.jdbc.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>
