Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • If a MySQL DBMS is being used by the JobScheduler, then the MySQL wait_timeout setting that rules the max. the lifetime of idle connections should be checked and if necessary extended.
  • Find more hints on possible installation problems from the JOC Cockpit - Troubleshooting section.

...

The JOC Cockpit is available for Linux and Windows operating systems and the same setup can be used for installation on 64-bit and on 32-bit systems. See the Which platforms is JobScheduler available for and what platform support is provided? article for more information.

...

  • On Windows systems:
    • The setup will ask for Elevated Permissions
  • On Unix systems:
    • Root permissions are required when the JOC Cockpit is to be installed together with Jetty if the Jetty server is to run as a demon (i.e. the Jetty Server and JOC Cockpit are to be automatically started after a reboot of the machine).
      • To install the JOC Cockpit without root permissions, the start script should be called with a -u the argument, otherwise the sudo prompt will ask for a password.   

...

  • Anchor
    jetty-base
    jetty-base
    Step 4 - Jetty Installation & Configuration

    • The JOC Cockpit requires a Java-capable web server and comes with a Jetty server. Step 4 allows system administrators to specify whether this web server is to be installed and if so, to specify its configuration - i.e. the port(s) it uses, installation path, memory pool, etc..
    • The Install JOC ... including the Jetty checkbox specifies whether the Jetty web server should be installed.
    • Default Paths
    • While the Jetty web server delivered with the JOC Cockpit is installed in the joc_installation_directory, which was configured in the previous step - the Jetty configuration files are installed in the jetty_base directory. The Jetty Base field in the form shown in the screenshot can be used to set the jetty_base directory. 
      • The default path to the jetty_base directory on Linux systems leads to the user's home directory:
      • Log files are saved by default in:
      • The default path to the jetty_base directory and log files on Windows systems is: 
    • Note that if If the Jetty delivered with the JOC Cockpit is not to be installed and either an alternative Jetty installation or another web server is to be used, then relevant configuration files for such a server such as the shiro.ini and joc.properties files will still be written to the file system. These files can then be moved by the system administrator to a suitable location for their web server as required. See the Configuration with Alternative Web Servers section below for more information.
  • Step 5 - JOC Configuration

    • The JS7 JOC Cockpit can be installed in a cluster. So if the JOC Cockpit is installed as a cluster it is required to provide a title to the JOC. By default the title is joc, this can be modified as per the user.


    • The security level for the signing mechanism can be added at the time of JOC Cockpit installation for a security level used for the signing of deployment objects such as workflows. See the Secure Configuration Article for more information. The JS7 JOC Cockpit provides three types of signing mechanisms:
      • Low: This mechanism is easy to use as it does not require any user interaction for the signing operation to be performed. 
      • Medium: This mechanism is similar to the low signing mechanism except for the fact that the private key stored with the current user's profile is used for the signing of configuration objects.
      • High: This mechanism has the highest security level and this requires any configuration objects to be exported and to be signed individually outside of JOC Cockpit.

  • Step 6 - Database Management System

    • Choose the DBMS to be used by the JOC Cockpit for the database system.

    • The database connection settings can be either species directly or can be provided by hibernate configuration file. If the settings are specified directly then it is required to choose the database system otherwise the hibernate configuration file path can be specified after checking the option with hibernate configuration file.

    • The database system is specified in the upper selection on this form. It is recommended that the box in the centre of the form remains checked so that the script which creates and fills the necessary database tables can be executed. 

  • Step 7 - Database connection Configuration

    • Specify the parameters for the connection to the Database

    • It will be probably be obvious from the names given to the parameters in the screenshot above that the values are for a database to be used by the JS7 JOC Cockpit.

    • The database configuration for the JOC Cockpit is written to an XML file during installation and saved in the jetty_base/resources/joc folder. The default name of the database configuration file is:

      • hibernate.cfg.xml

      This file can be modified at a later date if required using a text editor. The JS7 JOC Cockpit service will then have to be restarted before changes made to this file are implemented.

    • The name and location of the database configuration file itself is specified in the joc.properties file, which can also be found in the jetty_base/resources/joc folder.

  • Step 8 - Specify the JDBC Driver for the Database Connection

    • Specify if a JDBC driver provided with the installation should be used for the Database Connection or whether an external driver is required.
      The information shown in this form depends on the DBMS previously selected:
      • The jTDS JDBC® the driver delivered with the JOC Cockpit is only shown as an option when Sybase® or Microsoft SQL Server® DBMSs have been specified.
      • If you have specified a MySql® DBMS then you will get a checkbox for specifying whether you want to use the MariaDB® JDBC® driver provided with the JobScheduler. 
      • If you do not check the jTDS JDBC® or the MariaDB JDBC drivers then you must enter your own JDBC® driver in the form shown below.


    • Configuring the JDBC Driver-URL for Oracle RAC databases

      The JDBC driver URL for Oracle RAC databases should be entered in the Host field of the database connection form. For example:

      Code Block
      jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) 
      (ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604)) 
      (ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604))) 
      (CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))

      In addition, the Schema and Port fields should be left empty.

  • Step 9 - Processing the Installation

    • This step shows the progress of the first part of the installation procedure.

    • Changes to the installation configuration can no longer be made once this step has started.
      Instead, configuration files such as those in the jetty_base/resources/joc folder can folder can be modified manually and then the JOC Cockpit restarted.


  • Step 12 - External Processes

    • This step shows the progress of the second part of the installation procedure.

    • The information shown in this step will be written to the installation log file, which can be found in the jetty_base/logs folder

  • Step 13 - Completion

    • The last step of the installation shows a summary of the installation (success/error) and paths to relevant information.

    • Note that if a problem occurs during installation a warning message will be shown here and a link to the installation log file will be provided.

  • Operation

    • Go to the Initial Operation section of this article for information about opening the JOC Cockpit Interface.

...

  • Call the JOC Cockpit login form in a web browser and enter the User Name and Password.

    After a first installation of the JOC Cockpit the default User Name and Password of root:root and Shiro Authentication will be active , if changes have not been made to the shiro.ini configuration file. Note that in the default configuration the root user is assigned the assigned all role, which has all permissions available.

    See the Authentication and Authorization - Configuration article for information about the configuration of other user - profiles and authentication methods.

  • Note that on some systems the web service may take a minute to start and display the login form shown below.

...

If the checkbox is not selected then , configuration files will be left in both the JOC Cockpit installation folder and in the Jetty web server installation folder (if installed with the JOC Cockpit).

...

The JOC Cockpit installation procedure contains the option of installing and using the Jetty Web Server that is included in with the JOC Cockpit installation archive. This option was configured in Step 4 of the installation procedure described above. An alternative web server that is capable of handling Java web applications, such as Tomcat or another web server, can also be used.

...

If the JOC Cockpit is being installed without the included Jetty but on top of an installation that has included the JOC Cockpit Jetty then the resources\joc the folder will not be moved from its location. This means that the "new" resources the folder will be found after the new installation as follows (if the original installation was carried out in the default directory):

...

The "old" hibernate.cfg.xml the database configuration file will be read during the installation and the settings suggested as default values. The file itself will be deleted and a new onw one saved in the joc_home directory.

...

The following listings should make clear the changes that occur in the JOC Cockpit file structure during installation and deinstallationde-installation.

Windows Systems

Default File Structure if Jetty is Installed

...

If the Jetty web server provided with the JOC Cockpit is not installed and no previous configuration files are found in the Program Files\sos-berlin.com\joc the directory then files will be added by default only in the Program Files\sos-berlin.com\joc directories.

If configuration files are found in Program Files\sos-berlin.com\joc the directory then files will be added in the ProgramData\sos-berlin.com\joc and Program Files\sos-berlin.com\joc directories as described above.

...

Clustering and Redundancy

Multiple instances of the JOC Cockpit, with With each instance running on its own server, multiple instances of the JOC Cockpit can either be installed as an active cluster or redundantly. In both cases, installation of the JOC Cockpit instances follows the standard procedure described above. The configuration of the JOC Cockpit instances then follows the instructions provided in the Authentication and Authorization - Configuration article. 

...

JOC Cockpit Configuration

...

The main configuration information for the JOC Cockpit can be found after installation in the joc.properties file.

This file is not changed during an update of the JOC Cockpit.

The default location of this file after the installation is the resources/joc folder.

Detailed descriptions of each parameter are included in the file and are intended to be self-explanatory.

Code Block
languagetext
titleExample Listing of the joc.properties File
linenumberstrue
collapsetrue
################################################################################
### If JOC Cockpit is used in a cluster then type a title to identify which node
### is currently used. Further type an ordering (Primary <= 0, Standby > 0) for
### the display order in JOC's dashboard

title                        = js7joc
ordering                     = 0


################################################################################
### Path to log4j configuration file. Path can be absolute or relative
### to this file.

log4j.configuration          = log4j2.xml


################################################################################
### Path to hibernate configuration file of JOC's database. 
### Path can be absolute or relative to this file.

hibernate_configuration_file = hibernate.cfg.xml


################################################################################
### The time (in seconds) to establish the connection with the 
### remote host. Default = 2

controller_connection_timeout = 2


################################################################################
### The time (in seconds) waiting for data after the connection
### was established; maximum time of inactivity between two data packets.
### Default = 5

controller_socket_timeout = 5


################################################################################
### Should hostname verification be carried out for https certificate. 
### Default true

https_with_hostname_verification = true


################################################################################
### Location, type and password of the truststore which contains the server
### certificates of each JS7 Controller for HTTPS connections. Path can be 
### absolute or relative to this file.

#truststore_path = ../../etc/joc.jks
#truststore_type = PKCS12
#truststore_password = secret


################################################################################
### Location, type and passwords of the keystore which contains the client 
### certificate for HTTPS connections to the JS7 Controllers. Path can be  
### absolute or relative to this file.

#keystore_path = ../../etc/joc.jks
#keystore_type = PKCS12
#keystore_password = secret
#key_password = secret


################################################################################
### Settings for a custom logo file on the login page 
### The logo file has to be located in ./jetty_base/webapps/root/ext/images
### Possible units for width are according to
### https://www.w3schools.com/cssref/css_units.asp (default px)
### Possible values for the position are "top" or "bottom" (default=bottom).

custom_logo_name     = 
custom_logo_height   = 
custom_logo_position = 

Explanations

  • https_with_hostname_verification
    • This setting should be considered carefully. Effectively it forces the host name in an HTTPS connection to a JobScheduler Master to be verified from the host's certificate. This guarantees that the certificate has been created for the respective host (FQDN). 

    • With this setting being assigned the value false no host name verification takes place and the HTTPS connection is vulnerable to man-in-the-middle attacks.
  • configuration_file
  • truststore_path, truststore_type, truststore_password
    • A trust store is used if an HTTPS connection between clients, e.g. user browsers, and JOC Cockpit is used. For details see the JOC Cockpit - HTTPS Authentication article.

  • force_comments_for_audit_log
    • Comments can be added whenever an operation is performed that modifies a JobScheduler object, e.g. if a job or job chain is started.

    • Basically a user can choose in his profile to add comments which pops up a dialog box to select or enter a comment. If this profile setting is not active then a number of operations, such as starting a job, are performed immediately without additional dialog.
    • With the force_comments_for_audit_log setting in place all users are forced to add a comment when modifying a JobScheduler object - independent of their profile settings.
  • custom_logo_name, custom_logo_height, custom_logo_position
    • The custom logo is displayed on the login page.

    • Jira
      serverSOS JIRA
      columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
      serverId6dc67751-9d67-34cd-985b-194a8cdc9602
      keyJOC-473
  • default_profile_account
    • The user profile of the account specified for this setting provides the default values for the profiles of new users.
    • An account is specified exactly as the user would type for login. If LDAP Configuration is in place then the domain account is specified, optionally including the domain, e.g. domain\account or account@domain or by use of the samAccountName or the respective LDAP attribute configured by the JOC Cockpit administrator.
    • Jira
      serverSOS JIRA
      columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
      serverId6dc67751-9d67-34cd-985b-194a8cdc9602
      keyJOC-477
  • comments
    • Add/modify/replace items to the list of comments in any language. 
    • Each comment ends with a semicolon. If comments are to follow then the line for the current comment ends with a backslash.

Database Configuration Files

Once the JOC Cockpit has been installed, the configuration for each database connection will be stored in a hibernate configuration file as follows:

  • Database Connection:
    • /resources/joc/hibernate.cfg.xml
  • The following listing shows a typical hibernate database configuration file (here for the JobScheduler database connection)

    Code Block
    languagexml
    titleExample Listing of jobscheduler.hibernate.cfg.xml
    linenumberstrue
    collapsetrue
    <?xml version="1.0" encoding="UTF-8"?>
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
            <property name="hibernate.connection.password">jobscheduler</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/js7?serverTimezone=UTC</property>
            <property name="hibernate.connection.username">jobscheduler</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
            <property name="hibernate.show_sql">false</property>
            <property name="hibernate.format_sql">true</property>
            <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
            <property name="javax.persistence.validation.mode">none</property>
            <!-- Hikari Connection Pool -->
            <property name="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider</property>
            <property name="hibernate.hikari.maximumPoolSize">10</property>
        </session-factory>
    </hibernate-configuration>

The locations of this file is specified in the joc.properties file.

Log Configuration File

The logging configuration for the JOC Cockpit is saved during installation to a log4j2.xml file, which can be found in the resources/joc folder.

The following listing shows the default log configuration for the JOC Cockpit: 

Code Block
languagetext
titleExample Listing of jobscheduler.hibernate.cfg.xml
linenumberstrue
collapsetrue
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
	<Properties>
		<Property name="TimeZone">Asia/Calcutta</Property>
		<Property name="RetainDays">30d</Property>
		<Property name="MaxSizeOfRolledOverFiles">5 GB</Property>
		<Property name="MaxSizePerFile">100 MB</Property>

		<!-- Log level of the Root Logger. -->
		<Property name="RootLogLevel">INFO</Property>
		<!-- Configurations for 2nd debug log files (OFF|DEBUG|TRACE)
			 If one of these values is set to DEBUG or TRACE then the above
			 RootLogLevel has to have the same value.
		-->
		<Property name="JocLogLevel">OFF</Property>
		<Property name="ServiceClusterLogLevel">OFF</Property>
		<Property name="ServiceHistoryLogLevel">OFF</Property>
		<Property name="ServiceDailyPlanLogLevel">OFF</Property>
		<Property name="ServiceCleanupLogLevel">OFF</Property>
		<Property name="ServiceMonitorLogLevel">OFF</Property>
		<Property name="AuthLogLevel">OFF</Property>
		<Property name="ConnectionPoolLogLevel">OFF</Property>
	</Properties>

	<Appenders>
		<!-- Appender for audit log -->
		<RollingFile name="AuditLogAppender"
			fileName="${sys:user.dir}/logs/audit.log"
			filePattern="${sys:user.dir}/logs/audit-%d{yyyy-MM}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %m%throwable{short}%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax"/>
		</RollingFile>

		<!-- Appender for connection pool log -->
		<RollingFile name="ConnectionPoolDebugAppender"
			fileName="${sys:user.dir}/logs/connection-pool-debug.log"
			filePattern="${sys:user.dir}/logs/connection-pool-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<!-- Appender with short error messages -->
		<RollingFile name="JOCAppenderWithShortErrMessage"
			fileName="${sys:user.dir}/logs/joc.log"
			filePattern="${sys:user.dir}/logs/joc-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20.20t %-44.70c{1.} - %m%throwable{short}%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<!-- Main joc log -->
		<RollingFile name="JOCAppender"
			fileName="${sys:user.dir}/logs/joc.log"
			filePattern="${sys:user.dir}/logs/joc-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20.20t %-44.70c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<!-- Debug joc log -->
		<RollingFile name="JOCDebugAppender"
			fileName="${sys:user.dir}/logs/joc-debug.log"
			filePattern="${sys:user.dir}/logs/joc-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${JocLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20.20t %-44.70c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<!-- services main log -->
		<RollingFile name="ServiceClusterAppender"
			fileName="${sys:user.dir}/logs/service-cluster.log"
			filePattern="${sys:user.dir}/logs/service-cluster-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceHistoryAppender"
			fileName="${sys:user.dir}/logs/service-history.log"
			filePattern="${sys:user.dir}/logs/service-history-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceDailyPlanAppender"
			fileName="${sys:user.dir}/logs/service-dailyplan.log"
			filePattern="${sys:user.dir}/logs/service-dailyplan-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceCleanupAppender"
			fileName="${sys:user.dir}/logs/service-cleanup.log"
			filePattern="${sys:user.dir}/logs/service-cleanup-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceMonitorAppender"
			fileName="${sys:user.dir}/logs/service-monitor.log"
			filePattern="${sys:user.dir}/logs/service-monitor-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<!-- services debug log -->
		<RollingFile name="ServiceClusterDebugAppender"
			fileName="${sys:user.dir}/logs/service-cluster-debug.log"
			filePattern="${sys:user.dir}/logs/service-cluster-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${ServiceClusterLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceHistoryDebugAppender"
			fileName="${sys:user.dir}/logs/service-history-debug.log"
			filePattern="${sys:user.dir}/logs/service-history-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${ServiceHistoryLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceDailyPlanDebugAppender"
			fileName="${sys:user.dir}/logs/service-dailyplan-debug.log"
			filePattern="${sys:user.dir}/logs/service-dailyplan-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${ServiceDailyPlanLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceCleanupDebugAppender"
			fileName="${sys:user.dir}/logs/service-cleanup-debug.log"
			filePattern="${sys:user.dir}/logs/service-cleanup-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${ServiceCleanupLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<RollingFile name="ServiceMonitorDebugAppender"
			fileName="${sys:user.dir}/logs/service-monitor-debug.log"
			filePattern="${sys:user.dir}/logs/service-monitor-debug-%d{yyyy-MM-dd}-%i.log.gz"
			createOnDemand="true">
			<ThresholdFilter level="${ServiceMonitorLogLevel}" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout
				pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1.} - %m%n"
				charset="UTF-8"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
			</Policies>
			<DefaultRolloverStrategy fileIndex="nomax">
				<Delete basePath="${sys:user.dir}/logs">
					<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
					<IfAny>
						<IfLastModified age="${RetainDays}" />
						<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
					</IfAny>
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>

		<Routing name="ServicesDebugRouting">
			<Routes pattern="$${ctx:clusterService}">
				<!-- Appender for services with a thread context 'ctx:clusterService' such as 'cluster', 'history' -->
				<Route key="service-cluster" ref="ServiceClusterDebugAppender"/>
				<Route key="service-history" ref="ServiceHistoryDebugAppender"/>
				<Route key="service-dailyplan" ref="ServiceDailyPlanDebugAppender"/>
				<Route key="service-cleanup" ref="ServiceCleanupDebugAppender"/>
				<Route key="service-monitor" ref="ServiceMonitorDebugAppender"/>
				<!-- Appender for all web services without a thread context 'ctx:clusterService' -->
				<Route key="$${ctx:clusterService}" ref="JOCDebugAppender"/>
			</Routes>
		</Routing>
		<Async name="ServicesDebugAppender">
			<AppenderRef ref="ServicesDebugRouting" />
		</Async>

		<Routing name="ServicesInfoRouting">
			<Routes pattern="$${ctx:clusterService}">
				<!-- Appender for services with a thread context 'ctx:clusterService' such as 'cluster', 'history' -->
				<Route key="service-cluster" ref="ServiceClusterAppender"/>
				<Route key="service-history" ref="ServiceHistoryAppender"/>
				<Route key="service-dailyplan" ref="ServiceDailyPlanAppender"/>
				<Route key="service-cleanup" ref="ServiceCleanupAppender"/>
				<Route key="service-monitor" ref="ServiceMonitorAppender"/>
				<!-- Appender for all web services without a thread context 'ctx:clusterService' -->
				<Route key="$${ctx:clusterService}" ref="JOCAppender"/>
			</Routes>
		</Routing>
		<Async name="ServicesInfoAppender">
			<AppenderRef ref="ServicesInfoRouting" />
		</Async>

		<Routing name="ServicesErrorRouting">
			<Routes pattern="$${ctx:clusterService}">
				<!-- Appender for services with a thread context 'ctx:clusterService' such as 'cluster', 'history' -->
				<Route key="service-cluster" ref="JOCAppender"/>
				<Route key="service-history" ref="JOCAppender"/>
				<Route key="service-dailyplan" ref="JOCAppender"/>
				<Route key="service-cleanup" ref="JOCAppender"/>
				<Route key="service-monitor" ref="JOCAppender"/>
				<!-- Appender for all web services without a thread context 'ctx:clusterService' -->
				<Route key="$${ctx:clusterService}">
					<Null name="ServicesNullAppender" />
				</Route>
			</Routes>
		</Routing>
		<Async name="ServicesErrorAppender">
			<AppenderRef ref="ServicesErrorRouting" />
		</Async>

		<!-- Appender for authentication -->
		<Routing name="ContextDebugRouting">
			<Routes pattern="$${ctx:context}">
				<Route>
					<RollingFile name="ContextRolling-${ctx:context}"
						fileName="${sys:user.dir}/logs/${ctx:context}-debug.log"
						filePattern="${sys:user.dir}/logs/${ctx:context}-debug-%d{yyyy-MM-dd}-%i.log.gz"
						createOnDemand="true">
						<PatternLayout
							pattern="%d{ISO8601}{${TimeZone}} %-5p %-20t %-34c{1} - %m%n"
							charset="UTF-8"/>
						<Policies>
							<OnStartupTriggeringPolicy />
							<SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/>
						</Policies>
						<DefaultRolloverStrategy fileIndex="nomax">
							<Delete basePath="${sys:user.dir}/logs">
								<IfFileName regex=".*(joc|service|connection|authentication)-.+\.log\.gz"/>
								<IfAny>
									<IfLastModified age="${RetainDays}" />
									<IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/>
								</IfAny>
							</Delete>
						</DefaultRolloverStrategy>
					</RollingFile>
				</Route>
				<Route key="$${ctx:context}">
					<Null name="ContextNullAppender" />
				</Route>
			</Routes>
		</Routing>
		<Async name="AuthDebugAppender">
			<AppenderRef ref="ContextDebugRouting" />
		</Async>

	</Appenders>

	<Loggers>
		<!-- Root logger; all other loggers inherit from this logger. -->
		<Root level="${RootLogLevel}">
			<AppenderRef ref="ServicesErrorAppender" level="WARN"/>
			<AppenderRef ref="ServicesInfoAppender" level="INFO"/>
			<AppenderRef ref="ServicesDebugAppender" level="TRACE"/>
			<AppenderRef ref="AuthDebugAppender" level="${AuthLogLevel}"/>
		</Root>

		<!-- Logger for audit log -->
		<Logger name="JOCAuditLog" additivity="false" level="INFO">
			<AppenderRef ref="AuditLogAppender"/>
		</Logger>
		<!-- Logger for connection pool -->
		<Logger name="ConnectionPool" additivity="false" level="${ConnectionPoolLogLevel}">
			<AppenderRef ref="ConnectionPoolDebugAppender"/>
		</Logger>

		<!-- Proxy Logs -->
		<!-- Logger name="js7" level="info"/ -->
		<Logger name="js7.base.io.https.Https" level="WARN"/>
		<Logger name="js7.proxy.JournaledProxy" level="ERROR"/>
		<!-- Logger name="akka" level="info"/ -->
		<Logger name="akka.event.slf4j" level="WARN"/>
		<Logger name="akka.actor" level="INFO" additivity="false">
			<AppenderRef ref="JOCAppenderWithShortErrMessage" />
		</Logger>

		<!-- Apache and Apache Shiro Logs -->
		<Logger name="org.apache.shiro.session.mgt" level="WARN" />
		<Logger name="org.apache.shiro.realm.text.IniRealm" level="ERROR"/>

		<!-- JSON Validator -->
		<Logger name="com.networknt.schema" level="INFO" />

		<!-- log level 'trace' for sql bindings -->
		<Logger name="org.hibernate.type.descriptor.sql" level="TRACE"/>
		<!-- log level 'debug' for sql statements -->
		<Logger name="org.hibernate.SQL" level="INFO"/>
		<Logger name="org.hibernate.persister.entity.AbstractEntityPersister" level="DEBUG"/>
		<Logger name="org.hibernate.loader.entity.plan.EntityLoader" level="DEBUG"/>
		<Logger name="org.hibernate.orm.deprecation" level="OFF" />

		<Logger name="java.util.prefs" level="OFF" />

	</Loggers>
</Configuration>

Java Options for Jetty

The Java option values for Jetty are stored after installation:

  • on Linux systems in the directory:
    • /etc/default/joc if the installer was executed by the root account.
    • /home/<user>/jocrc if the installer was executed by a user account (./setup.sh -u <user>).
    • On startup, JOC Cockpit will check the /home/<user>/jocrc file and only if this cannot be found it will check the /etc/default/joc file.
  • on Windows systems in the Registry under:
    • HKLM\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\sos_joc\Parameters\Java
  • Java Memory options can also be configured by opening the sos_jocw.exe which can be found in the joc_home\service directory.

Image Removedincludes certain configuration items which can be used to configure JOC Cockpit. Details about how to configure JOC Cockpit the article JS7 - JOC Cockpit Configuration Items can be followed. 

Anchor
resources
resources
Further Resources

...