Java engine configuration objects

This section provides a detailed description of all configuration object properties to configure Java engines. A Java engine is used to execute a Java fragment. A snippet is provided for each configuration object showing the syntax for specifying all of the configuration values.

Java engine configuration has a configuration type of com.tibco.ep.dtm.configuration.javaengine.

Engine affinity

The com.tibco.ep.dtm.configuration.javaengine configuration type is an example of a configuration that must be associated with a specific engine. This association is called engine affinity. Engine affinity can be explicitly specified using the JavaEngine.associatedWithEngines configuration field (see Table 4.1, “JavaEngine object properties”). Engine affinity is also implicitly defined by where the engine configuration is specified.

Implicit engine affinity is set using these rules:

  • If engine configuration is contained in a fragment archive, the engine configuration is associated with all engines running the fragment.

  • If engine configuration is specified in a node deploy global configuration section, NodeDeploy.globalConfiguration (see the section called “NodeDeploy”), the engine configuration is associated with all engines running on all nodes.

    name = "node-deploy-configuration"
    version = "1.0.0"
    type = "com.tibco.ep.dtm.configuration.node"
    configuration =
    {
        NodeDeploy =
         {
            globalConfiguration =
            [
                //
                //    Associated with all engines on all nodes
                //  
                “”” 
                name = "java-engine-configuration"
                version = "1.0.0"
                type = "com.tibco.ep.dtm.configuration.javaengine"
                configuration =
                {           
                    JavaEngine = { ... }
                }               
                                
                ”””             
            ]                   
            nodes =             
            {                   
                  “A.X" = { ... }
                  “B.X" = { ... }
            }                       
        }                       
    }
  • If engine configuration is specified in the node specific configuration section of a node deploy configuration, Node.configuration (see the section called “Node”), the engine configuration is associated with all engines running on that node.

    name = "node-deploy-configuration"
    version = "1.0.0"
    type = "com.tibco.ep.dtm.configuration.node"
    configuration =
    {
        NodeDeploy =
        {
            nodes =
            {
                “A.X" =
                {
                    configuration =
                    [
                        //
                        //  Associated with all engines on node A.X
                        //
                        “””
                        name = "java-engine-configuration"
                        version = "1.0.0"
                        type = "com.tibco.ep.dtm.configuration.javaengine"
                        configuration =
                        {       
                            JavaEngine = { ... }
                        }       
                        ”””     
                    ]
                } 
                "B.X" = { ... }     
            }                   
        }                       
    }
    
  • If engine configuration is specified in the engine specific configuration section of a node deploy configuration, EngineBinding.configuration (see the section called “EngineBinding”), the engine configuration is associated with only that engine.

    name = "node-deploy-configuration"
    version = "1.0.0"
    type = "com.tibco.ep.dtm.configuration.node"
    configuration =
    {
        NodeDeploy =
        {
            nodes =
            {
                “A.X" =
                {
                    engines =
                    {
                        "settlement-engine" =
                        {
                            fragmentIdentifier = "settlement-engine-fragment"
                            configuration =
                            [
                                //
                                //  Associated with settlement-engine on node A.X
                                //
                                “””
                                name = "java-engine-configuration"
                                version = "1.0.0"
                                type = "com.tibco.ep.dtm.configuration.javaengine"
                                configuration =
                                {
                                    JavaEngine = { ... }
                                }
                                ”””
                            ]
                        }
                    }
                }
                "B.X" = { ... }
            }
        }
    }
    

Explicit engine affinity is set using the JavaEngine.associatedWithEngines field in configuration. This field can contain specific engine names or a reguiar expression identifying multiple engines.

name = "java-engine-configuration" 
version = "1.0.0"           
type = "com.tibco.ep.dtm.configuration.javaengine"
configuration =             
{                           
    JavaEngine = 
    {
        //
        //    Associated with settlement-engine
        //
        associatedWithEngines = [ "settlement-engine" ]
        ...
    }
}

Configuration types that support engine affinity define engine specific configuration values that may not work correctly when they are associated with multiple engines on the same machine. For example, if the engine configuration defines a port number, the configuration will work for a single engine, but it will fail if multiple engines are running on the same machine. The configuration can be activated successfully on one engine, but all other engines will get a duplicate port failure. For reasons like this, it is generally best to associate configuration types that support engine affinity with a specific engine.

Audits

The Java engine configuration is audited whenever it changes state, e.g. load to active. There are detailed audits for each of the configuration objects in the Java engine configuration file. These are described in the section called “JavaEngine” and the section called “JVM”. There are also these global audits:

  • All Java engine configurations for a specific engine must have the same configuration name. Attempting to load a Java engine configuration for an engine with an already active configuration using a different configuration name will cause an audit failure during configuration activation.

  • Java engine configurations can only be loaded and activated during engine start-up. Attempting to activate a Java engine configuration that has an engine affinity with an already running engine will cause an audit failure during configuration activation.

JavaEngine

The JavaEngine object is the top-level container for the Java engine configuration. Figure 4.1, “JavaEngine relationships” shows the relationships to other configuration objects.

JavaEngine relationships

Figure 4.1. JavaEngine relationships


A detailed description of the configuration object properties is in Table 4.1, “JavaEngine object properties” and a snippet for these properties is in Example 4.1, “JavaEngine object snippet”.

Table 4.1. JavaEngine object properties

NameTypeDescription
associatedWithEnginesString [ ]Engines associated with this configuration. Each entry can be a specific engine name or a regular expression that applies to more than one engine. If present, there must be at least one element in the array . If this field is not set the configuration is associated with all engines. See the Javadoc for java.util.regex.Pattern for the regular expression syntax. Optional. No default, which causes the configuration to be associated with all engines. See also the section called “Engine affinity” for implicit default behavior.
jvmJVM configuration objectJVM configuration object. Optional. See the section called “JVM” for default values.
externalClassPathString [ ]Jar files and class hierarchies to add to the engine's class path. Paths must be absolute and in Java (forward-slash) format. Optional. No default value.
externalNativeLibraryPathAssociate array of String arrays with the key an operating system enumeration. The valid enumeration values are macos_x86_64, linux_x86_64, or windows_x86_64.An associative array specifying native library paths to add to an engine's library search path. Values are arrays of library paths. Paths must be absolute and be in the format appropriate for their operating system. Optional. No default.
systemPropertiesAssociative array of Strings with the system property name the key valueA list of Java system properties that will be set in each engine instance. Optional. No default value.
jvmArgsString [ ]A list of JVM arguments used for each engine's JVM. JVM arguments can also be specified on the deploy tool command line (see Transactional Memory Developers Guide for details). JVM arguments specified on the deploy tool command line override the same JVM argument specified in this configuration property. Optional. No default.

Example 4.1. JavaEngine object snippet

name = "java-engine-configuration"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.javaengine"
configuration =
{
    JavaEngine =
    {
        associatedWithEngines = [ "javaengine", "otherengine[0-9]" ]
        jvm = { ... }
        externalClassPath = 
        [
            "/an/external.jar"
            "/another/external.jar"
            "/a/class/file/hierarchy/root"
        ]   
        externalNativeLibraryPath = 
        {
            "macos_x86_64" = 
            [
                "/an/external/native"
                "/another/external/native"
            ]   
            "linux_x86_64" =
            [
                "/an/external/native"
                "/another/external/native"
            ]
        }
        systemProperties = 
        {
            prop1 = "val1"      
            prop2 = "val2"
            prop3 = "val3"
        }                         
        jvmArgs = 
        [
            "-Xmx1024m"
            "-Xms512m"  
            "-XX:MaxPermSize=768m"
            "-Xdebug"               
            "-Xnoagent"                   
            "-Djava.compiler=NONE"                          
            "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
        ]
    }
}


JVM

The JVM object defines product specific configuration values. Figure 4.2, “JVM relationships” shows the relationships to other configuration objects.

JVM relationships

Figure 4.2. JVM relationships


A detailed description of the configuration object properties is in Table 4.2, “JVM object properties” and a snippet for these properties is in Example 4.2, “JVM object snippet”.

Table 4.2. JVM object properties

NameTypeDescription
minimumDispatchThreadslongMinimum number of dispatch threads. Optional. Default value is 10.
maximumDispatchThreadslongMaximum number of dispatch threads. Optional. Default value is 2000.
timerParallelismlongNumber of timers that can be executing concurrently. Optional. Default value is 1.
timerResolutionMillisecondslongThe maximum timer resolution in milli-seconds. This is the interval at which timers are examined. Higher resolution timers have more impact on system performance. Optional. Default value is 1000.
shutdownTimerSecondslongMaximum time to wait for an engine to shut down before forcing it down with an error. Optional. Default value is 60.

Example 4.2. JVM object snippet

name = "java-engine-configuration"
version = "1.0.0"
type = "com.tibco.ep.dtm.configuration.javaengine"
configuration =
{
    JavaEngine =
    {
        jvm =
        {
            minimumDispatchThreads = 10
            maximumDispatchThreads = 2000
            shutdownTimerSeconds = 60             
            timerParallelism = 1
            timerResolutionMilliseconds = 1000
        }
    }
}