#*
# 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.
*#
# -------------------------------------------------------------------
#
# This is the configuration file for Torque.
#
# Note that strings containing "," (comma) characters must backslash
# escape the comma (i.e. '\,')
#
# -------------------------------------------------------------------
#
#  T O R Q U E  P R O P E R T I E S
#
# -------------------------------------------------------------------
# These are your database settings. Look in the
# org.apache.torque.pool.* packages for more information.
#
# The parameters to connect to the default database.  You MUST
# configure these properly.
# -------------------------------------------------------------------



#
# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
# 
#
torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
torque.dsfactory.${turbine_database_name}.jndi.ttl=300000

# -------------------------------------------------------------------
#
# Shared Pool Data Source Factory
#
# -------------------------------------------------------------------
#torque.database.default=${turbine_database_name}
torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}

#torque.database.${turbine_database_name}.user=${turbine_database_user}
#torque.database.${turbine_database_name}.password=${turbine_database_password}
#
#torque.defaults.pool.maxActive =       	30
#torque.defaults.pool.testOnBorrow =    	true
#torque.defaults.pool.validationQuery = 	SELECT 1
#
#torque.defaults.connection.driver =    	${turbine_database_driver}
#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
#torque.defaults.connection.user =      	${turbine_database_user}
#torque.defaults.connection.password =  	${turbine_database_password}
#
#torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
#torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
#torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
#torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
# -------------------------------------------------------------------

# Determines if the quantity column of the IDBroker's id_table should
# be increased automatically if requests for ids reaches a high
# volume.

torque.idbroker.cleverquantity=true

# Determines whether the managers cache instances of the business objects.
# And also whether the MethodResultCache will really cache results.
torque.manager.useCache = true

# Determines if IDBroker should prefetch IDs or not.  If set to false
# this property has the effect of shutting off the housekeeping thread
# that attempts to prefetch the id's.  It also sets the # of id's grabbed
# per request to 1 regardless of the settings in the database.
# Default: true
torque.idbroker.prefetch = true

# Controls the starting id of table entries when creating SQL for 
# the id-table. If you have two projects that use the same id-table 
# in the same database with different tables, make sure that they have 
# different initialID settings and the ranges (initialID is incremented 
# for every new table) don't overlap.
torque.idbroker.initialId = 101 

# The start value of the ID broker for supplying IDs to Torque. This value 
# is incremented every time Torque requests ID keys from the broker. If you 
# pre-load your table straight from SQL, make sure that you don't accidentially 
# overlap with this setting, because Torque doesn't keep record of what IDs are 
# already taken in the database. If you overlap, inserting new objects will fail 
# because the ID assigned by Torque is already taken.
torque.idBroker.initialIdValue = 100

# For performance reasons, the ID Broker does not request a single ID at a time
# but fetches a whole range and increments the current next ID Value in the ID
# Table by this step. If you have to do lots of inserts straight in a row, increment
# this value to get slightly better performance.
torque.idbroker.initialIdStep = 500

# IDBroker can grab its own connection from the pool to use when retrieving
# more id's to minimize the amount of time ID_TABLE will be locked.
# Some usage of IDBroker or assumptions made by connection pools or jdbc
# drivers may disallow this optimization in which case the property
# should be set to false.
torque.idbroker.usenewconnection = true

# Comment if not using shared data source factory
torque.database.default=${turbine_database_name}





