| <!DOCTYPE html> |
| |
| |
| |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <!-- Bugyard widget embed --> |
| <script type="text/javascript"> |
| !function(){ |
| if("function" != typeof window.bugyard){ |
| var a = function(){ a.c(arguments) }; |
| a.q = [], a.c = function(b){ a.q.push(b) }; |
| window.bugyard = a; |
| |
| var b = document.createElement("script"); |
| b.setAttribute("data-bugyard", "610961912c35ff001493163a"); |
| b.setAttribute("async", "async"); |
| b.setAttribute("defer", "defer"); |
| b.setAttribute("src", "/assets/js/bugyard.min.js"); |
| document.getElementsByTagName("head")[0].appendChild(b); |
| } |
| }(); |
| window.bugyard("hideButton"); |
| </script> |
| <!-- Bugyard widget embed --> |
| |
| <link rel="preload" href='/assets/js/code-tabs.js?1' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/page-nav.js' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/docs-menu.js?20201005' as="script" crossorigin> |
| |
| <style>:root{--gg-red:#ec1c24;--gg-orange:#ec1c24;--gg-orange-dark:#bc440b;--gg-orange-filter:invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);--gg-dark-gray:#333333;--orange-line-thickness:3px;--block-code-background:rgba(241, 241, 241, 20%);--inline-code-background:rgba(241, 241, 241, 90%);--padding-top:25px;--link-color:#ec1c24;--body-background:#fcfcfc}header{min-height:var(--header-height);background:#fff;box-shadow:0 4px 10px 0 #eee,0 0 4px 0 #d5d5d5;z-index:1}header>.container{display:grid;grid-template-columns:auto auto 1fr auto auto auto;grid-template-areas:'left-toggle home nav ver api search lang';grid-template-rows:40px;flex-direction:row;align-items:center;justify-content:flex-start;padding:12px 20px;max-width:1400px;margin:0 auto}header nav>ul{padding:0;margin:0;list-style:none;display:inherit}header .dropdown{display:none;position:fixed;top:calc(var(--header-height) - 12px);width:auto;background:#fff;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);border-radius:4px;padding-top:10px;padding-bottom:12px;z-index:2}header .dropdown li{display:flex}header .dropdown a{color:grey!important;font-size:16px;padding-top:5px;padding-bottom:4px}header .menu{border:none;background:0 0;width:40px;height:40px;margin-right:12px;grid-area:left-toggle}header .menu img{width:18px;height:12px}header .search-close,header .top-nav-toggle{background:0 0;border:none;padding:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:var(--gg-dark-gray);font-size:26px}header .search-toggle{grid-area:search}header .top-nav-toggle{grid-area:top-toggle}header .home{grid-area:home;margin-right:auto}header .home img{height:36px}header #api-docs{grid-area:api;margin:0;display:flex}header #api-docs .dropdown{padding:.5em 0}header #api-docs a{padding:9px 14px;color:var(--gg-dark-gray)!important;text-decoration:none;white-space:nowrap}header #api-docs .dropdown-item a{font-weight:400;display:block;width:100%;min-width:150px}header #lang-selector li{list-style:none;display:flex;padding:9px 14px}header #lang-selector li a{display:flex;color:#000;align-items:center}header #lang-selector li a span{font-size:10px;margin-left:5px}header #lang-selector li a img{width:25px}header #lang-selector li .dropdown{margin-left:-70px}header #lang-selector li .dropdown .dropdown-item{padding:0 1em;margin-bottom:8px}header #lang-selector li .dropdown .dropdown-item a span{font-size:14px}header .search{margin-left:auto;margin-right:20px;grid-area:search}header .search input[type=search]{color:var(--gg-dark-gray);background:rgba(255,255,255,.8);border:1px solid #ccc;padding:10px 15px;font-family:inherit;max-width:148px;height:37px;font-size:14px;-webkit-appearance:unset;appearance:unset}header #version-selector{list-style:none;grid-area:ver;line-height:28px;border-radius:0;margin-right:10px;border:none;color:var(--gg-dark-gray);padding:5px 16px 5px 10px;white-space:nowrap;font-size:14px;width:auto;text-align:right;box-sizing:border-box;text-align-last:right;-moz-appearance:none;-webkit-appearance:none;appearance:none;direction:rtl}header #version-selector option{direction:ltr}header>nav{grid-area:nav;font-size:18px;display:flex;flex-direction:row;margin:0 20px}header #lang-selector{grid-area:lang}header .search-close{margin-right:10px}@media (max-width:600px){header .search{margin-right:5px}header .search input[type=search]{max-width:110px}}header:not(.narrow-header) .search-close,header:not(.narrow-header) .top-nav-toggle{display:none}@media (max-width:670px){header>.container{grid-template-columns:auto 1fr auto;grid-template-areas:'left-toggle home search' 'ver api lang'}header #lang-selector li{justify-content:flex-end}}pre,pre.rouge{padding:8px 15px;background:var(--block-code-background)!important;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto;min-height:36px;line-height:18px;color:#545454}code{color:#545454}pre.rouge code{background:0 0!important}:not(pre)>code{background:var(--inline-code-background);padding:.1em .5em;background-clip:padding-box;border-radius:3px;color:#545454;font-size:90%}.listingblock .content{position:relative}.highlight{color:#586e75}.highlight .c1{color:#657b83}.highlight .nt{color:#b58900}.highlight .o{color:#93a1a1}.highlight .k{color:#6c71c4}.highlight .kt{color:#cb4b16}.highlight .s,.highlight .s1{color:#859900}.highlight .nc{color:#b58900}.highlight .na{color:#268bd2}body{font-family:'Open Sans',sans-serif}h1,h2{color:#000;font-weight:400;font-family:'Open Sans'}h1{font-size:36px;line-height:40px}a{text-decoration:none;color:var(--link-color)}section{color:#545454}.admonitionblock .icon .title{display:none}body{--header-height:64px;--promotion-bar-height:35px;--footer-height:104px;--footer-gap:60px;padding:0;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:var(--body-background);font-family:'Open Sans',sans-serif}body>section{flex:1}header{position:-webkit-sticky;position:sticky;top:0;z-index:2}*{box-sizing:border-box}@media (max-width:670px){body{--header-height:97px}}.left-nav{padding:10px 20px;width:289px;overflow-y:auto;top:calc(var(--header-height) + var(--promotion-bar-height));height:calc(100vh - var(--header-height) - var(--promotion-bar-height));font-family:'Open Sans';padding-top:var(--padding-top);background-color:var(--body-background)}.left-nav li{list-style:none}.left-nav a,.left-nav button{text-decoration:none;color:#757575;font-size:16px;display:inline-flex;width:100%;margin:2px 0;padding:.25em .375em;background:0 0;border:none;font:inherit;text-align:left}.left-nav a.active{color:var(--link-color)}.left-nav .nav-group{margin-left:6px;font-size:14px}.left-nav nav{border-left:2px solid #ddd;margin-bottom:5px}.left-nav nav.collapsed{display:none}.left-nav nav>li>a,.left-nav nav>li>button{padding-left:20px;text-align:left}.left-nav nav>li>a.active{border-left:var(--orange-line-thickness) solid var(--active-color);padding-left:calc(20px - var(--orange-line-thickness))}.left-nav nav.sub_pages{border:none}.left-nav nav.sub_pages a{padding-left:32px}.left-nav .state-indicator{margin-left:auto;margin-top:5px;width:6.2px;height:10px;flex:0 0 auto;filter:invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%)}.left-nav button.expanded .state-indicator{transform:rotate(90deg)}.right-nav{width:289px;padding:12px 26px;overflow-y:auto;height:calc(100vh - var(--header-height));top:0;position:-webkit-sticky;position:sticky;display:flex;flex-direction:column;font-family:'Open sans';padding-top:var(--padding-top);background-color:#fff}.right-nav ul{list-style:none;padding:0;margin:0}.right-nav li{padding:0}.right-nav a{--border-width:0px;font-size:14px;color:#757575;padding-left:calc(15px * var(--nesting-level) + 8px - var(--border-width));margin:.3em 0;display:inline-block}.right-nav .sectlevel1{border-left:2px solid #ddd}.right-nav .sectlevel1{--nesting-level:0}.right-nav .sectlevel2{--nesting-level:1}.right-nav .sectlevel3{--nesting-level:2}@media (max-width:1200px){.right-nav{width:230px}}.right-nav footer{font-size:12px;padding:calc(var(--footer-gap) * .3) 0 5px;text-align:left;margin:auto 0 0}section.page-docs{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:100%;grid-template-areas:'left-nav content right-nav';line-height:20px;max-width:1440px;margin:auto;width:100%}section.page-docs>article{border-left:1px solid #eee;background-color:#fff;padding:0 50px 30px;grid-area:content;overflow:hidden;font-family:sans-serif;font-size:16px;color:#545454;line-height:1.6em}section.page-docs>article h1,section.page-docs>article h2{font-family:'Open Sans'}@media (max-width:800px){section.page-docs>article{padding-left:15px;padding-right:15px}}section.page-docs .edit-link{position:relative;top:10px;right:10px;float:right;padding-top:calc(var(--header-height) + var(--padding-top));margin-top:calc((-1 * var(--header-height)))}section.page-docs h1,section.page-docs h2{margin-bottom:0}section.page-docs h2[id]{margin-top:var(--margin-top);margin-bottom:calc(var(--margin-top) * .5);z-index:-1}section.page-docs .title{font-style:italic}section.page-docs h2[id]{--margin-top:1.2em}.left-nav{bottom:0;position:-webkit-sticky;position:sticky}.left-nav{grid-area:left-nav}.right-nav{grid-area:right-nav}.left-nav__overlay{display:none;background:rgba(0,0,0,.5);z-index:1;position:fixed;top:var(--header-height);bottom:0;left:0;right:0}@media (max-width:990px){body:not(.hide-left-nav) .left-nav__overlay{display:block}nav.left-nav{background:#fafafa;grid-area:left-nav;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);min-height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));position:fixed;bottom:0;top:var(--header-height);z-index:2}section.page-docs>article{grid-column-start:left-nav;grid-column-end:content;grid-row:content}}@media (max-width:800px){nav.right-nav{display:none}}:target:before{content:"";display:block;margin-top:calc(var(--header-height) * -1);height:var(--header-height);width:1px}@media (min-width:600px) and (max-width:900px){:target:before{content:"";display:block;width:1px;margin-top:-150px;height:150px}} |
| #header #promotion-bar { background-color: #333333; padding: 8px; } |
| #header #promotion-bar p { font-size: 14px; line-height: 1.4em; font-weight: 600; padding: 0; margin: 0; color: #f0f0f0; text-align: center;} |
| #header #promotion-bar p a { color: #FCB903; } </style> |
| |
| |
| |
| |
| <meta name="ignite-version" content="3.1.0" /> |
| <title>Code Deployment | Ignite Documentation</title> |
| |
| <link rel="canonical" href="/docs/latest/developers-guide/code-deployment/code-deployment" /> |
| |
| |
| <link rel="shortcut icon" href="/favicon.ico"> |
| <meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'> |
| |
| <link rel="preload" as="style" href="/assets/css/fonts.css" /> |
| <link rel="stylesheet" href="/assets/css/fonts.css" media="print" onload="this.media='all'"> |
| <noscript> |
| <link rel="stylesheet" href="/assets/css/fonts.css"> |
| </noscript> |
| <link href="/docs/pagefind/pagefind-ui.css" rel="stylesheet"> |
| <script src="/docs/pagefind/pagefind-ui.js"></script> |
| <script> |
| window.addEventListener('DOMContentLoaded', () => { |
| new PagefindUI({ |
| element: "#search", |
| showSubResults: true, |
| showImages: false, |
| }); |
| }); |
| </script> |
| <script src="/assets/js/mermaid.min.js"></script> |
| <script> |
| document.addEventListener('DOMContentLoaded', function () { |
| const blocks = document.querySelectorAll('.mermaid'); |
| if (blocks.length) { |
| mermaid.initialize({ startOnLoad: false }); |
| mermaid.run(); |
| } |
| }); |
| </script> |
| |
| <script> |
| // AnchorJS - v4.2.0 - 2019-01-01 |
| // https://github.com/bryanbraun/anchorjs |
| // Copyright (c) 2019 Bryan Braun; Licensed MIT |
| !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=p(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}n.replace(/-/g," "),(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); |
| </script> |
| |
| </head> |
| <body> |
| <header> |
| <!--#include virtual="/includes/promotion_banner.html" --> |
| <div class="container"> |
| <button type='button' class='menu' title='Docs menu'> |
| <img src="/assets/images/menu-icon.svg" width="18" height="12" alt="menu icon" /> |
| </button> |
| <div class='home'> |
| <a href="/" class='home' title='Apache Ignite home'> |
| <img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" height="36" > |
| </a> |
| </div> |
| |
| |
| |
| <select id="product-selector"> |
| <option value="/docs/ignite2/latest" >Ignite 2</option> |
| <option value="/docs/ignite3/latest"selected>Ignite 3</option> |
| </select> |
| |
| <select id="version-selector"> |
| <option value="3.1.0">3.1.0</option> |
| </select> |
| |
| |
| <nav id="api-docs"><ul> |
| <li><a href="#">APIs</a> |
| <nav class='dropdown'> |
| <ul> |
| |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/javadoc/">Java</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/dotnetdoc/">C#/.NET</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/cppdoc/">C++</a></li> |
| <li class="dropdown-item"><a href="/releases/ignite3/3.1.0/openapi.yaml">OpenAPI</a></li> |
| |
| </ul> |
| </nav> |
| </li> |
| |
| <li><a href="#">Examples</a> |
| <nav class="dropdown"> |
| <ul> |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li> |
| </ul> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| |
| |
| <div id="search-button"></div> |
| |
| <nav id="lang-selector"><ul> |
| <li><a href="#"><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>▼</span></a> |
| <nav class="dropdown"> |
| <li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>English</span></a></li> |
| <li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn_75x75.jpg" width="25" height="25" alt="Chinese language icon" /><span>Chinese</span></a></li> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| <button type='button' class='top-nav-toggle'>⋮</button> |
| |
| </div> |
| <div id="search-wrapper"> |
| <div id="search"></div> |
| </div> |
| </header> |
| |
| <link rel="stylesheet" href="/assets/css/docs.css"> |
| <section class='page-docs'> |
| |
| |
| |
| |
| |
| |
| <nav class='left-nav' data-swiftype-index='false'> |
| |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/index" class='' >About Apache Ignite 3</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/installing-using-zip" |
| class='' |
| >Installing Using ZIP Archive</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/deb-rpm" |
| class='' |
| >Installing DEB or RPM package</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/installing-using-docker" |
| class='' |
| >Installing Docker</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/installation/migration-from-ai3-1" |
| class='' |
| >Migration From Ignite 3.0</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Migration From Ignite 2<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/config" class=''>Configuration Migration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/persistent-migration" class=''>Persistent Data Migration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/installation/migration-from-ai2/ai2-functions" class=''>SQL Function Comparison</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Getting Started<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/getting-started-guide" |
| class='' |
| >Quick Start</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/start-cluster" |
| class='' |
| >Start Ignite 3 Cluster</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/explore-sql" |
| class='' |
| >Explore SQL Capabilities</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/persist-data" |
| class='' |
| >Persist Your Data</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/quick-start/java-api" |
| class='' |
| >Use Java API</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/quick-start/embedded-mode" class='' >Embedded Mode</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/ignite-cli-tool" class='' >Ignite CLI Tool</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle expanded '>Developers Guide<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group expanded'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/table-api" |
| class='' |
| >Table API</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/java" class=''>Java Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/dotnet" class=''>.NET Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/cpp" class=''>C++ Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/python" class=''>Python Clients</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/ado" class=''>ADO.NET Integration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/linq" class=''>.NET LINQ Queries</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/clients/jdbc-driver" class=''>JDBC Driver</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/calcite-based-sql-engine" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/sql-api" class=''>SQL API</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/jdbc-driver" class=''>JDBC Driver</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/odbc-driver" class=''>ODBC Driver</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/connection-string" class=''>ODBC Connection String</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/querying-modifying-data" class=''>Querying and Modifying Data</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/sql/odbc/specification" class=''>Standard Conformance</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/java-to-tables" |
| class='' |
| >Tables from Java Classes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/compute/compute" class=''>Compute API</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/compute/serialization" class=''>Serialization</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/transactions" |
| class='' |
| >Transactions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/data-streamer" |
| class='' |
| >Data Streaming</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/code-deployment/code-deployment" |
| class='active' |
| >Code Deployment</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/events/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/developers-guide/events/events-list" class=''>Events List</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/developers-guide/rest/rest-api" |
| class='' |
| >REST API</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Administrator's Guide<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Ignite Configuration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/node-config" class=''>Node Configuration Parameters</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/cluster-config" class=''>Cluster Configuration Parameters</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/config/cli-config" class=''>CLI Configuration</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Distributed Storage<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/storage-overview" class=''>Storage Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/storage-profiles" class=''>Storage Profiles</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/data-partitions" class=''>Data Partitions</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/distribution-zones" class=''>Data Partitions</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Storage Engines<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/storage-engines" class=''>Storage Engines Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/aipersist" class=''>AIPersist Engine</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/rocksdb" class=''>RocksDB Engine</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/storage/engines/aimem" class=''>AIMem Engine</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/lifecycle" |
| class='' |
| >Cluster Lifecycle</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/colocation" |
| class='' |
| >Data Colocation</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/disaster-recovery" |
| class='' |
| >Disaster Recovery for Partitions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/system-groups-recovery" |
| class='' |
| >Disaster Recovery for System Groups</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/cluster-security" |
| class='' |
| >Cluster Security</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Security and Authentication<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/security/ssl-tls" class=''>SSL/TLS</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/security/authentication" class=''>Authentication</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Metrics and Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/configuring-metrics" class=''>Configuring Metrics</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/metrics-list" class=''>Metrics List</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/administrators-guide/metrics/system-views" class=''>System Views</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/administrators-guide/handling-exceptions" |
| class='' |
| >Handling Exceptions</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/ddl" |
| class='' |
| >Data Definition Language (DDL)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/dml" |
| class='' |
| >Data Manipulation Language (DML)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/transactions" |
| class='' |
| >Transactions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/distribution-zones" |
| class='' |
| >Distribution Zones</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/data-types" |
| class='' |
| >Data Types</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/operators-and-functions" |
| class='' |
| >Supported Operators and Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/operational-commands" |
| class='' |
| >Operational Commands</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/grammar-reference" |
| class='' |
| >Grammar Reference</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/keywords" |
| class='' |
| >Keywords</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-reference/sql-conformance" |
| class='' |
| >SQL Conformance</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Explain Statement<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/sql-reference/explain-statement" class=''>Explain Statement</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/ignite3/latest/sql-reference/explain-operators-list" class=''>List Of Operators</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>SQL Performance Tuning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-tuning/sql-tuning" |
| class='' |
| >SQL Performance Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/ignite3/latest/sql-tuning/using-explain" |
| class='' |
| >Improving Queries</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/general-tips" class='' >General Configuration Tips</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/ignite3/latest/glossary/glossary" class='' >Glossary</a> |
| |
| </li> |
| |
| </nav> |
| <div class="left-nav__overlay"></div> |
| |
| |
| <article data-swiftype-index='true'> |
| <a class='edit-link' href="https://github.com/apache/ignite-3/tree/main/docs/_docs/developers-guide/code-deployment/code-deployment.adoc" target="_blank">Edit</a> |
| |
| <h1>Code Deployment</h1> |
| |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>When working with Ignite 3, you may need to deploy user code to cluster nodes so that it can be executed across the cluster, as shown in the <a href="/docs/ignite3/latest/developers-guide/compute/compute">Distributed Computing</a> section.</p> |
| </div> |
| <div class="paragraph"> |
| <p>In Ignite 3 the code is deployed as an immutable <strong>deployment unit</strong> with a unique ID and version.</p> |
| </div> |
| <div class="paragraph"> |
| <p>While there are no strict policies on what a deployment unit can contain, Ignite 3 currently supports compute jobs implemented in Java and .NET.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| You can invoke compute job execution from any client (.NET, Java, C++, etc. ), but the job itself must be written in Java or .NET. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>If you want to use any other programming language in a compute job, you must load that file as part of the job’s code. A code file deployed on its own will not be loaded by the JVM and thus cannot be used directly.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The example below demonstrates how to load a script that is packaged within a JAR’s resources:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyJob</span> <span class="kd">implements</span> <span class="nc">ComputeJob</span><span class="o"><</span><span class="nc">String</span><span class="o">,</span> <span class="nc">String</span><span class="o">></span> <span class="o">{</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="nc">CompletableFuture</span><span class="o"><</span><span class="nc">String</span><span class="o">></span> <span class="nf">executeAsync</span><span class="o">(</span><span class="nc">JobExecutionContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="nc">String</span> <span class="n">arg</span><span class="o">)</span> <span class="o">{</span> |
| <span class="nc">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="na">ignite</span><span class="o">();</span> |
| |
| <span class="cm">/** Full path to the script we want to run */</span> |
| <span class="kd">final</span> <span class="nc">String</span> <span class="n">resPath</span> <span class="o">=</span> <span class="s">"/org/apache/ignite/example/code/deployment/resources/script.sh"</span><span class="o">;</span> |
| |
| <span class="k">try</span> <span class="o">(</span><span class="nc">InputStream</span> <span class="n">in</span> <span class="o">=</span> <span class="nc">MyJob</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getResourceAsStream</span><span class="o">(</span><span class="n">resPath</span><span class="o">))</span> <span class="o">{</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">in</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">throw</span> <span class="k">new</span> <span class="nf">IllegalStateException</span><span class="o">(</span><span class="s">"Resource not found: "</span> <span class="o">+</span> <span class="n">resPath</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="kt">byte</span><span class="o">[]</span> <span class="n">script</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">readAllBytes</span><span class="o">();</span> |
| |
| <span class="nc">Process</span> <span class="n">p</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ProcessBuilder</span><span class="o">(</span><span class="s">"sh"</span><span class="o">,</span> <span class="s">"-s"</span><span class="o">,</span> <span class="s">"--"</span><span class="o">,</span> <span class="n">arg</span><span class="o">)</span> |
| <span class="o">.</span><span class="na">redirectErrorStream</span><span class="o">(</span><span class="kc">true</span><span class="o">)</span> |
| <span class="o">.</span><span class="na">start</span><span class="o">();</span> |
| |
| <span class="k">try</span> <span class="o">(</span><span class="nc">OutputStream</span> <span class="n">os</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="na">getOutputStream</span><span class="o">())</span> <span class="o">{</span> |
| <span class="n">os</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">script</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="nc">String</span> <span class="n">out</span><span class="o">;</span> |
| <span class="k">try</span> <span class="o">(</span><span class="nc">InputStream</span> <span class="n">procOut</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="na">getInputStream</span><span class="o">())</span> <span class="o">{</span> |
| <span class="n">out</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">String</span><span class="o">(</span><span class="n">procOut</span><span class="o">.</span><span class="na">readAllBytes</span><span class="o">(),</span> <span class="nc">StandardCharsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">).</span><span class="na">strip</span><span class="o">();</span> |
| <span class="o">}</span> |
| |
| <span class="kt">int</span> <span class="n">exit</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="na">waitFor</span><span class="o">();</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">exit</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">(</span><span class="s">"Script exited with code "</span> <span class="o">+</span> <span class="n">exit</span> <span class="o">+</span> <span class="s">":\n"</span> <span class="o">+</span> <span class="n">out</span><span class="o">);</span> |
| <span class="o">}</span> |
| |
| <span class="nc">String</span> <span class="n">result</span> <span class="o">=</span> <span class="s">"Node: "</span> <span class="o">+</span> <span class="n">ignite</span><span class="o">.</span><span class="na">name</span><span class="o">()</span> |
| <span class="o">+</span> <span class="s">"\nArg: "</span> <span class="o">+</span> <span class="n">arg</span> |
| <span class="o">+</span> <span class="s">"\nScript output:\n"</span> <span class="o">+</span> <span class="n">out</span><span class="o">;</span> |
| |
| <span class="k">return</span> <span class="nc">CompletableFuture</span><span class="o">.</span><span class="na">completedFuture</span><span class="o">(</span><span class="n">result</span><span class="o">);</span> |
| <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">(</span><span class="s">"Failed to run script"</span><span class="o">,</span> <span class="n">e</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| <span class="o">}</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>You can manage deployment units using either <a href="/docs/ignite3/latest/ignite-cli-tool">CLI</a> commands or the <a href="https://ignite.apache.org/releases/3.1.0/openapi.yaml">REST API</a>. Both methods provide the same functionality for deploying, listing, and undeploying code.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="deploying-units-with-folder-structures">Deploying Units with Folder Structures</h2> |
| <div class="sectionbody"> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| Currently, you can only deploy ZIP archives via REST. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Apache Ignite supports deploying units that contain folder structures using ZIP archives. You can package complex deployment units with multiple files organized in directories, which are automatically extracted and preserved during deployment.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To deploy your code this way, package your files into a ZIP archive and deploy it to the cluster. Apache Ignite will preserve the folder structure.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="deployment-unit-location">Deployment Unit Location</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>By default, nodes store the deployment units in the <code>{IGNITE_HOME}/work/deployment</code> directory. This can be changed with the <a href="/docs/ignite3/latest/administrators-guide/config/node-config#code-deployment-configuration"><code>ignite.deployment.location</code></a> node configuration parameter.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The deployment units have the following structure:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre>deployment |
| ├─ unit1Id |
| │ ├─ version1 |
| │ └─ version2 |
| └─ unit2Id |
| ├─ version1 |
| └─ version2</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Each deployment unit is stored in a separate directory, with each version having its own subdirectory.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="deploy-new-unit">Deploy New Unit</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Deploying a new unit requires specifying a unique string ID for the code and a version number.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| To update the code, deploy a new unit. The new unit can use the same ID as the existing one, but it must have a different version. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="sect2"> |
| <h3 id="deploy-via-cli">Deploy via CLI</h3> |
| <div class="paragraph"> |
| <p>When deploying a new unit, use <code>cluster unit deploy</code> command with unit’s ID and set the following options:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stripes-even stretch"> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Parameter</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Required</strong> Deployment unit version in <code>x.y.z</code> format. If a unit with the same name and version already exists, a <code>Unit already exists</code> error will be thrown.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Required</strong> Path to the deployment unit file or directory. It is recommended to use an absolute path.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">nodes</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Defines the target nodes for deployment. Use <code>ALL</code> to deploy to every node immediately, <code>MAJORITY</code> to deploy to enough nodes for a management group majority (with remaining nodes updated later), or list specific node names (comma-separated) for immediate deployment to those nodes.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| You cannot deploy multiple units simultaneously, you need to run <code>unit deploy</code> command separately for each file you want to deploy. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>For example, to deploy to the majority of nodes use the following command:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">cluster unit deploy test-unit <span class="nt">--version</span> 1.0.0 <span class="nt">--path</span> <span class="nv">$ABSOLUTE_PATH_TO_CODE_UNIT</span> <span class="nt">--nodes</span> MAJORITY</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Here <code>$ABSOLUTE_PATH_TO_CODE_UNIT</code> refers to the absolute path to the code unit file or directory.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="deploy-via-rest">Deploy via REST</h3> |
| <div class="paragraph"> |
| <p>To deploy a new unit via the REST API, send a <code>POST</code> request to the <code>/management/v1/deployment/units/{unitId}/{unitVersion}</code> endpoint with the following parameters:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stripes-even stretch"> |
| <colgroup> |
| <col style="width: 20%;"> |
| <col style="width: 20%;"> |
| <col style="width: 60%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Parameter</th> |
| <th class="tableblock halign-left valign-top">Type</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">unitId</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Required</strong> Unique unit ID. If a deployment unit with this ID does not exist, it is created.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">unitVersion</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Required</strong> Unique version of the deployment unit. If a deployment unit with the specified ID and version already exists, HTTP 409 "Conflict" response is returned.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">unitContent</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">file (multipart)</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Required</strong> JAR file to deploy, provided as a file upload via multipart/form-data.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">deployMode</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">query</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Defines how many nodes the unit will be deployed to. If set to <code>MAJORITY</code>, the unit will be deployed to enough nodes to form cluster management group majority. If set to <code>ALL</code>, the unit will be deployed to all nodes. Cannot be used with the <code>initialNodes</code> parameter.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">initialNodes</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">query</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The list of names of specific nodes to deploy the unit to. Cannot be used with the <code>deployMode</code> parameter.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>For example, you can deploy a new unit to specific nodes in your local cluster as follows:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">curl <span class="nt">-X</span> POST <span class="s1">'http://localhost:10300/management/v1/deployment/units/unit/1.0.0?initialNodes=node1,node2'</span> <span class="se">\</span> |
| <span class="nt">-H</span> <span class="s2">"Content-Type: multipart/form-data"</span> <span class="se">\</span> |
| <span class="nt">-F</span> <span class="s2">"unitContent=@/path/to/your/unit.jar"</span></code></pre> |
| </div> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>You can target nodes using either the <code>deployMode</code> or <code>initialNodes</code> parameter. These options serve the same purpose as the similar CLI parameters, ensuring the unit propagates as needed.</p> |
| </li> |
| <li> |
| <p>For additional details see the corresponding <a href="https://ignite.apache.org/releases/3.1.0/openapi.yaml">API documentation</a>.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="deploy-manually">Deploy Manually</h3> |
| <div class="paragraph"> |
| <p>If necessary, you can deploy a new unit manually by adding your code to the deployment unit storage on the node. Unlike other deployment options, node restart is required to load new deployment units.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To deploy the code:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Find the <a href="/docs/ignite3/latest/developers-guide/code-deployment/code-deployment#deployment-unit-location">deployment unit location</a> on the node.</p> |
| </li> |
| <li> |
| <p>Create a new directory. This directory will be used as the deployment unit ID.</p> |
| </li> |
| <li> |
| <p>Create a new subdirectory. This directory will be used as the deployment unit version. You must use <a href="https://semver.org/">semantic version</a> as its name.</p> |
| </li> |
| <li> |
| <p>Add your code to the subdirectory.</p> |
| </li> |
| <li> |
| <p>Restart the node to load the new code.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>As a result, your directory structure may look like this:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre>deployment |
| └─ myUnit |
| └─ 1.0.0 |
| └─ [code files]</pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="getting-unit-information">Getting Unit Information</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This section explains how get all deployments on the cluster or on a specific node, view unit details such as status and version, and search or filter deployments by these attributes.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="get-unit-information-via-cli">Get Unit Information via CLI</h3> |
| <div class="paragraph"> |
| <p>You can list deployment units using <code>unit list</code> command.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| When you run the <code>unit list</code> command in the CLI, the output shows a list of deployment units. An asterisk (*) indicates the active version, which is always the highest <a href="https://semver.org/">semantic version</a>, regardless of deployment order. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Use <code>cluster unit list</code> command to see all deployed units on the cluster.</p> |
| </li> |
| <li> |
| <p>Use <code>node unit list</code> command to view only the units on the node where the command is executed.</p> |
| </li> |
| <li> |
| <p>Pass the unit’s ID to the command to get information for the specific unit:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">cluster unit list test-unit</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Search units by adding <code>version</code> command options:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">cluster unit list test-unit <span class="nt">--version</span> 1.0.0</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Or filter by <code>status</code>:</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">cluster unit list test-unit <span class="nt">--status</span> deployed</code></pre> |
| </div> |
| </div> |
| <table class="tableblock frame-all grid-all stripes-even stretch"> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Parameter</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">statuses</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p>Filter units by status.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>UPLOADING</code> - the unit is being deployed to the cluster</p> |
| </li> |
| <li> |
| <p><code>DEPLOYED</code> - the unit is deployed to the cluster and can be used</p> |
| </li> |
| <li> |
| <p><code>OBSOLETE</code> - the command to remove unit has been received, but it is still used in some jobs</p> |
| </li> |
| <li> |
| <p><code>REMOVING</code> - the unit is being removed</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>If not specified, deployment units in all statuses will be returned.</p> |
| </div></div></td> |
| </tr> |
| </tbody> |
| </table> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="get-unit-information-via-rest">Get Unit Information via REST</h3> |
| <div class="paragraph"> |
| <p>You can also retrieve deployment unit details via <code>GET</code> requests.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>To get information for a specific unit on a node or across the cluster, use <code>/management/v1/deployment/node/units/{unitId}</code> and <code>/management/v1/deployment/cluster/units/{unitId}</code> respectively.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">curl <span class="nt">-X</span> GET <span class="s1">'http://localhost:10300/management/v1/deployment/cluster/units/test-unit/1.0.0'</span></code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>To list all deployment units for the node or across the cluster, use <code>/management/v1/deployment/node/units</code> and <code>/management/v1/deployment/cluster/units</code> respectively.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">curl <span class="nt">-X</span> GET <span class="s1">'http://localhost:10300/management/v1/deployment/cluster/units/'</span></code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>You can further narrow down the search by looking up only deployments with specific versions or statuses.</p> |
| <table class="tableblock frame-all grid-all stripes-even stretch"> |
| <colgroup> |
| <col style="width: 20%;"> |
| <col style="width: 20%;"> |
| <col style="width: 60%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Parameter</th> |
| <th class="tableblock halign-left valign-top">Type</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">unitId</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p><strong>Required</strong> Unique unit ID of the deployment unit.</p> |
| </div></div></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">version</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">query</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p>Unique version of the deployment unit. If not specified, all versions of deployment unit will be returned.</p> |
| </div></div></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">statuses</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">query</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p>Statuses of the deployment units to return. Possible values:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>UPLOADING</code> - the unit is being deployed to the cluster</p> |
| </li> |
| <li> |
| <p><code>DEPLOYED</code> - the unit is deployed to the cluster and can be used</p> |
| </li> |
| <li> |
| <p><code>OBSOLETE</code> - the command to remove unit has been received, but it is still used in some jobs</p> |
| </li> |
| <li> |
| <p><code>REMOVING</code> - the unit is being removed</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>If not specified, deployment units in all statuses will be returned.</p> |
| </div></div></td> |
| </tr> |
| </tbody> |
| </table> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="undeploying-unit">Undeploying Unit</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>When you no longer need a deployment unit version, you can undeploy it from the cluster.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="undeploy-via-cli">Undeploy via CLI</h3> |
| <div class="paragraph"> |
| <p>Use the <code>cluster unit undeploy</code> command. Provide unit ID and unit <code>version</code> to remove.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">cluster unit undeploy test-unit <span class="nt">--version</span> 1.0.0</code></pre> |
| </div> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>You cannot undeploy all units with the same ID at once, you must remove them by version.</p> |
| </li> |
| <li> |
| <p>When you undeploy a unit that has multiple versions, the active code rolls back to the next most recent version, determined by the version number.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="undeploy-via-rest">Undeploy via REST</h3> |
| <div class="paragraph"> |
| <p>To undeploy a unit from specific nodes, use a <code>DELETE</code> request to <code>/management/v1/deployment/units/{unitId}/{unitVersion}</code> endpoint.</p> |
| </div> |
| <div class="paragraph"> |
| <p>For instance, to undeploy the same unit from nodes node1 and node2, use the following command:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="bash">curl <span class="nt">-X</span> DELETE <span class="s1">'http://localhost:10300/management/v1/deployment/units/test-unit/1.0.0?nodes=node1,node2'</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>When the cluster receives the request, it will delete the specified deployment unit version on all nodes. |
| If the unit is used in a job, it will instead be moved to the <code>OBSOLETE</code> status and removed once it is no longer required.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="copyright"> |
| © 2025 The Apache Software Foundation.<br/> |
| Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation. |
| |
| </div> |
| |
| </article> |
| <nav class="right-nav" data-swiftype-index='false'> |
| <div class="toc-wrapper"> |
| <ul class="sectlevel1"> |
| <li><a href="#deploying-units-with-folder-structures">Deploying Units with Folder Structures</a></li> |
| <li><a href="#deployment-unit-location">Deployment Unit Location</a></li> |
| <li><a href="#deploy-new-unit">Deploy New Unit</a> |
| <ul class="sectlevel2"> |
| <li><a href="#deploy-via-cli">Deploy via CLI</a></li> |
| <li><a href="#deploy-via-rest">Deploy via REST</a></li> |
| <li><a href="#deploy-manually">Deploy Manually</a></li> |
| </ul> |
| </li> |
| <li><a href="#getting-unit-information">Getting Unit Information</a> |
| <ul class="sectlevel2"> |
| <li><a href="#get-unit-information-via-cli">Get Unit Information via CLI</a></li> |
| <li><a href="#get-unit-information-via-rest">Get Unit Information via REST</a></li> |
| </ul> |
| </li> |
| <li><a href="#undeploying-unit">Undeploying Unit</a> |
| <ul class="sectlevel2"> |
| <li><a href="#undeploy-via-cli">Undeploy via CLI</a></li> |
| <li><a href="#undeploy-via-rest">Undeploy via REST</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| |
| |
| <nav class="promo-nav"> |
| <!--#include virtual="/includes/docs_rightnav_promotion.html" --> |
| <!--a href="#" data-trigger-bugyard-feedback="true" id="doc-feedback-btn">Docs Feedback</a--> |
| </nav> |
| |
| </nav> |
| |
| </section> |
| <script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script> |
| |
| <script> |
| // inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late |
| anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5'); |
| anchors.options = { |
| placement: 'right', |
| visible: 'always' |
| }; |
| </script> |
| |
| <script type='module' src='/assets/js/index.js?1763133049' async crossorigin></script> |
| <script type='module' src='/assets/js/versioning.js?1763133049' async crossorigin></script> |
| <script type='module' src='/assets/js/railroad-diagram.js?1763133049' async></script> |
| <script type='module' src='/assets/js/search.js?1763133049' defer crossorigin></script> |
| |
| <link rel="stylesheet" href="/assets/css/styles.css?1763133049" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="/assets/css/styles.css?1763133049"></noscript> |
| |
| <link rel="stylesheet" href="/assets/css/docsearch.min.css" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="/assets/css/docsearch.min.css"></noscript> |
| |
| |
| </body> |
| |
| </html> |