Chapter 6. Using Script Modules for Dependencies and Loading Custom Functions

When automating management tasks or creating clients to interact withJBoss ON, it is frequently necessary to create custom classes and functions. The JBoss ON CLI implements CommonJS to support script modules.
Note
Script modules are written in JavaScript.

6.1. About Script Dependencies and Exporting Functions

When executing a script from a file by using the rhq-cli.sh -f option, there is no way to define an explicit dependency within an external file. Any functions required by that script must be contained in the script or accessible to the script.
The JBoss ON CLI uses CommonJS to support script modules. CommonJS is designed as a loading mechanism to express dependencies between scripts. If a script is in the default modules directory, then the script can be loaded into the CLI session or referenced in a script, and any exported function is available to the CLI. Modules can be used to load other modules into the CLI session, as well.
The only part of a script that is exposed is a function prepended with exports (following the CommonJS convention).
For example, the sample util.js file exports a foreach function which can search for any object in JBoss ON, as generic objects, arrays, criteria (search) objects, or maps.
exports.foreach = function (obj, fn) {
  var criteriaExecutors = {
  Alert: function(criteria) { return AlertManager.findAlertsByCriteria(criteria); },
  ... 8< ...
  }
All of the functions and objects that are not exported are private and cannot be used outside the module.
A module can be loaded into another module (creating a dependency) by listing the other module as a requirement. Note that, while the .js can be present in the requirement code, the preferred method is to exclude it.
var printResults = require("modules:/modules/util");
TIP
Only an exported function is available, and then it is only available through a variable defined in the script. For example, for the printResults variable, the foreach function is available, referenced as printResults.foreach.
This means that difference script modules can have functions defined in them with the same name, but because there are different variable namespaces, there is no conflict.