Versions Compared

Key

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

Introduction

The Case Engine Scheduler Component is introduced to be able to schedule without having a dependency on the runtime. It supports all scheduling options that the case engine needs. The  Case Engine Scheduler is implemented using Quartz Enterprise Job Scheduler.


Table of Contents

Panel

Table of Contents
maxLevel2

Info

The case engine scheduler will share the Quartz scheduler instance with its own scheduler, so if you already configured Quartz for the basic scheduler, you just need to enable the case-engine profile and you can skip the remainder of this guide.

Installation

Steps:

  1. The scheduler will be automatically available if the case-engine profile
    Include Page
    _ProfileCaseEngine
    _ProfileCaseEngine
    profile is added to the list of spring active profiles in the bootstrap.properties.  More More information on how to configure the application using Spring Profiles can be found here: External application configuration with Spring Profiles.
  2. Add the application-case-engine.properties file in the configuration location if it does not yet exist. This properties file is added in the 
    Include Page
    _ConfigLocation
    _ConfigLocation
     directory directory when using the Blueriq installer. Otherwise, please create this according to the documentation below.
  3. Run the provided scripts for creating the quartz tables in the database: msssql.sql, pgsql.sql or oracle.sql. The scripts are located in the release zip in \Runtime\Java\Webapp\DBScripts\blueriq-case-engine-scheduler-quartz
  4. Define quartz database connection in the application-externaldatasources.properties
    Include Page
    _PropertiesExternalDatasources
    _PropertiesExternalDatasources
    file.


Info

Steps 3 and 4 are applicable only if a job store database connection is chosen Quartz triggers and jobs are stored in a database instead of in - memory job store.


Configuration

Info

Every Quartz configuration property has to be specified in application-case-engine.properties for the Runtime.

In order to tune resources for job execution, we provided a few details about the Thread Pool.


Quartz is configured using a set of properties. Quartz uses a job store in order to persist jobs details, triggers and other job related information. We support two types of job stores:

Memory (default)

Info
titleInfo

This is the default configuration for Java environments.
For more details about in memory job store configuration please visit Config RAM Job Store.

By default memory mode is enabled which should be should be used only for demos and standalone development. For recommended settings please check the database settingsthe Database section. For memory the following setting should be set in the application-case-engine.properties.the 

Include Page
_PropertiesCaseEngine
_PropertiesCaseEngine
.

Code Block
titleapplication-schedulercase-quartzengine.properties
spring.quartz.job-store-type = memory

Database

Scripts to create the required database content are provided for the following databases:

  • SQL Server
  • Oracle

There are two types of connection that are supported:

Generate the Quartz Database

Warning

Create the Quartz database with respect to the database used (either Oracle or MSSQL).

In the Blueriq release zip there is a case-engine-scheduler-quartz directory that contains SQL scripts. Use your favorite database tool to run those scripts against the database server.

  1. Connect to the database server with the database tool.
  2. Create a new database dedicated to quartz - pick a meaningful name for this, e.g. 'CaseEngineQuartzScheduler'.
  3. Depending on the database tool used, one must make sure that the new database created is selected and set by default in the editor.
  4. Import the mssql.sql (for MSSQL) or oracle.sql (for Oracle server) and run it in the editor. If the run was successful new tables should be present in the newly created database.

JDBC Connection

To enable the JDBC Connection the externaldatasources profile must enabled and the following properties have to be usedFor database mode, which is required for production, specify the following in

Include Page
_PropertiesCaseEngine
_PropertiesCaseEngine
:

Code Block
titleapplication-case-engine.properties
spring.quartz.job-store-type = jdbc
spring.quartz.properties.org.quartz.jobStore.tablePrefix = QRTZ_

Driver delegate

For the two different database options you might need to specify a driver delegate for the database to work correctly:

Code Block
titleDriver delegate MSSQL - application-case-engine.properties
spring.
# Enable the delegate for the specific database
#spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
Code Block
titleDriver delegate Oracle - application-case-engine.properties
spring#spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate

External datasources

Code Block
languagetext
titleapplication-externaldatasources.properties - mssql
blueriq.datasource.scheduler-quartz.driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
blueriq.dataSource.scheduler-quartz.url = jdbc:sqlserver://<server_url>:<port>;databaseName=<database_name>;instance=<instance_name>
blueriq.datasource.scheduler-quartz.username = <user>
blueriq.datasource.scheduler-quartz.password = <password>
Code Block
languagetext
titleapplication-externaldatasources.properties - oracle
blueriq.datasource.scheduler-quartz.driverClassName = oracle.jdbc.driver.OracleDriver
blueriq.dataSource.scheduler-quartz.url = jdbc:oracle:thin:@<server_url>:<port>:xe
blueriq.datasource.scheduler-quartz.username = <user>
blueriq.datasource.scheduler-quartz.password = <password>
If necessary, create a new datasource. See Configuring JDBC database drivers for information on how to do this.
JobStoreTX allows Quartz managing quartz related transactions. 
PostgreSQLDelegate
#spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate

# when using a JDBC datasource enable tx
#spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

# when using a JNDI datasource enable CMT
#spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT

JDBCJobStore’s “table prefix” property is a string equal to the prefix given to Quartz’s tables that were created in your database. You can have multiple sets of Quartz’s tables within the same database if they use different table prefixes.

Info

When changing the org.quartz.jobStore.tablePrefix, please change the SQL create scripts accordingly.

Info

For more information and properties related to the connection JobStoreTX please visit JDBC-JobStoreTX.

JNDI Connection

To enable JNDI Connection the jndidatasources profile must be activated and the following properties have to be used:

 

Code Block
languagetext
titleapplication-case-engine.properties
spring.quartz.properties.org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
spring.quartz.properties.org.quartz.jobStore.tablePrefix = QRTZ_

Driver delegate

For the two different database options you might need to specify a driver delegate for the database to work correctly:

Code Block
languagetext
titleDriver delegate MSSQL - application-case-engine.properties
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
Code Block
languagetext
titleDriver delegate Oracle - application-case-engine.properties
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate

JNDI datasources

Code Block
languagetext
title application-jndidatasources.properties - jndi
// JBoss Example provided that the jndi name is set to java:jboss/jdbc/quartzdb
blueriq.datasource.scheduler-quartz.jndiName = java:jboss/jdbc/quartzdb

// Tomcat Example provided that the jndi name is set to jdbc/quartzdb
blueriq.datasource.scheduler-quartz.jndiName = java:/comp/env/jdbc/quartzdb

 JobStoreCMT relies upon transactions being managed by the application which is using Quartz. 

 

Info

For more information and properties related to the connection JobStoreCMT please visit JDBC-JobStoreCMT.

 

Thread Pool

If the Database configuration is chosen, we recommend to also add the thread pool with the following default values:

The quartz documentation suggests the following configuration: provided that the database allows X connections, then the threadCount must be set to X - 3.

Include Page
_DatasourceConfiguration
_DatasourceConfiguration

Info

The datasource created must be named scheduler-quartz

Thread Pool

When the database is configured, we recommend to also configure the thread pool. Each DCM project gets its Each DCM project gets it's own trigger. It is recommended to have a thread per DCM project. For example if you have 3 DCM projects you should set the threadCount to 3.

Please check that the threadCount does not exceed the number of available database connections (or connections in the database connection pool).  The quartz documentation suggests the following: provided that the database allows X connections, then the threadCount must be set to X - 3.

Below are the default thread Pool propertiesThread Pool properties are the following:

Code Block
languagepowershell
titleapplication-case-engine.properties
spring.quartz.properties.org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount = 2
Info

For more information and properties related to Quartz ThreadPool, please visit ThreadPool Configuration

Setup Quartz

Various spring configurations

Using spring cloud config

Info

Configure the runtime in the cloud. For more details about how to do this visit The runtime in the cloud.

Actions

Place your scheduler properties in 

Clustering

There are many configuration properties for clustering, see the Quartz documentation. To enable clustering, specify at least these properties:

Code Block
languagepowershell
titleapplication-case-engine.properties
 (Check here for example) in the searchLocations you specified for Spring Cloud.
  • Place application-externaldatasources.properties or application-jndidasarouces.properties files in the searchLocations you specified for Spring Cloud.
  • spring.quartz.properties.org.quartz.jobStore.isClustered=true
    spring.quartz.properties.org.quartz.scheduler.instanceName=MyClusteredScheduler
    # Have Quartz generate an instanceId for each node in the cluster
    spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO

    Using spring config additional location

    Info

    Configure a spring.config.additional-location for your application. For more details about how to do this visit Installing Runtime.

  • In spring.config.additional-location directory place the application-case-engine.properties (Check here for example) file.
  • In spring.config.additional-location directory place the application-externaldatasources.properties or application-jndidatasources.properties files

    Anchor
    Troubleshooting
    Troubleshooting
    Troubleshooting


    Info

    For more information on quartz configurations, please visit: Quartz-Scheduler.org.