#
# Copyright (c) 2022, 2025 Contributors to the Eclipse Foundation
# Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2004, 2018 The Apache Software Foundation
#
# 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.
#

# Packages exported by system bundle when framework is Knopflerfish.
# Taken from MANIFEST.MF of framework.jar distributed with Knopflerfish 3.5.0.
# Like Felix, this also requires OSGi packages to be listed unless we use
# org.osgi.framework.system.packages.extra property.
Knopflerfish.system.packages=\
 org.osgi.framework;version=1.5, \
 org.osgi.framework.launch;version=1.0, \
 org.osgi.framework.hooks.service;version=1.0, \
 org.osgi.service.packageadmin;version=1.2, \
 org.osgi.service.permissionadmin;version=1.2, \
 org.osgi.util.tracker;version=1.4, \
 org.osgi.service.startlevel;version=1.1, \
 org.osgi.service.url;version=1.0, \
 org.osgi.service.condpermadmin;version=1.1

org.osgi.framework.system.packages.extra=\
 org.glassfish.embeddable;org.glassfish.embeddable.spi

# NetBeans profiler packages exist in parent class loader
org.osgi.framework.bootdelegation=org.netbeans.lib.profiler, org.netbeans.lib.profiler.*

# The OSGi R4.2 spec says boot delegation uses the boot class loader by default. We need
# to configure it to use the framework class loader because that class loader is
# configured with extra classes like jdk tools.jar, derby jars, etc. that must be
# made available in GlassFish to work.
org.osgi.framework.bundle.parent=framework

# We don't set this value here, as expanding GlassFish_Platform gives us a file name with upper case
# char in it. GlassFish file layout does not recommend use of upper case char, because some
# platforms like Windows don't honor case in file names. So, we don't set the cache dir here.
# Instead, it is set in various PlatformHelper implementations.
#org.osgi.framework.storage=${com.sun.aas.instanceRoot}/osgi-cache/${GlassFish_Platform}/
# See GLASSFISH-19624 as to why we always clean the cache on Knopflerfish.
Knopflerfish.storage.clean=onFirstInit
org.osgi.framework.storage.clean=${${GlassFish_Platform}.storage.clean}

# Are we using ondemand provisioning of OSGi modules? default is false.
glassfish.osgi.ondemand=false

# Is OBR enabled?
com.sun.enterprise.hk2.obrEnabled=${glassfish.osgi.ondemand}

# Directory containing all the modules.
com.sun.enterprise.hk2.repositories=${com.sun.aas.installRootURI}/modules/

# Should the repo be synchronously initialized. Default is true to avoid any potential race condition.
# However, we should eventually set it to false to minimize impact on start up time.
com.sun.enterprise.hk2.initializeRepoSynchronously=true

# Should fragments be deployed? default is false.
com.sun.enterprise.hk2.obrDeploysFragments=false

# Should OBR deploy optional requirements
com.sun.enterprise.hk2.obrDeploysOptionalRequirements=true

# Is Obr cached in serialized format? Default is false in which case XML format is used.
com.sun.enterprise.hk2.obrIsSerialized=false

# This is where we cache the inhabitants information
com.sun.enterprise.hk2.cacheDir=${org.osgi.framework.storage}

# Important Note about glassfish.osgi.auto.* properties.
#
# These properties are interpreted by our autoprocessor to install and start the configured list of bundles.
# There are three properties:
# glassfish.osgi.auto.install, glassfish.osgi.auto.start, glassfish.osgi.auto.start.level[.N]
# to control what gets installed in which order, what gets started and what should be the bundle's start level.
# glassfish.osgi.auto.install is used to configure a list of locations from where bundles will be installed.
# The order is important as bundle installation order is an input to package resolution process in OSGi.
#
# We first start osgi-resource-locator bundle as osgi-adapter depends on it being active.
# Since Felix starts bundles with same start level in the order in which bundles are installed,
# and osgi-adapter and osgi-resource-locator both have same start level of 1, to make sure
# osgi-resource-locator starts ahead of osgi-adapter, we install it ahead of osgi-adapter as well.

# The admin-cli.jar is meant to be used with asadmin commands. At this moment it is also required
# by the web application in Ant based tests: jdbc/flushconnectionpool.
#
# TODO: We should fix it by using different start levels, but at this point we can't change
# the start levels, as we have already documented the start levels shell bundles in public documents.
# When we change that, we shall change here as well.
# Then we autostart GlassFish core bundles followed by optional services.
# The reason for using installRootURI is to make sure any char like white space is properly encoded.
glassfish.osgi.auto.install=\
 ${com.sun.aas.installRootURI}modules/ \
 ${com.sun.aas.installRootURI}admin-cli.jar \
 ${com.sun.aas.installRootURI}modules/autostart/

# This bundle is only needed to be activated if we want to use ondemqand mode.
# Since ondemand mode is not the default mode, we don't activate it by default
# to save time and space. Let it be defined explicitly when we need ondemand support.
# We have already added necessary support to easily set a property while launching
# from command line or via domain.xml.
#obr.bundles=${com.sun.aas.installRootURI}modules/org.apache.felix.bundlerepository.jar

hk2.bundles=\
 ${com.sun.aas.installRootURI}modules/hk2-api.jar \
 ${com.sun.aas.installRootURI}modules/hk2-utils.jar \
 ${com.sun.aas.installRootURI}modules/jakarta.inject-api.jar \
 ${com.sun.aas.installRootURI}modules/osgi-resource-locator.jar \
 ${com.sun.aas.installRootURI}modules/hk2-locator.jar \
 ${com.sun.aas.installRootURI}modules/hk2-runlevel.jar \
 ${com.sun.aas.installRootURI}modules/config-types.jar \
 ${com.sun.aas.installRootURI}modules/hibernate-validator.jar \
 ${com.sun.aas.installRootURI}modules/class-model.jar \
 ${com.sun.aas.installRootURI}modules/asm.jar \
 ${com.sun.aas.installRootURI}modules/asm-analysis.jar \
 ${com.sun.aas.installRootURI}modules/asm-commons.jar \
 ${com.sun.aas.installRootURI}modules/asm-tree.jar \
 ${com.sun.aas.installRootURI}modules/asm-util.jar \
 ${com.sun.aas.installRootURI}modules/osgi-adapter.jar \
 ${com.sun.aas.installRootURI}admin-cli.jar

core.bundles=\
 ${hk2.bundles} \
 ${com.sun.aas.installRootURI}modules/glassfish-osgi-bootstrap.jar

autostart.bundles=${com.sun.aas.installRootURI}modules/autostart/

# This property is used to configure a list of bundles to be started by our autoprocessor.
# Eventual activation of the bundles depend on bundle's start level and activation policy.
glassfish.osgi.auto.start=\
 ${core.bundles} \
 ${autostart.bundles}

# List of bundles whose start level is 1
glassfish.osgi.auto.start.level.1=${core.bundles}

# List of bundles whose start level is 2
# For start up performance, we don't start optional bundles before start level 2.
glassfish.osgi.auto.start.level.2=${autostart.bundles}

# Final start level of OSGi framework. This is used by GlassFish launcher code
# to set the start level of the OSGi framework once server is up and running so that
# optional services can start. The initial start level of framework is controlled using
# the standard framework property called org.osgi.framework.startlevel.beginning
glassfish.osgi.start.level.final=2

# What should be the initial start level of framework.
# For performance reason, initially we set the start level to 1 so that no optional
# bundles can get activated while server is still starting. Once server is started,
# the framework's start level is set to whatever is configured in glassfish.osgi.start.level.final property.
org.osgi.framework.startlevel.beginning=1

# Set bundle start level to be same or less than that of framework,
# otherwise HK2 installed bundles won't be activated.
# See issue #5934
felix.startlevel.bundle=1

# log level 1: error, 2: warning, 3: info, 4: debug
felix.log.level=2

# The Felix launcher registers a shutdown hook to cleanly stop the framework
# by default, uncomment the following line to disable it.
# Since, GlassFish uses its own shutdown hook to stop the framework, we don't need this.
felix.shutdown.hook=false

#felix.service.urlhandlers=false

# Should OSGi bundles inherit permissions from JDK security manager policy configuration?
# Set it to true if you waant them to. Default is false for backward compatibility reasons.
felix.security.defaultpolicy=true


# Bundle information optimization to improve performance
felix.cache.singlebundlefile=true

# Set this to true if you want to use JPA in Java SE mode in your OSGi bundles.
org.glassfish.osgjpa.extension.useHybridPersistenceProviderResolver=false

# When HybridPersistenceProviderResolver is used, it can be configured to use a cache.
# Setting the next property to false, disables caching of providers.
org.glassfish.osgjpa.extension.hybridPersistenceProviderResolver.cachingEnabled=true

# We have stopped using FileInstall to monitor autostart/. Because we can't change domain.xml
# in 3.1.1, we have to rely on configuring FileInstall using this file.
felix.fileinstall.dir=${com.sun.aas.instanceRoot}/autodeploy/bundles/
felix.fileinstall.poll=5000
felix.fileinstall.log.level=3
felix.fileinstall.bundles.new.start=true
felix.fileinstall.bundles.startTransient=true
felix.fileinstall.disableConfigSave=false

# If we don't set this, when we run our tests in embedded mode, gogo shell stops the framework after running the login command.
gosh.args=--nointeractive

# Generic execution environment capabilities.
org.osgi.framework.system.capabilities=${eecap-${java.vm.specification.version}}

eecap-25= \
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25", \
 osgi.ee; osgi.ee="UNKNOWN"
eecap-24= \
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24", \
 osgi.ee; osgi.ee="UNKNOWN"
eecap-23= \
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23", \
 osgi.ee; osgi.ee="UNKNOWN"
eecap-22= \
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13,14,15,16,17,18,19,20,21,22", \
 osgi.ee; osgi.ee="UNKNOWN"
eecap-21= \
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13,14,15,16,17,18,19,20,21", \
 osgi.ee; osgi.ee="UNKNOWN"
