# 3DS Server

<details>

<summary>Application Topology</summary>

The following topology shows an example topology with Apache Http Server at the Web layer and JBoss at the App layer.

<img src="/files/cnpmPFH3Tu68Geffhe4I" alt="" data-size="original">

<br>

&#x20;

</details>

<details>

<summary>Java Installation </summary>

Java is downloaded using the wget command.

<https://download.oracle.com/otn/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz>

{% code overflow="wrap" %}

```
$ cd /tmp && wget https://download.oracle.com/otn/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz
$ mkdir /usr/java 
$ tar -xzvf jdk-8u171-linux-x64.tar.gz –-directory=/usr/java/.
$ sudo update-alternatives –install /usr/bin/java java /usr/java/jdk1.8.0_171/bin/java 1200
$ sudo update-alternatives –install /usr/bin/javac javac /usr/java/jdk1.8.0_171/bin/javac 1200
$ update-alternatives --display java
$ update-alternatives --display javac
$ java -version
```

{% endcode %}

</details>

<details>

<summary>Apache Http Server Installation and mod_jk Configuration</summary>

Apache and MOD\_JK installations should be done on the server.

{% code overflow="wrap" %}

```
sudo apt update
sudo apt install apache2
sudo systemctl status apache2
wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
sudo apt install apache2-dev
sudo a2enmod headers
tar xvf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native/
./configure -with-apxs=/usr/bin/apxs
which apxs
make
sudo cp mod_jk.so /usr/lib/apache2/modules/
```

{% endcode %}

After the installations are done, the mods\_jk.conf file should be created under the /etc/apache2/mods-enabled directory as in the example below.

{% code overflow="wrap" %}

```
LoadModule jk_module "/usr/lib/apache2/modules/mod_jk.so"
JkWorkersFile /etc/apache2/conf-enabled/workers.properties
#JkShmFile     /etc/apache2/logs/mod_jk.shm
JkLogFile /etc/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +forwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
```

{% endcode %}

The workers.properties file should be created under the /etc/apache2/conf-enabled directory as in the following example.

```
worker.list=tds,status
# Define Node1
# modify the host as your host IP or DNS name.
worker.node1.port=${PORT}
worker.node1.host=${IP}
worker.node1.type=ajp13
worker.node1.ping_mode=A
worker.node1.lbfactor=1
worker.node1.lbfactor=1

# Load-balancing behavior
worker.tds.type=lb
worker.tds.balance_workers=node1
worker.tds.sticky_session=1
```

In the standalone.xml file of the relevant applicatio&#x6E;*,* the ${PORT} information should be updated  for the following parameter

{% code overflow="wrap" %}

```
<socket-binding name="ajp" port="${jboss.ajp.port:${PORT}}"/>
```

{% endcode %}

**Apache SSL Connection Configuration**

Apache SSL mode must be ENABLED and *the sites-available/test.conf* file must be edited as follows. Syntax can be checked with the command "sudo apache2ctl configtest".

{% code overflow="wrap" %}

```
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName _
SSLEngine on
SSLCertificateFile    {fullchain.pem_path}
SSLCertificateKeyFile {privkey.pem_path}
SSLProtocol ALL -SSLv2 -SSLv3
SSLVerifyClient none
SSLVerifyDepth 1
SSLHonorCipherOrder On
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
JkMount /tds/* tds
JkMount /tds tds

#JkUnMount /error/* tomcat_1
</VirtualHost>
```

{% endcode %}

</details>

<details>

<summary>Wildfly Installation</summary>

**Ubuntu Installation**

{% code overflow="wrap" %}

```
sudo apt update -y
sudo apt upgrade -y
cd /3ds2apps && sudo wget https://github.com/wildfly/wildfly/releases/download/26.1.2.Final/wildfly-26.1.2.Final.tar.gz
sudo tar -xzvf wildfly-26.1.2.Final.tar.gz
sudo mv wildfly-26.1.2.Final /3ds2apps/wildfly
sudo groupadd wildfly
sudo useradd -r -g wildfly -d /3ds2apps/wildfly -s /sbin/nologin wildfly
sudo mkdir -p /etc/wildfly
sudo cp /3ds2apps/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
sudo cp /3ds2apps/wildfly/docs/contrib/scripts/systemd/launch.sh /3ds2apps/wildfly/bin/
sudo chown wildfly: /3ds2apps/bin/launch.sh
sudo cp /3ds2apps/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
```

{% endcode %}

The Wildfly service is created.

{% code overflow="wrap" %}

```
sudo nano /etc/systemd/system/wildfly.service 

[Unit]
Description=The WildFly Application Server
After=syslog.target network.target
Before=httpd.service
[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=-/etc/wildfly/wildfly.conf
User=wildfly
Group=wildfly
LimitNOFILE=102642
PIDFile=/var/run/wildfly/wildfly.pid
ExecStart=/3ds2apps/wildfly/standalone/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND $WILDFLY_MANAGEMENT_CONSOLE_BIND 
StandardOutput=null
[Install]
WantedBy=multi-user.target
```

{% endcode %}

The wildfly.conf file is created.

{% code overflow="wrap" %}

```
sudo nano /etc/wildfly/wildfly.conf
# The configuration you want to run
WILDFLY_CONFIG=standalone.xml
# The mode you want to run
WILDFLY_MODE=standalone
# The address to bind to
WILDFLY_BIND=0.0.0.0
WILDFLY_MANAGEMENT_CONSOLE_BIND=0.0.0.0
```

{% endcode %}

launch.sh file is created.

{% code overflow="wrap" %}

```
sudo nano /3ds2apps/wildfly/bin/launch.sh
#!/bin/bash
if [ "x$WILDFLY_HOME" = "x" ]; then
   		WILDFLY_HOME="/3ds2apps/wildfly"
fi
if [[ "$1" == "domain" ]]; then
$WILDFLY_HOME/bin/domain.sh -c $2 -b $3 -bmanagement $4
else
$WILDFLY_HOME/bin/standalone.sh -c $2 -b $3 -bmanagement $4 
fi
```

{% endcode %}

After the changes, the service is "enable" and "started".

{% code overflow="wrap" %}

```
sudo systemctl daemon-reload
sudo systemctl enable wildfly
sudo systemctl start wildfly
sudo systemctl status wildfly
```

{% endcode %}

If the management gui is to be used, the user is added.

{% code overflow="wrap" %}

```
sudo /opt/wildfly/bin/add-user.sh
sudo systemctl restart wildfly
```

{% endcode %}

</details>

<details>

<summary>Tomcat Installation</summary>

Tomcat is downloaded using the wget command.

{% code overflow="wrap" %}

```
$ cd /tmp
$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz
$ sudo tar xzvf apache-tomcat-9.0.73.tar.gz -C /3ds2apps/tomcat9 --strip-components=1
$ sudo chown -R tomcat:tomcat /3ds2apps/tomcat/
$ sudo useradd -m -d /3ds2apps/tomcat9 -U -s /bin/false tomcat
$ sudo chmod -R u+x /3ds2apps/tomcat/bin
```

{% endcode %}

A Linux service is created for Tomcat.

{% code overflow="wrap" %}

```
$ sudo nano /etc/systemd/system/tomcat.service

WantedBy=multi-user.target
[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/java/jdk1.8.0_171"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/3ds2apps/tomcat"
Environment="CATALINA_HOME=/3ds2apps/tomcat"
Environment="CATALINA_PID=/3ds2apps/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/3ds2apps/tomcat/bin/startup.sh
ExecStop=/3ds2apps/tomcat/bin/shutdown.sh

RestartSec=10
Restart=always

[Install]

$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat
$ sudo systemctl status tomcat
$ sudo systemctl enable tomcat
```

{% endcode %}

</details>

<details>

<summary>Database Creation - Oracle</summary>

&#x20;The 19C version of Oracle Database is installed on the relevant database server.

setup.sql is used to create a schema.

Application-specific tables and the necessary data in these tables are created by running the following scripts respectively.

01-V1\_0\_0\_0\_\_core\_ddl.sql

02-V1\_0\_0\_1\_\_core\_dml.sql

03-V1\_0\_1\_1\_\_core\_ddl.sql

04-V1\_0\_2\_0\_\_core\_dml.sql

05-V1\_0\_3\_0\_\_core\_dml.sql

06-V1\_0\_3\_1\_\_core\_ddl.sql

07-V1\_0\_4\_0\_\_core\_ddl.sql

08-V1\_0\_5\_0\_\_core\_dml.sql

09-V1\_0\_5\_1\_\_core\_ddl.sql

10-V1\_0\_6\_1\_\_core\_ddl.sql

11-V1\_0\_8\_0\_\_core\_ddl.sql

12-V1\_0\_9\_3\_\_core\_ddl.sql

</details>

<details>

<summary>Database Creation - PostgreSQL</summary>

PostgreSQL version 14.3 is installed on the relevant database server.

setup.sql is used to create a schema.

Application-specific tables and the necessary data in these tables are created by running the following scripts respectively.

01-V1\_0\_0\_0\_\_core\_ddl.sql

02-V1\_0\_0\_1\_\_core\_dml.sql

03-V1\_0\_1\_1\_\_core\_ddl.sql

04-V1\_0\_2\_0\_\_core\_dml.sql

05-V1\_0\_3\_0\_\_core\_dml.sql

06-V1\_0\_3\_1\_\_core\_ddl.sql

07-V1\_0\_4\_0\_\_core\_ddl.sql

08-V1\_0\_5\_0\_\_core\_dml.sql

09-V1\_0\_5\_1\_\_core\_ddl.sql

10-V1\_0\_6\_1\_\_core\_ddl.sql

11-V1\_0\_8\_0\_\_core\_ddl.sql

12-V1\_0\_9\_3\_\_core\_ddl.sql

</details>

<details>

<summary>App Installation - Wildfly</summary>

The application works with Java 8.

### Wildfly Multi Instance Configuration

If you want to run more than one wildfly instance on a single server, the setting should be made as follows.

For example, if you want to run the 3DS Server application as a separate instance:

{% code overflow="wrap" %}

```
sudo mkdir -p /3ds2apps/wildfly/instance/tds
sudo cp -a standalone instance/tds
sudo chown -R wildfly:wildfly instance/
```

{% endcode %}

In standalone.xml, the management gui and the ports of the application are set.

A linux service is created for the 3DS Server application:

{% code overflow="wrap" %}

```
sudo nano tds.service
 
[Unit]
Description=TDS Application Server
After=syslog.target network.target
Before=httpd.service
 
[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=-/etc/wildfly/wildfly.conf
User=wildfly
LimitNOFILE=102642
PIDFile=/var/run/wildfly/wildfly.pid
ExecStart=/3ds2apps/wildfly/instance/tds/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND $WILDFLY_MANAGEMENT_CONSOLE_BIND
StandardOutput=null
[Install]
WantedBy=multi-user.target
```

{% endcode %}

launch.sh is created for 3DS Server.

{% code overflow="wrap" %}

```
sudo nano /3ds2apps/wildfly/instance/tds/launch.sh
#!/bin/bash
# The configuration you want to run
export JbossNodeName=tds
export JbossBaseDir=instance/$JbossNodeName
export JbossLogDir=/3ds2apps/wildfly/instance/tds/log
export JbossConfigDir=/3ds2apps/wildfly/instance/tds/configuration
if [ "x$WILDFLY_HOME" = "x" ]; then
WILDFLY_HOME="/opt/wildfly"
fi
 
if [[ "$1" == "domain" ]]; then
$WILDFLY_HOME/bin/domain.sh -c $2 -b $3 -bmanagement $4
else
$WILDFLY_HOME/bin/standalone.sh -c $2 -b $3 -bmanagement $4  -Djboss.node.name=$JbossNodeName -Djboss.server.base.dir=$JbossBaseDir -Djboss.server.log.dir=$JbossLogDir -Djboss.server.config.dir=$JbossConfigDir
fi
```

{% endcode %}

After the changes, the service is "enable" and "started".

```
sudo systemctl daemon-reload
sudo systemctl enable tds.service
sudo systemctl start tds.service
```

If you want to run applications with different java versions, /3ds2apps/wildfly/bin/standalone.conf should also be edited.

{% code overflow="wrap" %}

```
sudo nano /3ds2apps/wildfly/bin/standalone.conf
 
if [ "$JbossNodeName" = "tds" ]; then
                              JAVA_HOME="/usr/java/jdk1.8.0_171"
```

{% endcode %}

### Datasource Configuration <a href="#heading-h.4i7ojhp" id="heading-h.4i7ojhp"></a>

This section describes the Datasource configuration that the application will use.

#### OJDBC Jar Module <a href="#heading-h.2xcytpi" id="heading-h.2xcytpi"></a>

The Oracle Driver Jar file is downloaded.

{% code overflow="wrap" %}

```
wget 
https://download.oracle.com/otn-pub/otn_software/jdbc/1917/ojdbc8.jar
```

{% endcode %}

/modules/system/layers/base/com/oracle/main/ file is created and the jar file is copied.

The following file is created in /modules/system/layers/base/com/oracle/main/.

module.xml

{% code overflow="wrap" %}

```
<module xmlns="urn:jboss:module:1.1" name="oracle.jdbc">
    <resources>
        <resource-root path="ojdbc[VERSION].jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
```

{% endcode %}

### Jboss JNDI Datasource <a href="#heading-h.3whwml4" id="heading-h.3whwml4"></a>

Data Source is configured within the standalone.xml.

standalone.xml

{% code overflow="wrap" %}

```
...
<subsystem xmlns="urn:jboss:domain:datasources:7.0">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/{datasource-name}" pool-name="OracleDS" enabled="true"
                    use-java-context="true"
                    statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
            <connection-url>{db-url}</connection-url>
            <driver>oracle</driver>
            <security>
                <user-name>{db-username}</user-name>
                <password>{db-password}</password>
            </security>
        </datasource>
        
        <drivers>
            <driver name="oracle" module="oracle.jdbc">
                <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>
...

```

{% endcode %}

The following is added to standalone.xml

{% code overflow="wrap" %}

```
<subsystem xmlns="urn:jboss:domain:ee:6.0">
    ...
    <global-modules>
        <module name="oracle.jdbc" slot="main"/>
    </global-modules>
    ...
    <default-bindings context-service="java:jboss/ee/concurrency/context/default"
                  datasource="java:jboss/datasources/{datasource-name}"
                  managed-executor-service="java:jboss/ee/concurrency/executor/default"
                  managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
                  managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
    ...
</subsystem>
```

{% endcode %}

### Port ve Protocol Configuration <a href="#heading-h.3whwml4" id="heading-h.3whwml4"></a>

The application will communicate with the ajp protocol. To activate ajp protocol, the following is added to standalone.xml

{% code overflow="wrap" %}

```
…
<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
…
            <server name="default-server">
                <ajp-listener name="ajp" socket-binding="ajp" max-post-size="1048576000"/>
                …
            </server>
…
</subsystem>
…
```

{% endcode %}

Port/protocol configuration is done within standalone.xml

{% code overflow="wrap" %}

```
...
<socket-binding-group name="standard-sockets" default-interface="public"
                      port-offset="${jboss.socket.binding.port-offset:0}">
    ...
    <socket-binding name="ajp" port="[port]"/>
    ...
</socket-binding-group>
...
```

{% endcode %}

### Uploading the war file <a href="#heading-h.2bn6wsx" id="heading-h.2bn6wsx"></a>

The war file must be uploaded to the /deployments directory.

### Uploading the JKS file <a href="#heading-h.qsh70q" id="heading-h.qsh70q"></a>

The provided jks files must be uploaded to the /3ds2apps/conf/keystore directory.

### Application Parameter Configuration <a href="#heading-h.1pxezwc" id="heading-h.1pxezwc"></a>

Application parameters must be passed during application execution.

This can be done by either;

* Adding JAVA\_OPTS="-Dkey1=value1 -Dkey2=value2 ..." to "standalone.sh"
* By passing as parameter during the standalone.sh call; sh standalone.sh -Dkey1=value1 -Dkey2=value2

{% code overflow="wrap" %}

```
-Dtds.instanceId=1
-DtdsLogFilePath={tdsLogFilePath} -DtdsLogLevel=INFO -DtdsLogLevelSpring=INFO
-DtdsLogMaxHistory=90 -DdatasourceType=jboss
-DdatasourceName=3DSServerOracleDS -Djava.net.preferIPv4Stack=true
-Dhttps.protocols=TLSv1.2,TLSv1.1
```

{% endcode %}

* It can be defined as system parameters in the "system-properties" section in "standalone.xml".

{% code overflow="wrap" %}

```
...
<system-properties>
<property name="tds.instanceId" value="1"/>
<property name="tdsLogFilePath" value="{tdsLogFilePath}"/>
<property name="tdsLogLevel" value="INFO"/>
<property name="tdsLogLevelSpring" value="INFO"/>
<property name="tdsLogMaxHistory" value="90"/>
<property name="datasourceType" value="jboss"/>
<property name="datasourceName" value="3DSServerOracleDS"/>
<property name="java.net.preferIPv4Stack" value="true"/>
<property name="https.protocols" value="TLSv1.2,TLSv1.1"/>
</system-properties>
…
```

{% endcode %}

</details>

<details>

<summary>App Installation - Tomcat</summary>

The application works with Java 8.

### Tomcat Multi Instance Configuration

If you want to run more than one tomcat instance on a single server, the setting should be made as follows.

For example, if you want to run the 3DS Server application as a separate instance

{% code overflow="wrap" %}

```
$ sudo mkdir -p /3ds2apps/tomcat9/instance/tds
$ sudo cp -a conf instance/tds
$ sudo chown -R tomcat:tomcat instance/
```

{% endcode %}

A linux service is created for the 3DS Server application:

{% code overflow="wrap" %}

```
$ sudo nano tds.service

[Unit]
Description=TDS Tomcat Service

[Service]
Type=forking
ExecStart=/3ds2apps/tomcat9/instance/tds/scripts/startup.sh
ExecStop=/3ds2apps/script/killTomcatInstance.sh tds

[Install]
WantedBy=multi-user.target
```

{% endcode %}

startup.sh is created.&#x20;

{% code overflow="wrap" %}

```
$ sudo nano /3ds2apps/tomcat9/instance/tds/scripts/startup.sh
#!/bin/sh -
instanceName=tds
export JAVA_OPTS="
-Dcatalina.home=/3ds2apps/tomcat9 
-Dcatalina.base=/3ds2apps/tomcat9/instance/$instanceName 
-Djava.io.tmpdir=/3ds2apps/tomcat9/temp 
-Djava.util.logging.config.file=/3ds2apps/tomcat9/instance/$instanceName/conf/logging.properties 
-DtdsLogFilePath=/3ds2apps/logs/tomcat9/$instanceName 
-DtdsLogLevel=DEBUG 
-DtdsLogLevelSpring=ERROR 
-DtdsLogMaxHistory=180 "
export CATALINA_HOME="/3ds2apps/tomcat9"
export CATALINA_BASE="/3ds2apps/tomcat9/instance/$instanceName"
export JAVA_HOME="/usr/java/jdk1.8.0_171"
/3ds2apps/tomcat9/bin/catalina.sh start
```

{% endcode %}

After the changes, the service is "enable" and "started".

{% code overflow="wrap" %}

```
$ sudo systemctl daemon-reload
$ sudo systemctl enable tds.service
$ sudo systemctl start tds.service
```

{% endcode %}

If you want to run applications with different java versions, /3ds2apps/tomcat9/instance/acs/scripts/startup.sh should be edited.

{% code overflow="wrap" %}

```
$ sudo nano /3ds2apps/tomcat9/instance/tds/scripts/startup.sh

Export JAVA_HOME="/usr/java/jdk1.8.0_171"
```

{% endcode %}

### Tomcat Datasource <a href="#heading-h.3whwml4" id="heading-h.3whwml4"></a>

Data Source is configured within context.xml&#x20;

context.xml

{% code overflow="wrap" %}

```
...
<Context>
...

    <Resource name="jdbc/tdsDataSource"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="org.postgresql.Driver"
              url="{db-url}"
              username="{db-name}"
              password="{db-pass}"
              maxTotal="20"
              maxIdle="10"
              maxWaitMillis="-1"/>

   <Parameter name="scm.vault.path" value="{scm-vault-path}" override="false"/>
   <Parameter name="tds.instanceId" value="1" override="false"/>
   <Parameter name="spring.profiles.active" value="default" override="false"/>
   <Parameter name="datasourceType" value="tomcat" override="false"/>
   <Parameter name="tds.serverBuildwww" value="2.0.1" override="false" />
   <Parameter name="db.type" value="postgresql" override="false"/>

...
</Context>
```

{% endcode %}

### Port ve Protocol Configuration <a href="#heading-h.3whwml4" id="heading-h.3whwml4"></a>

The application will communicate with the ajp protocol. To activate ajp protocol, the following is added to server.xml

{% code overflow="wrap" %}

```
...
<Service name="Catalina">
...

<Connector port="{app-port}" address="0.0.0.0" protocol="AJP/1.3" secretRequired="false" redirectPort="8443" packetSize="65536" />
...

</Service>
```

{% endcode %}

### Uploading the war file <a href="#heading-h.2bn6wsx" id="heading-h.2bn6wsx"></a>

The war file must be uploaded to the /webapps directory.

### Uploading the JKS file <a href="#heading-h.qsh70q" id="heading-h.qsh70q"></a>

The provided jks files must be uploaded to the /3ds2apps/conf/keystore directory.

### Application Parameter Configuration <a href="#heading-h.1pxezwc" id="heading-h.1pxezwc"></a>

Application parameters must be passed during application execution.

This can be done by either;

* Adding  JAVA\_OPTS="-Dkey1=value1 -Dkey2=value2 ..." to startup.sh
* By passing as parameter during the startup.sh call; sh standalone.sh -Dkey1=value1 -Dkey2=value2
* It can be defined as system parameters in "context.xml".

{% code overflow="wrap" %}

```
...
  <Parameter name="tds.instanceId" value="1" override="false"/>
  <Parameter name="spring.profiles.active" value="default" override="false"/>
  <Parameter name="datasourceType" value="tomcat" override="false"/>
  <Parameter name="tds.serverBuildwww" value="2.0.1" override="false" />
  <Parameter name="db.type" value="postgresql" override="false"/>
  <Parameter name="tdsLogFilePath" value="{tdsLogFilePath}" override="false"/>
  <Parameter name="tdsLogLevel" value="INFO" override="false"/>
  <Parameter name="tdsLogLevelSpring" value="INFO" override="false"/>
  <Parameter name="tdsLogMaxHistory" value="90" override="false"/>
...
```

{% endcode %}

</details>

<details>

<summary>Application Parameter Table</summary>

</details>

<details>

<summary>API List      </summary>

</details>

&#x20;  &#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.secureartz.com/finartz-3d-secure/3ds-server/3ds-server-on-premise/installation/3ds-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
