<?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>
		<schemaName>DBSAMPLE</schemaName>
	</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>empire-db</jdbcPwd>
		<schemaName>DBSAMPLE</schemaName>
	</properties-mysql>

	<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>
		<schemaName>DBSAMPLE</schemaName>
	</properties-oracle>

	<properties-sqlserver>
		<!-- JDBC properties for a Microsoft SQL-Server Database connection -->
		<!-- Required jar file: sqljdbc.jar -->
		<jdbcClass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcClass>
		<jdbcURL>jdbc:sqlserver://192.168.0.2:1433</jdbcURL>
		<jdbcUser>sa</jdbcUser>
		<jdbcPwd>empire-db</jdbcPwd>
		<schemaName>DBSAMPLE</schemaName>
	</properties-sqlserver>
	
	<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.struts2" additivity="false">
			<level value="warn"/>
			<appender-ref ref="default"/>
		</logger>
		
		<logger name="org.apache.empire.struts2.websample" additivity="false">
			<level value="debug"/>
			<appender-ref ref="default"/>
		</logger>
	
		<root>
			<priority value="info"/>
			<appender-ref ref="default"/>
		</root>

	</log4j:configuration>
	
</config>
