#
# Copyright (c) 2014, 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
#


# WLS Server Testing Environment Properties For Multitenant Environment
# ---------------------------------------------------------------------
# This property file is used by the jpa/eclipselink.jpa.test/weblogic-mt.xml
# build file which handles execution of JPA tests against WebLogic server
# in multitenant environment.

###############################################################################
########### WebLogic properties for installation, setup ant tesing ############
###############################################################################

# Application server platform name
server.platform=weblogic

# WebLogic builds URL: URL pointing to directory with WebLogic 12.2.1
# installation files (wls_generic.jar and wls_jrf_generic.jar)
#weblogic.builds=

# Directory where to download WebLogic 12.2.1 installation files or where
# those files are already present (wls_generic.jar and wls_jrf_generic.jar)
weblogic.packages=../../downloads

# WebLogic host (where to listen)
weblogic.host=127.0.0.1

# WebLogic non encrypted port (where to listen)
weblogic.port=8080

# WebLogic SSL port (where to listen)
weblogic.ssl.port=8443

# WebLogic URL to use in tests
server.url=t3://${t1.host}:${weblogic.port}/

# WebLogic admin user
server.user=weblogic

# WebLogic admin password
server.pwd=welcome1

# WebLogic domain name
weblogic.domain=testmtdomain

# WebLogic domain path (including domain name at the end)
# Depends on weblogic.domain so it should be always passed together with it
weblogic.dpath=../../${weblogic.domain}

# Oracle products installation directory
oracle.installdir=../../oracle

# WebLogic installation directory
weblogic.installdir=${oracle.installdir}/wls

# WebLogic server home
weblogic.home=${weblogic.installdir}/wlserver/server

# WebLogic server libraries
server.lib=${weblogic.home}/lib

# WebLogic server platform class
server.platform.class=weblogic-10-platform

# WebLogic naming service initial context factory
server.factory=weblogic.jndi.WLInitialContextFactory

# EclipseLink library
eclipselink.lib=../../eclipselink.jar

# Test dependencies
server.depend=weblogic.jar

# Test runners
server.testrunner=TestRunner#org.eclipse.persistence.testing.framework.server.TestRunner
server.testrunner.wdf=ServerTestRunner#org.eclipse.persistence.testing.framework.wdf.server.ServerTestRunner
server.testrunner1=TestRunner1#org.eclipse.persistence.testing.framework.server.TestRunner1
server.testrunner2=TestRunner2#org.eclipse.persistence.testing.framework.server.TestRunner2
server.testrunner3=TestRunner3#org.eclipse.persistence.testing.framework.server.TestRunner3
server.testrunner4=TestRunner4#org.eclipse.persistence.testing.framework.server.TestRunner4
server.testrunner5=TestRunner5#org.eclipse.persistence.testing.framework.server.TestRunner5

###############################################################################
########### EclipseLink MT build script variables, do not change! #############
###############################################################################

# WebLogic server name
weblogic.mt.server.name=EclipseLink

# WebLogic host (where to listen)
weblogic.mt.host=${weblogic.host}

# WebLogic non encrypted port (where to listen)
weblogic.mt.port=${weblogic.port}

# WebLogic SSL port (where to listen)
weblogic.mt.ssl.port=${weblogic.ssl.port}

# WebLogic admin user
weblogic.mt.admin.user=${server.user}

# WebLogic admin password
weblogic.mt.admin.password=${server.pwd}

# WebLogic domain name
weblogic.mt.domain.name=${weblogic.domain}

# WebLogic domain path
weblogic.mt.domain.path=${weblogic.dpath}

# WebLogic domain persistence provider fully qualified class
weblogic.mt.persistence.provider=org.eclipse.persistence.jpa.PersistenceProvider

# WebLogic resource group template name
weblogic.mt.resource.group.template.name=ecl-template

# WebLogic resource group name
weblogic.mt.resource.group.name=ecl-group

# WebLogic global virtual target
weblogic.mt.global.virtual.target.name=global

# WebLogic global virtual target prefix
weblogic.mt.global.virtual.target.prefix=global

# WebLogic admin realm identity domain name
weblogic.mt.admin.identity.domain.name=EclAdmin

# WebLogic JDBC resource name
weblogic.mt.jdbc.jta.resource.name=EclipseLinkDS

# WebLogic JDBC resource name
weblogic.mt.jdbc.jta.resource.jndi.name=jdbc/${weblogic.mt.jdbc.jta.resource.name}

# WebLogic JDBC resource global transactions protocol
weblogic.mt.jdbc.jta.resource.transactions=OnePhaseCommit

# WebLogic JDBC resource name
weblogic.mt.jdbc.non.jta.resource.name=ELNonJTADS

# WebLogic JDBC resource name
weblogic.mt.jdbc.non.jta.resource.jndi.name=jdbc/${weblogic.mt.jdbc.non.jta.resource.name}

# WebLogic JDBC resource global transactions protocol
weblogic.mt.jdbc.non.jta.resource.transactions=OnePhaseCommit

# WebLogic JDBC resource URL
weblogic.mt.jdbc.resource.url=${db.url}

# WebLogic JDBC resource driver
weblogic.mt.jdbc.resource.driver=${db.driver}

# WebLogic JDBC resource user name
weblogic.mt.jdbc.resource.user.name=${db.user}

# WebLogic JDBC resource user password
weblogic.mt.jdbc.resource.user.password=${db.pwd}

# WebLogic JDBC resource connection test query
weblogic.mt.jdbc.resource.test.query=SQL SELECT 1 FROM DUAL

# WebLogic proxy resource name
weblogic.mt.proxy.resource.name=EclProxyDS

# WebLogic proxy resource JNDI name
weblogic.mt.proxy.resource.jndi.name=jdbc/EclProxyDS

## WebLogic virtual target for 1st tenant
weblogic.mt.tenant1.virtual.target.name=tenant1

## WebLogic virtual target prefix for 1st tenant
weblogic.mt.tenant1.virtual.target.prefix=tenant1

# WebLogic partition for 1st tenant
weblogic.mt.tenant1.partition.name=partition1

# WebLogic JDBC resource override object name prefix for 1st partition
weblogic.mt.tenant1.jdbc.resource.override.prefix=Partition1-

# WebLogic JDBC resource URL override for 1st partition
weblogic.mt.tenant1.jdbc.resource.url=${db.t1.url}

# WebLogic JDBC resource user name override for 1st partition
weblogic.mt.tenant1.jdbc.resource.user.name=${db.t1.user}

# WebLogic JDBC resource user password override for 1st partition
weblogic.mt.tenant1.jdbc.resource.user.password=${db.t1.pwd}

## WebLogic virtual target for 2nd tenant
weblogic.mt.tenant2.virtual.target.name=tenant2

## WebLogic virtual target prefix for 2nd tenant
weblogic.mt.tenant2.virtual.target.prefix=tenant2

# WebLogic partition for 2nd tenant
weblogic.mt.tenant2.partition.name=partition2

# WebLogic JDBC resource override object name prefix for 2nd partition
weblogic.mt.tenant2.jdbc.resource.override.prefix=Partition2-

# WebLogic JDBC resource URL override for 2nd partition
weblogic.mt.tenant2.jdbc.resource.url=${db.t2.url}

# WebLogic JDBC resource user name override for 2nd partition
weblogic.mt.tenant2.jdbc.resource.user.name=${db.t2.user}

# WebLogic JDBC resource user password override for 2nd partition
weblogic.mt.tenant2.jdbc.resource.user.password=${db.t2.pwd}

# WebLogic downloaded packages dir
weblogic.mt.packages.dir=${weblogic.packages}

# WebLogic builds URL
weblogic.mt.builds.url=${weblogic.builds}

# WebLogic installation packages: wls_generic.jar
weblogic.mt.generic.jar=wls_generic.jar

# WebLogic installation packages: wls_jrf_generic.jar
weblogic.mt.jrf_generic.jar=wls_jrf_generic.jar
