#
# Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0,
# or the Eclipse Distribution License v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#

#DB Connection properties
#These properties are usually used in Maven as a substitution variables for a filtering resources.
#Second typical usage is as a system property passed to the unit test

#Fully qualified name of Java class of JDBC driver (see documentation of JDBC driver)
db.driver=org.apache.derby.jdbc.ClientDriver

#JDBC driver used in datasources with global/distributed transactions (XA - extended architecture)
db.xa.driver=org.apache.derby.jdbc.ClientDriver
#db.xa.driver=org.apache.derby.jdbc.ClientXADataSource

#Databse URL. Usually there is hostname (localhost), port (default is used - Derby 1527), DB name (ecltests).
#Some additional parameters could be passed there (.../memory:... - start in InMemory mode, create=true - create DB if not exists).
#URL structure depends on JDBC (see documentation of JDBC driver)
db.url=jdbc:derby://localhost/memory:ecltests;create=true

#Database username
db.user=root

#Database password
db.pwd=root

#Database additional properties passed to the JDBC driver. Sometimes info specified there is duplicated with DB URL parameters.
db.properties=createDatabase=create;databaseName=memory:ecltests

#EclipseLink specific property used as a hint to identify database type/producer (Apache Derby, Oracle RDBMS, MySQL...)
db.platform=org.eclipse.persistence.platform.database.DerbyPlatform

db.name=ecltests

#Datasources are used in JEE servers during server side tests.
#These properties are used by cargo-maven2-plugin to set datasource type
#Datasource transaction support (local - java.sql.Driver, distributed/global XA -javax.sql.XADataSource). Not every JDBC driver/DB has native XA support.
datasource.type=java.sql.Driver
#datasource.type=javax.sql.XADataSource
datasource.transactionsupport=LOCAL_TRANSACTION
#datasource.transactionsupport=XA_TRANSACTION


#EclipseLink session log level. Used as a substitution property to set value in <log-level> element in session configuration.
logging.level=info
