Hazelcast Writer
Writes to Hazelcast maps.
The following describes use of HazelcastWriter with an input stream of a user-defined type. For use with a CDC reader or DatabaseReader input stream of type WAEvent, see Replicating Oracle data to a Hazelcast "hot cache".
Hazelcast Writer properties
property | type | default value | notes |
---|---|---|---|
BatchPolicy | String | eventCount:10000, Interval:30 | This property is used only when the Mode is InitialLoad. The batch policy includes eventCount and interval (see Setting output names and rollover / upload policies for syntax). Events are buffered locally on the Striim server and sent as a batch to the target every time either of the specified values is exceeded. When the app is stopped, any remaining data in the buffer is discarded. To disable batching, set to With the default setting, data will be written every 30 seconds or sooner if the buffer accumulates 10,000 events. |
ClusterName | String | the Hazelcast cluster group-name value, if required | |
ConnectionURL | String |
| |
Maps | String | With an input stream of a user-defined type, the name of the Hazelcast map to write to. See the example below. With an input stream of type WAEvent, | |
Mode | String | incremental | With an input stream of a user-defined type, do not change the default. See Replicating Oracle data to a Hazelcast "hot cache" for more information. |
ORMFile | String | fully qualified filename of the Hazelcast object-relational mapping (ORM) file | |
Password | encrypted password | the group-password value corresponding to the group-name value specified in ClusterName |
Using Hazelcast Writer
To use Hazelcast Writer, you must:
Write a Java class defining the Plain Old Java Objects (POJOs) corresponding to the input stream's type (see http://stackoverflow.com/questions/3527264/how-to-create-a-pojo for more information on POJOs), compile the Java class to a .jar file, copy it to the
Striim/lib
directory of each Striim server that will run the HazelcastWriter target, and restart the server. If the class is missing, a "ClassNotFound" error will be written to the log.Write an XML file defining the object-relational mapping to be used to map stream fields to Hazelcast maps (the "ORM file") and save it in a location accessible to the Striim cluster.
The following example assumes the following stream definition:
CREATE TYPE invType ( SKU String key, STOCK String, NAME String, LAST_UPDATED DateTime); CREATE STREAM invStream OF invType;
The following Java class defines a POJO corresponding to the stream:
package com.customer.vo; import java.io.Serializable; import java.util.Date; public class ProductInvObject implements Serializable { public Long sku = 0; public double stock = 0; public String name = null; public Date lastUpdated = null; public ProductInvObject ( ) { } @Override public String toString() { return "sku : " + sku + ", STOCK:" + stock + ", NAME:" + name + ", LAST_UPDATED:" + lastUpdated ; } }
The following ORM file maps the input stream fields to Hazelcast maps (see the discussion of data type support below):
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" version="2.4"> <entity name="prodcInv" class="com.customer.vo.ProductInvObject" > <table name="MYSCHEMA.INV"/> <attributes> <id name ="sku" attribute-type="Long" > <column nullable="false" name="SKU" /> </id> <basic name="stock" attribute-type="double" > <column nullable="false" name="STOCK" /> </basic> <basic name="name" attribute-type="String" > <column name="NAME" /> </basic> <basic name="lastUpdated" attribute-type="java.util.Date" > <column name="LAST_UPDATED" /> </basic> </attributes> </entity> </entity-mappings>
Data types are converted as specified in the OML file. Supported types on the Hazelcast side are:
binary (byte[])
Character, char
Double, double
Float, float
int, Integer
java.util.Date
Long, long
Short, short
String
Assuming that the ORM file has been saved to Striim/Samples/TypedData2HCast/invObject_orm.xml
, the following TQL will write the input stream events to Hazelcast:
CREATE TARGET HazelOut USING HazelcastWriter ( ConnectionURL: '203.0.1113.50:5702', ormFile:"Samples/TypedData2HCast/invObject_orm.xml", mode: "incremental", maps: 'invCache' ) INPUT FROM invStream;
If the application terminates, after recovery (see Recovering applications) the Hazelcast map may contain some duplicate events. If Hazelcast crashes, stop the application, restart Hazelcast, then restart the application.