@IgniteSpiMultipleInstancesSupport(value=true) @IgniteSpiConsistencyChecked(optional=false) public class UriDeploymentSpi extends IgniteSpiAdapter implements DeploymentSpi
DeploymentSpi
which can deploy tasks from
different sources like file system folders, email and HTTP.
There are different ways to deploy tasks in grid and every deploy method
depends on selected source protocol. This SPI is configured to work
with a list of URI's. Every URI contains all data about protocol/transport
plus configuration parameters like credentials, scan frequency, and others.
When SPI establishes a connection with an URI, it downloads deployable units
to the temporary directory in order to prevent it from any changes while
scanning. Use method setTemporaryDirectoryPath(String)
)
to set custom temporary folder for downloaded deployment units. SPI will
create folder under the path with name identical to local node ID.
SPI tracks all changes of every given URI. This means that if any file is
changed or deleted, SPI will re-deploy or delete corresponding tasks.
Note that the very first apply to findResource(String)
is blocked until SPI finishes scanning all URI's at least once.
There are several deployable unit types supported:
'.jar'
or '.gar'
extension.
Package structure:
META-INF/ | - ignite.xml - ... lib/ | -some-lib.jar - ... xyz.class ...
META-INF/
entry may contain ignite.xml
file which is a
task descriptor file. The purpose of task descriptor XML file is to specify
all tasks to be deployed. This file is a regular
Spring XML
definition file. META-INF/
entry may also contain any other file
specified by JAR format.
lib/
entry contains all library dependencies.
ComputeTask
interface. In that case, all grid task classes must have a
public no-argument constructor. Use ComputeTaskAdapter
adapter for
convenience when creating grid tasks.
By default, all downloaded packages that have digital signature in META-INF
folder will be verified and deployed only if signature is valid.
java.net.URI
documentation.
[scheme:][//authority][path][?query] [#fragment]
Every URI defines its own deployment repository which will be scanned for any changes. URI itself has all information about protocol, connectivity, scan intervals and other parameters.
URI's may contain special characters, like spaces. If encodeUri
flag is set to true
(see setEncodeUri(boolean)
), then
URI 'path' field will be automatically encoded. By default this flag is
set to true
.
IgniteConfiguration cfg = new IgniteConfiguration(); DeploymentSpi deploymentSpi = new UriDeploymentSpi(); deploymentSpi.setUriList(Arrays.asList("file:///home/username/ignite/work/my_deployment/file")); cfg.setDeploymentSpi(deploymentSpi); try (Ignite ignite = Ignition.start(cfg)) { ignite.compute().execute("myproject.HelloWorldTask", "my args"); }
UriDeploymentSpi
has the following optional configuration
parameters (there are no mandatory parameters):
UriDeploymentScanner
-s which will be used to deploy resources
(see setScanners(UriDeploymentScanner...)
). If not specified, preconfigured UriDeploymentFileScanner
and UriDeploymentHttpScanner
are used. You can implement your own scanner
by implementing UriDeploymentScanner
interface.
setTemporaryDirectoryPath(String)
).
setUriList(List)
). If not
specified, then URI specified by DFLT_DEPLOY_DIR
is used.
'path'
portion of URI
(see setEncodeUri(boolean)
).
You can add support for additional protocols if needed. To do this implement UriDeploymentScanner interface and
plug your implementation into the SPI via setScanners(UriDeploymentScanner...)
method.
In addition to SPI configuration parameters, all necessary configuration
parameters for selected URI should be defined in URI. Different protocols
have different configuration parameters described below. Parameters are
separated by ';
' character.
file
.
Following parameters are supported:
Parameter | Description | Optional | Default |
---|---|---|---|
freq | Scanning frequency in milliseconds. | Yes | 5000 ms specified in UriDeploymentFileScanner.DFLT_SCAN_FREQ . |
'c:/Program files/ignite/deployment'
folder on local box every '1000'
milliseconds. Note that since path
has spaces, setEncodeUri(boolean)
parameter must
be set to true
(which is default behavior).
file://freq=2000@localhost/c:/Program files/ignite/deployment
URLConnection.getLastModified()
method to check if there were any changes since last
iteration for each deployment file before redeploying.
Following parameters are supported:
Parameter | Description | Optional | Default |
---|---|---|---|
freq | Scanning frequency in milliseconds. | Yes | 300000 ms specified in UriDeploymentHttpScanner.DFLT_SCAN_FREQ . |
'username:password'
every '10000' milliseconds (only new/updated packages).
http://username:password;freq=10000@www.mysite.com:110/ignite/deployment
UriDeploymentSpi deploySpi = new UriDeploymentSpi(); IgniteConfiguration cfg = new IgniteConfiguration(); // Set URIs. deploySpi.setUriList(Arrays.asList("http://www.site.com/tasks", "file://freq=20000@localhost/c:/Program files/gg-deployment")); // Override temporary directory path. deploySpi.setTemporaryDirectoryPath("c:/tmp/grid"); // Override default deployment SPI. cfg.setDeploymentSpi(deploySpi); // Start grid. Ignition.start(cfg);
<bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"> ... <property name="deploymentSpi"> <bean class="org.apache.ignite.grid.spi.deployment.uri.UriDeploymentSpi"> <property name="temporaryDirectoryPath" value="c:/tmp/grid"/> <property name="uriList"> <list> <value>http://www.site.com/tasks</value> <value>file://freq=20000@localhost/c:/Program files/gg-deployment</value> </list> </property> </bean> </property> ... </bean>
For information about Spring framework visit www.springframework.org
DeploymentSpi
Modifier and Type | Field and Description |
---|---|
static String |
DEPLOY_TMP_ROOT_NAME
Default temporary directory name relative to file path
setTemporaryDirectoryPath(String) } (value is gg.uri.deployment.tmp ). |
static String |
DFLT_DEPLOY_DIR
Default deployment directory where SPI will pick up packages.
|
static String |
XML_DESCRIPTOR_PATH
Default task description file path and name (value is
META-INF/ignite.xml ). |
ignite, igniteInstanceName
Constructor and Description |
---|
UriDeploymentSpi() |
Modifier and Type | Method and Description |
---|---|
@Nullable DeploymentResource |
findResource(String rsrcName)
Finds class loader for the given class.
|
org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner[] |
getScanners()
Gets scanners.
|
String |
getTemporaryDirectoryPath()
Gets temporary directory path.
|
List<String> |
getUriList()
Gets list of URIs that are processed by SPI.
|
boolean |
isCheckMd5()
Gets
checkMd5 property. |
boolean |
register(ClassLoader ldr,
Class<?> rsrc)
Registers a class loader with this SPI.
|
UriDeploymentSpi |
setCheckMd5(boolean checkMd5)
If set to
true then SPI should exclude files with same md5s from deployment. |
UriDeploymentSpi |
setEncodeUri(boolean encodeUri)
Indicates that URI must be encoded before usage.
|
void |
setListener(@Nullable DeploymentListener lsnr)
Sets or unsets deployment event listener.
|
IgniteSpiAdapter |
setName(String name)
Sets SPI name.
|
UriDeploymentSpi |
setScanners(org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner... scanners)
Sets scanners.
|
UriDeploymentSpi |
setTemporaryDirectoryPath(String tmpDirPath)
Sets absolute path to temporary directory which will be used by
deployment SPI to keep all deployed classes in.
|
UriDeploymentSpi |
setUriList(List<String> uriList)
Sets list of URI which point to a directory with packages and which should be
scanned by SPI for the new tasks.
|
void |
spiStart(String igniteInstanceName)
This method is called to start SPI.
|
void |
spiStop()
This method is called to stop SPI.
|
String |
toString() |
boolean |
unregister(String rsrcName)
Unregisters all class loaders that have a class with given name or have
a class with give
ComputeTaskName value. |
addTimeoutObject, assertParameter, checkConfigurationConsistency0, clientFailureDetectionTimeout, configInfo, createSpiAttributeName, failureDetectionTimeout, failureDetectionTimeoutEnabled, failureDetectionTimeoutEnabled, getConsistentAttributeNames, getExceptionRegistry, getLocalNode, getName, getNodeAttributes, getSpiContext, ignite, initFailureDetectionTimeout, injectables, injectResources, isNodeStopping, onBeforeStart, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextDestroyed0, onContextInitialized, onContextInitialized0, registerMBean, removeTimeoutObject, started, startInfo, startStopwatch, stopInfo, unregisterMBean
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getName, getNodeAttributes, onClientDisconnected, onClientReconnected, onContextDestroyed, onContextInitialized
public static final String DFLT_DEPLOY_DIR
IGNITE_HOME/work
folder if IGNITE_HOME
system or environment variable specified,
otherwise it is relative to work
folder under system java.io.tmpdir
folder.public static final String XML_DESCRIPTOR_PATH
META-INF/ignite.xml
).public static final String DEPLOY_TMP_ROOT_NAME
setTemporaryDirectoryPath(String)
} (value is gg.uri.deployment.tmp
).@IgniteSpiConfiguration(optional=true) public UriDeploymentSpi setTemporaryDirectoryPath(String tmpDirPath)
If not provided, default value is java.io.tmpdir
system property value.
tmpDirPath
- Temporary directory path.this
for chaining.@IgniteSpiConfiguration(optional=true) public UriDeploymentSpi setUriList(List<String> uriList)
If not provided, default value is list with
file://${IGNITE_HOME}/work/deployment/file
element.
Note that system property IGNITE_HOME
must be set.
For unknown IGNITE_HOME
list of URI must be provided explicitly.
uriList
- Package file URIs.this
for chaining.@IgniteSpiConfiguration(optional=true) public UriDeploymentSpi setCheckMd5(boolean checkMd5)
true
then SPI should exclude files with same md5s from deployment.
Otherwise it should try to load new unit regardless to possible file duplication.checkMd5
- new value for the propertythis
for chaining.public boolean isCheckMd5()
checkMd5
property.checkMd5
property.@IgniteSpiConfiguration(optional=true) public UriDeploymentSpi setEncodeUri(boolean encodeUri)
If not provided, default value is true
.
encodeUri
- true
if every URI should be encoded and
false
otherwise.this
for chaining.public String getTemporaryDirectoryPath()
public List<String> getUriList()
public void setListener(@Nullable @Nullable DeploymentListener lsnr)
setListener
in interface DeploymentSpi
lsnr
- Listener for deployment events. null
to unset the listener.public org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner[] getScanners()
@IgniteSpiConfiguration(optional=true) public UriDeploymentSpi setScanners(org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner... scanners)
scanners
- Scanners.this
for chaining.public void spiStop() throws IgniteSpiException
Note that this method can be called at any point including during recovery of failed start. It should make no assumptions on what state SPI will be in when this method is called.
spiStop
in interface IgniteSpi
IgniteSpiException
- Thrown in case of any error during SPI stop.public void spiStart(String igniteInstanceName) throws IgniteSpiException
spiStart
in interface IgniteSpi
igniteInstanceName
- Name of Ignite instance this SPI is being started for
(null
for default Ignite instance).IgniteSpiException
- Throws in case of any error during SPI start.@Nullable public @Nullable DeploymentResource findResource(String rsrcName)
findResource
in interface DeploymentSpi
rsrcName
- Class name or class alias to find class loader for.null
if not deployed.public boolean register(ClassLoader ldr, Class<?> rsrc) throws IgniteSpiException
The array of classes passed in should be checked for presence of
ComputeTaskName
annotations. The classes that have this annotation
should be accessible by this name from DeploymentSpi.findResource(String)
method.
register
in interface DeploymentSpi
ldr
- Class loader to register.rsrc
- Class that should be checked for aliases.
Currently the only alias in the system is ComputeTaskName
for
task classes; in future, there may be others.True
if resource was registered.IgniteSpiException
- If registration failed.public boolean unregister(String rsrcName)
ComputeTaskName
value.unregister
in interface DeploymentSpi
rsrcName
- Either class name or ComputeTaskName
value for a class
whose class loader needs to be unregistered.True
if resource was unregistered.public IgniteSpiAdapter setName(String name)
setName
in class IgniteSpiAdapter
name
- SPI name.this
for chaining.
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.16.0 Release Date : December 15 2023