The JavaScript interface to the replicator enables filters to be written using standard JavaScript with a complete object-based interface to the internal Java objects and classes that make up the THL data.
For more information on the Rhino JavaScript implementation, see Rhino.
The basic structure of a JavaScript filter is as follows:
// Prepare the filter and setup structures
prepare()
{
}
// Perform the filter process; function is called for each event in the THL
filter(event)
{
// Get the array of DBMSData objects
data = event.getData();
// Iterate over the individual DBMSData objects
for(i=0;i<data.size();i++)
{
// Get a single DBMSData object
d = data.get(i);
// Process a Statement Event; event type is identified by comparing the object class type
if (d = instanceof com.continuent.tungsten.replicator.dbms.StatementData)
{
// Do statement processing
}
else if (d = instanceof com.continuent.tungsten.replicator.dbms.RowChangeData)
{
// Get an array of all the row changes
rows = data.get(i).getRowChanges();
// Iterate over row changes
for(j=0;j<rows.size();j++)
{
// Get the single row change
rowchange = rows.get(j);
// Identify the row change type
if (rowchange.getAction() == "INSERT")
{
}
....
}
}
}
}
The following sections will examine the different data structures, functions, and information available when processing these individual events.
Information about the filtering process can be reported into the
standard trepsvc.log
file by using
the logger
object. This supports different
methods according to the configured logging level:
logger.info()
— information level
entry, used to indicate configuration, loading or progress.
logger.debug()
— information will be
logged when debugging is enabled, used when showing progress during
development.
logger.error()
— used to log an error
that would cause a problem or replication to stop.
For example, to log an informational entry that includes data from the filter process:
logger.info("regexp: Translating string " + valueString.valueOf());
To raise an exception that causes replication to stop, a new
ReplicatorException
object must be created that
contains the error message:
if(col == null)
{
throw new com.continuent.tungsten.replicator.ReplicatorException(
"dropcolumn.js: column name in " + schema + "." + table +
" is undefined - is colnames filter enabled and is it before the dropcolumn filter?"
);
}
The error string provided will be used as the error provided through trepctl, in addition to raising and exception and backtrace within the log.