Configuration

POP-Java can be configured by placing a file in a specific location: ${POPJAVA_LOCATION}/etc/popjava.properties.

There exists three level of configuration in POP-Java, the first level is POP Hardcoded values, the second is system level override in the location specified above, while the third level is user level override which enable the user to tweak POP even more locally. This can be seen in Figure 1.

../../_images/popj-configuration-layers.png

Figure 1: POP-Java Configuration Layers

Note

For testing purpose the path ./etc/popjava.properties is also valid.

Parameters available

SYSTEM_JOBMANAGER_CONFIG : File

$POPJAVA_LOCATION/etc/jobmgr.conf with $POPJAVA_LOCATION falling back to ./ if not set. The location where the Job Manager configuration file located.

DEBUG : Booelan

false print debug information to console.

DEBUG_COMBOBOX : Booelan

false print Combox debug information to console.

RESERVE_TIMEOUT : Int

60000 milliseconds before the Job Manager free reserved registered resources.

ALLOC_TIMEOUT : Int

30000 milliseconds waiting for a connection to happen after a reservation.

CONNECTION_TIMEOUT : Int

30000 milliseconds waiting before a connection exception is thrown.

JOBMANAGER_UPDATE_INTERVAL : Int

10000 milliseconds waiting from interval to interval to check to free resources.

JOBMANAGER_SELF_REGISTER_INTERVAL : Int

43200000 milliseconds (1/2 day) when the Job Manager register itself on its neighbors.

JOBMANAGER_DEFAULT_CONNECTOR : String

jobmanager which connector is used when none is specified.

JOBMANAGER_PROTOCOLS : String[]

[ "socket" ] protocols which are used for the Job Manager.

JOBMANAGER_PORTS : Int[]

[ 2711 ] ports which are used in combination with JOBMANAGER_PROTOCOLS.

JOBMANAGER_EXECUTION_BASE_DIRECTORY : File

. which directory should Job Manager use to start objects.

JOBMANAGER_EXECUTION_USER : String

null with which user should the Job Manager start objects as.

POP_JAVA_DEAMON_PORT : Int

43424 the default port that the Java Daemon should use.

SEARCH_NODE_UNLOCK_TIMEOUT : Int

10000 default time before unlocking the semaphore if no result was received.

SEARCH_NODE_SEARCH_TIMEOUT : Int

0 default timeout for a Search Node research. 0 means that the first node responding will be used.

SEARCH_NODE_MAX_REQUESTS : Int

Integer.MAX_VALUE how many nodes should we visit before stopping. Unlimited by default.

SEARCH_NODE_EXPLORATION_QUEUE_SIZE : Int

300 how many nodes should we remember before dropping them to save memory.

TFC_SEARCH_TIMEOUT : Int

5000 minimum time to wait for TFC results are returned to the user. Similar to SEARCH_NODE_SEARCH_TIMEOUT.

DEFAULT_ENCODING : String

xdr

SELECTED_ENCODING : String

raw

DEFAULT_PROTOCOL : String

socket which protocol should we use when none is specified.

PROTOCOLS_WHITELIST : Set<String>

[ ] which protocols should be allowed to be used.

PROTOCOLS_BLACKLIST : Set<String>

[ ] which protocols should be blocked and not be used; also applied when using PROTOCOLS_BLACKLIST

ASYNC_CONSTRUCTOR : Booelan

true

ACTIVATE_JMX : Booelan

false

CONNECT_TO_POPCPP : Booelan

false

CONNECT_TO_JAVA_JOBMANAGER : Booelan

true

REDIRECT_OUTPUT_TO_ROOT : Booelan

true

USE_NATIVE_SSH_IF_POSSIBLE : Booelan

true

SSL_PROTOCOL_VERSION : String

TLSv1.2

SSL_KEY_STORE_FILE : File

null the file with the Key Store with the private key.

SSL_KEY_STORE_PASSWORD : String

null password for opening and checking the keystore.

SSL_KEY_STORE_PRIVATE_KEY_PASSWORD : String

null password to decrypt the private key in the keystore.

SSL_KEY_STORE_LOCAL_ALIAS : String

null alias of the private key and public certificate.

SSL_KEY_STORE_FORMAT : KeyStoreFormat.

null, format JKS, PKCS12 (experimental).

New attribute

Adding a new attribute require the modification of the Configuration class, this is because we grant access to attributes via get and set methods. The process is done 4 steps.

  1. Choose the name of the attribute and add it to the Settable enumerator.
private enum Settable {
    MY_NEW_ATTRIBUTE,
    ...
}
  1. Add a class attribute which will be used to store the value.
private String myNewAttribute = "";
  1. Create getter and setter methods.
public String getMyNewAttribute() {
    return myNewAttribute;
}
public void setMyNewAttribute(String value) {
    setUserProp(Settable.MY_NEW_ATTRIBUTE, value);
    myNewAttribute = value;
}

Note

Using setUserProp enable us to save only the changed information if the User call store().

  1. Add the parsing rules in load.
switch(keyEnum) {
    case MY_NEW_ATTRIBUTE: myNewAttribute = value; break;
    ...
}

Remarks

All Java version except Java 9, properties file are encoded with ISO-8859-1 which means that all character outside the first 256 byte will be encoded with its hexadecimal form \uXXXX. For this reason be on alert when using characters outside this charset manually. From Java 9 properties files are saved using UTF-8 so this problem shouldn’t matter.