Controlling system property names used by littlegrid

Coherence provides the ability for you to supply default values in your configuration files (such as cache configuration and override file) and for those static values (as defined in the file) to be selectively overridden at runtime, so for instance the address and port that an Extend proxy server listens on might look something like the below:

<tcp-acceptor>
    <local-address>
        <address system-property="tangosol.coherence.extend.address">localhost</address>
        <port system-property="tangosol.coherence.extend.port">9099</port>
    </local-address>
</tcp-acceptor>

So, in the above, the default Extend port will be 9099, unless a different values is supplied using a Java system property, such as:

java -Dtangosol.coherence.extend.port=20123 -cp some-classpath-etc

Note

Most Coherence projects use the ability to override values, so they can have the minimum number of configuration files as possible and avoid having specific configuration files per environment.

What?

littlegrid has a fluent API that is based around the builder pattern, the littlegrid ClusterMemberGroup.Builder allows a value to be set and for setting of values to be chained, e.g.

memberGroup = ClusterMemberGroupUtils.newBuilder()
    .setWkaPort(15001)
    .setExtendPort(16001)
    ....

The values that are set are then mapped to internal names and littlegrid provides a mechanism to then map its internal names to Coherence system property names.

Note

You can configure littlegrid in a number of ways (Builder, properties file, system properties or environment variables), they all internally map to the builder names, see Controlling and configuring littlegrid

Why?

Put simply - each project is different! Projects often tend to adopt their own conventions and standard naming.

….so, littlegrid provides the ability to map its internal builder names to Coherence system property names to accommodate different project naming conventions or standards, so for instance if the project is called something like Jupiter, then sometimes the project team may choose to prefix their system properties, e.g.

<address system-property="jupiter.extend.port">localhost</address>

How?

littlegrid maintains a mapping of builder keys to system properties - this allows it to be easily configured to use custom system properties instead of the standard Coherence system properties. To provide your own mapping, simply include a file called littlegrid-builder-system-property-mapping-override.properties on your class-path in the root directory or /littlegrid directory off the class-path root.

Below is a list of littlegrid builder name to default system property names:

littlegrid builder name Default system property name
FastStartJoinTimeoutMilliseconds littlegrid.join.timeout.milliseconds
CacheConfiguration tangosol.coherence.cacheconfig
ClientCacheConfiguration tangosol.coherence.cacheconfig
OverrideConfiguration tangosol.coherence.override
ClientOverrideConfiguration tangosol.coherence.override
CustomConfiguredCacheConfiguration tangosol.coherence.cacheconfig
DistributedLocalStorage tangosol.coherence.distributed.localstorage
TcmpEnabled tangosol.coherence.tcmp.enabled
ExtendEnabled tangosol.coherence.extend.enabled
ClusterName tangosol.coherence.cluster
SiteName tangosol.coherence.site
RackName tangosol.coherence.rack
MachineName tangosol.coherence.machine
CustomConfiguredRoleName tangosol.coherence.role
StorageEnabledRoleName tangosol.coherence.role
StorageDisabledClientRoleName tangosol.coherence.role
StorageEnabledExtendProxyRoleName tangosol.coherence.role
JmxMonitorRoleName tangosol.coherence.role
ExtendProxyRoleName tangosol.coherence.role
ExtendClientRoleName tangosol.coherence.role
LocalAddress tangosol.coherence.localhost
LocalPort tangosol.coherence.localport
WkaAddress tangosol.coherence.wka
WkaPort tangosol.coherence.wka.port
Ttl tangosol.coherence.ttl
ExtendAddress tangosol.coherence.extend.address
ExtendPort tangosol.coherence.extend.port
LogLevel tangosol.coherence.log.level
LogDestination tangosol.coherence.log
CoherenceManagement tangosol.coherence.management
CoherenceManagementRemote tangosol.coherence.management.remote
ManagementJmxRemote com.sun.management.jmxremote