This is a prerelease version.

View latest

Programmatic Configuration

You can configure your User Code Namespaces and data structures programmatically. You can specify JAR, JARS IN ZIP, and CLASS resources in programmatic configuration.

You must create a Member.java file containing the required code and save it to your class configuration folder. The file will be similar to the following:

package com.hazelcast.namespace.staticconfig;
import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.UserCodeNamespaceConfig;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;
import java.net.MalformedURLException;
import java.nio.file.Paths;
public class Member {
    public static void main(String[] args) {
        // Setup a Hazelcast member with namespace resources
        Config config = new Config(); (1)
        config.getNamespacesConfig().setEnabled(true); (2)
        UserCodeNamespaceConfig namespaceConfig = new UserCodeNamespaceConfig("namespace_name"); (3)
        namespaceConfig.addJarsInZip(Paths.get("/etc/path/to/all-my-jars.zip").toUri().toURL(), "my-resources-zip"); (4)
        config.getNamespacesConfig().addNamespaceConfig(namespaceConfig); (5)
        MapConfig mapConfig = new MapConfig("imap_name"); (6)
        mapConfig.setUserCodeNamespace("namespace_name"); (7)
        config.addMapConfig(mapConfig); (8)
        HazelcastInstance hz = Hazelcast.newHazelcastInstance(config); (9)

        // The HazelcastInstance is started, with our resources available to executions on our defined IMap...

        // Execute user code from clients on the Hazelcast member now that it has the required context
        hz.getMap("imap_name").executeOnEntries(new CustomEntryProcessor()); (10)
    }
}
1 Creates a new Config as the base for configuring our Hazelcast member
2 Enables User Code Namespaces in the Config
3 Creates a UserCodeNamespaceConfig with a name of namespace_name
4 Adds resources to the namespace, in this case JARS IN ZIP from a local URL
5 Adds the completed UserCodeNamespaceConfig to the parent UserCodeNamespacesConfig in Config
6 Creates a new MapConfig for the map named imap_name
7 Sets the namespace for the imap_name to namespace_name
8 Adds the newly created MapConfig to the parent Config
9 Starts a new Hazelcast member using our defined Config
10 Accesses the imap_name and runs the CustomEntryProcessor from a client, leveraging the User Code Namespaces to provide the member with the classpath context it needs for execution