# 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
#
#     https://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.

# -------------------------------------------------------------------
# P R O J E C T  P R O P E R T I E S
# -------------------------------------------------------------------
#
# JDORI PMF Properties
javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.api.jdo.JDOPersistenceManagerFactory
javax.jdo.option.ConnectionDriverName=org.apache.derby.jdbc.EmbeddedDriver
javax.jdo.option.ConnectionURL=jdbc:derby:jdotckdb
javax.jdo.option.ConnectionUserName=tckuser
javax.jdo.option.ConnectionPassword=tckuser
javax.jdo.option.Optimistic=false
javax.jdo.option.NontransactionalWrite=false
javax.jdo.option.NontransactionalRead=false
javax.jdo.option.RetainValues=false
javax.jdo.option.RestoreValues=false

datanucleus.metadata.xml.validate=false
datanucleus.schema.validateTables=false
datanucleus.schema.validateConstraints=false
datanucleus.schema.autoCreateAll=false
datanucleus.schema.autoCreateTables=false
datanucleus.schema.autoCreateConstraints=false
datanucleus.schema.autoCreateColumns=false
datanucleus.autoStartMechanism=None
datanucleus.transaction.nontx.atomic=false

datanucleus.connectionPool.maxStatements=20
datanucleus.rdbms.CheckExistTablesOrViews=false
datanucleus.rdbms.omitDatabaseMetaDataGetColumns=true

