Deploying User Code | Ignite Documentation

Ignite Summit 2024 — Call For Speakers Now Open — Learn more

Edit

Deploying User Code

In addition to peer class loading, you can deploy user code by configuring UriDeploymentSpi. With this approach, you specify the location of your libraries in the node configuration. Ignite scans the location periodically and redeploys the classes if they change. The location may be a file system directory or an HTTP(S) location. When Ignite detects that the libraries are removed from the location, the classes are undeployed from the cluster.

You can specify multiple locations (of different types) by providing both directory paths and http(s) URLs.

Deploying from a Local Directory

To deploy libraries from a file system directory, add the directory path to the list of URIs in the UriDeploymentSpi configuration. The directory must exist on the nodes where it is specified and contain jar files with the classes you want to deploy. Note that the path must be specified using the "file://" scheme. You can specify different directories on different nodes.

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="         http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/util         http://www.springframework.org/schema/util/spring-util.xsd">
    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="deploymentSpi">
            <bean class="org.apache.ignite.spi.deployment.uri.UriDeploymentSpi">
                <property name="temporaryDirectoryPath" value="/tmp/temp_ignite_libs"/>
                <property name="uriList">
                    <list>
                        <value>file://freq=2000@localhost/home/username/user_libs</value>
                    </list>
                </property>
            </bean>
        </property>
    </bean>
</beans>
IgniteConfiguration cfg = new IgniteConfiguration();

UriDeploymentSpi deploymentSpi = new UriDeploymentSpi();

deploymentSpi.setUriList(Arrays.asList("file://freq=2000@localhost/home/username/user_libs"));

cfg.setDeploymentSpi(deploymentSpi);

try (Ignite ignite = Ignition.start(cfg)) {
    //execute the task represented by a class located in the "user_libs" directory 
    ignite.compute().execute("org.mycompany.HelloWorldTask", "My Args");
}

You can pass the following parameter in the URL:

Parameter Description Default Value

freq

Scanning frequency in milliseconds.

5000

Deploying from a URL

To deploy libraries from an http(s) location, add the URL to the list of URIs in the UriDeploymentSpi configuration.

Ignite parses the HTML file to find the HREF attributes of all <a> tags on the page. The references must point to the jar files you want to deploy.

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="         http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/util         http://www.springframework.org/schema/util/spring-util.xsd">
    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="deploymentSpi">
            <bean class="org.apache.ignite.spi.deployment.uri.UriDeploymentSpi">
                <property name="temporaryDirectoryPath" value="/tmp/temp_ignite_libs"/>
                <property name="uriList">
                    <list>
                        <value>http://username:password;freq=10000@www.mysite.com:110/ignite/user_libs</value>
                    </list>
                </property>
            </bean>
        </property>
    </bean>
</beans>
IgniteConfiguration cfg = new IgniteConfiguration();

UriDeploymentSpi deploymentSpi = new UriDeploymentSpi();

deploymentSpi.setUriList(Arrays
        .asList("http://username:password;freq=10000@www.mysite.com:110/ignite/user_libs"));

cfg.setDeploymentSpi(deploymentSpi);

try (Ignite ignite = Ignition.start(cfg)) {
    //execute the task represented by a class located in the "user_libs" url 
    ignite.compute().execute("org.mycompany.HelloWorldTask", "My Args");
}

You can pass the following parameter in the URL:

Parameter Description Default Value

freq

Scanning frequency in milliseconds.

300000