How It Works

How It Works

The QuartzDesk platform consists of the following three downloadable components:

  • QuartzDesk Web Application (quartzdesk-web-x.y.z.war)
  • QuartzDesk JVM Agent (quartzdesk-agent-x.y.z.jar)
  • QuartzDesk Public API Library (quartzdesk-api-x.y.z.jar)

 

QuartzDesk Web Application

This is the main component whose installation is required for all QuartzDesk editions. The QuartzDesk Web Application is a standard Java web-application distributed as a WAR file that can be deployed to any light-weight Java servlet container (Tomcat, Jetty, etc.), or full-fledged Java application server (IBM WebSphere, RedHat JBoss, etc.). For the complete list of all currently supported servlet containers and application servers, please refer to our Supported Platforms list. The QuartzDesk Web Application provides the Graphical User Interface (GUI) for the QuartzDesk platform. Using this GUI, users can connect via the JMX protocol to remote Quartz scheduler instances and perform all management and monitoring operations.

The installation of the QuartzDesk Web Application component is described in the QuartzDesk Web-Application Installation and Upgrade Guide.

 

QuartzDesk JVM Agent

This component is required for the QuartzDesk Standard and Enterprise editions only. The QuartzDesk JVM Agent component works as a specialized JVM plugin that provides the following functionality:

  • Discovery of all Quartz scheduler instances running on the JVM.
  • Automatic registration of job listeners for all discovered Quartz scheduler instances.
  • On-the-fly instrumentation of the Quartz scheduler API's Java bytecode in order to add new methods to the Quartz scheduler MBean API. These injected methods are invoked by the QuartzDesk Web Application and they expose functionality that is not available in the standard Quartz scheduler MBean API. For example, the agent injects methods to access extended, trigger-type specific attributes and methods to create and update triggers. Another example where the instrumentation comes in handy is working around / fixing JMX related bugs in application servers.
  • Registration of agent specific MBeans to access job and trigger execution history, statistics, execution notification rules etc.
  • Execution notification rules framework for near-real-time job and trigger monitoring.
  • Accessing messages enqueued by execution notification rules.
  • Recording the job & trigger execution history including the interception of job execution log messages.
  • Providing near-real-time access to the intercepted log messages produced by the currently executing job. These messages can be viewed in the Currently Executing Jobs tab in the QuartzDesk GUI for all currently executing jobs.
  • Starting of an optional JMXMP connector for the JVM's platform MBean server. (Note: this feature will be available in QuartzDesk 1.5.0)
  • etc.

 

In the future (QuartzDesk 2.0) the agent will provide a powerful job orchestration framework. Do you need to execute job B as soon as job A finishes executing? Only if job A finishes with a specific execution status (success, veto, error), or produces a specific result? Only if the job A's execution log contains a particular value? If you answered yes to any of these questions, then the job orchestration framework will be there for you!

We have lots of other ideas for the future agent functionality, but let us keep them secret for now.

The installation of the QuartzDesk JVM Agent component is described in the QuartzDesk JVM Agent Installation and Upgrade Guide.

 

QuartzDesk Public API Library

This component is also required for the QuartzDesk Standard and Enterprise editions only. The QuartzDesk Public API Library works primarily as an interface between managed Quartz scheduler instances and the QuartzDesk JVM Agent. The library contains:

  • Quartz job listeners for all supported Quartz scheduler versions.
  • Specialized logging Appenders and Handlers for all popular Java logging frameworks (log4j, log4j2, logback, jul). These Appenders and Handlers can be configured to intercept log messages produced by executed jobs. These messages are persisted in the execution history and can be viewed in the QuartzDesk GUI. They can be parsed and analyzed by custom (JavaScript-coded) execution notification rules.
  • SOAP client API for the QuartzAnywhere web-service through which 3rd party applications can manage and monitor remote Quartz scheduler instances. The QuartzAnywhere web-service is an integral part of the QuartzDesk Web Application component.

The QuartzDesk Public API Library is distributed as a single JAR file and Quartz scheduler enabled applications only need to include this library on their runtime classpath. For web applications this typically involves copying the library to the web application's WEB-INF\lib folder. There are no other installation steps required to use this library, just drop it on the classpath and that is it.

Starting with QuartzDesk 1.4.0, the QuartzDesk Public API Library component is published to the Maven Central repository so that developers can easily add it as a runtime dependency in their Maven-based projects.

 

 

Deployment

The following figures describe deployment scenarios and roles of individual QuartzDesk platform components. There are two figures, the first one depicts the deployment scenario for the QuartzDesk Standard and Enterprise edition and its contains all three required components (QuartzDesk Web Application, QuartzDesk JVM Agent and QuartzDesk Public API Library). The second figure depicts the simplistic deployment model for the QuartzDesk Lite edition and it only contains the QuartzDesk Web Application component because the other two components are not used and supported for this feature-restricted edition.

At the bottom of both deployment scenarios you can see a JVM powering a Java servlet container / application server with deployed a QuartzDesk Web Application component. The QuartzDesk Web Application connects via JMX to two remote JVMs. The first JVM on the left is a JVM that powers a Java servlet container / application server with two deployed Quartz scheduler enabled applications. On the right, there is a JVM powering a standalone Quartz scheduler enabled application.

 

Standard & Enterprise Edition

QuartzDesk Standard / Enterprise edition deployment.

 

The two QuartzDesk JVM Agents in the above figure use dedicated quartzdesk_agent databases. Please note that this is not strictly required and it is usually preferable to use a shared quartzdesk_agent database for multiple QuartzDesk JVM Agents. Such a shared setup does not cause any data collisions provided that individual Quartz schedulers use unique MBean object names.

The decision on whether to use a shared quartzdesk_agent database, or multiple dedicated, or partially shared databases depends on the number of active jobs and triggers running on individual JVMs, the job execution frequency and other factors. As a general rule of thumb a single quartzdesk_agent database can easily handle hundreds of active jobs and triggers and hundreds of job executions per day. There are no hard rules and if you are unsure about the sizing, please contact our Support by submitting a support ticket, or email us at This email address is being protected from spambots. You need JavaScript enabled to view it. to discuss your requirements. 

 

Lite Edition

 QuartzDesk Lite edition deployment.