| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="generator" content="Asciidoctor 1.5.3"> |
| <title>Equinox Console</title> |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"> |
| <style> |
| /* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ |
| /* Remove comment around @import statement below when using as a custom stylesheet */ |
| /*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ |
| article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} |
| audio,canvas,video{display:inline-block} |
| audio:not([controls]){display:none;height:0} |
| [hidden],template{display:none} |
| script{display:none!important} |
| html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} |
| body{margin:0} |
| a{background:transparent} |
| a:focus{outline:thin dotted} |
| a:active,a:hover{outline:0} |
| h1{font-size:2em;margin:.67em 0} |
| abbr[title]{border-bottom:1px dotted} |
| b,strong{font-weight:bold} |
| dfn{font-style:italic} |
| hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} |
| mark{background:#ff0;color:#000} |
| code,kbd,pre,samp{font-family:monospace;font-size:1em} |
| pre{white-space:pre-wrap} |
| q{quotes:"\201C" "\201D" "\2018" "\2019"} |
| small{font-size:80%} |
| sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} |
| sup{top:-.5em} |
| sub{bottom:-.25em} |
| img{border:0} |
| svg:not(:root){overflow:hidden} |
| figure{margin:0} |
| fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} |
| legend{border:0;padding:0} |
| button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} |
| button,input{line-height:normal} |
| button,select{text-transform:none} |
| button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} |
| button[disabled],html input[disabled]{cursor:default} |
| input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} |
| input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} |
| input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} |
| button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} |
| textarea{overflow:auto;vertical-align:top} |
| table{border-collapse:collapse;border-spacing:0} |
| *,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} |
| html,body{font-size:100%} |
| body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} |
| a:hover{cursor:pointer} |
| img,object,embed{max-width:100%;height:auto} |
| object,embed{height:100%} |
| img{-ms-interpolation-mode:bicubic} |
| .left{float:left!important} |
| .right{float:right!important} |
| .text-left{text-align:left!important} |
| .text-right{text-align:right!important} |
| .text-center{text-align:center!important} |
| .text-justify{text-align:justify!important} |
| .hide{display:none} |
| body{-webkit-font-smoothing:antialiased} |
| img,object,svg{display:inline-block;vertical-align:middle} |
| textarea{height:auto;min-height:50px} |
| select{width:100%} |
| .center{margin-left:auto;margin-right:auto} |
| .spread{width:100%} |
| p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} |
| .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} |
| div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} |
| a{color:#2156a5;text-decoration:underline;line-height:inherit} |
| a:hover,a:focus{color:#1d4b8f} |
| a img{border:none} |
| p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} |
| p aside{font-size:.875em;line-height:1.35;font-style:italic} |
| h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} |
| h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} |
| h1{font-size:2.125em} |
| h2{font-size:1.6875em} |
| h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} |
| h4,h5{font-size:1.125em} |
| h6{font-size:1em} |
| hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} |
| em,i{font-style:italic;line-height:inherit} |
| strong,b{font-weight:bold;line-height:inherit} |
| small{font-size:60%;line-height:inherit} |
| code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} |
| ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} |
| ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} |
| ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} |
| ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} |
| ul.square{list-style-type:square} |
| ul.circle{list-style-type:circle} |
| ul.disc{list-style-type:disc} |
| ul.no-bullet{list-style:none} |
| ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} |
| dl dt{margin-bottom:.3125em;font-weight:bold} |
| dl dd{margin-bottom:1.25em} |
| abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} |
| abbr{text-transform:none} |
| blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} |
| blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} |
| blockquote cite:before{content:"\2014 \0020"} |
| blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} |
| blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} |
| @media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} |
| h1{font-size:2.75em} |
| h2{font-size:2.3125em} |
| h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} |
| h4{font-size:1.4375em}} |
| table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} |
| table thead,table tfoot{background:#f7f8f7;font-weight:bold} |
| table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} |
| table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} |
| table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} |
| table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} |
| body{tab-size:4} |
| h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} |
| h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} |
| .clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} |
| .clearfix:after,.float-group:after{clear:both} |
| *:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} |
| pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} |
| .keyseq{color:rgba(51,51,51,.8)} |
| kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} |
| .keyseq kbd:first-child{margin-left:0} |
| .keyseq kbd:last-child{margin-right:0} |
| .menuseq,.menu{color:rgba(0,0,0,.8)} |
| b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} |
| b.button:before{content:"[";padding:0 3px 0 2px} |
| b.button:after{content:"]";padding:0 2px 0 3px} |
| p a>code:hover{color:rgba(0,0,0,.9)} |
| #header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} |
| #header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} |
| #header:after,#content:after,#footnotes:after,#footer:after{clear:both} |
| #content{margin-top:1.25em} |
| #content:before{content:none} |
| #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} |
| #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} |
| #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} |
| #header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} |
| #header .details span:first-child{margin-left:-.125em} |
| #header .details span.email a{color:rgba(0,0,0,.85)} |
| #header .details br{display:none} |
| #header .details br+span:before{content:"\00a0\2013\00a0"} |
| #header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} |
| #header .details br+span#revremark:before{content:"\00a0|\00a0"} |
| #header #revnumber{text-transform:capitalize} |
| #header #revnumber:after{content:"\00a0"} |
| #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} |
| #toc{border-bottom:1px solid #efefed;padding-bottom:.5em} |
| #toc>ul{margin-left:.125em} |
| #toc ul.sectlevel0>li>a{font-style:italic} |
| #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} |
| #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} |
| #toc li{line-height:1.3334;margin-top:.3334em} |
| #toc a{text-decoration:none} |
| #toc a:active{text-decoration:underline} |
| #toctitle{color:#7a2518;font-size:1.2em} |
| @media only screen and (min-width:768px){#toctitle{font-size:1.375em} |
| body.toc2{padding-left:15em;padding-right:0} |
| #toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} |
| #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} |
| #toc.toc2>ul{font-size:.9em;margin-bottom:0} |
| #toc.toc2 ul ul{margin-left:0;padding-left:1em} |
| #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} |
| body.toc2.toc-right{padding-left:0;padding-right:15em} |
| body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} |
| @media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} |
| #toc.toc2{width:20em} |
| #toc.toc2 #toctitle{font-size:1.375em} |
| #toc.toc2>ul{font-size:.95em} |
| #toc.toc2 ul ul{padding-left:1.25em} |
| body.toc2.toc-right{padding-left:0;padding-right:20em}} |
| #content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} |
| #content #toc>:first-child{margin-top:0} |
| #content #toc>:last-child{margin-bottom:0} |
| #footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} |
| #footer-text{color:rgba(255,255,255,.8);line-height:1.44} |
| .sect1{padding-bottom:.625em} |
| @media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}} |
| .sect1+.sect1{border-top:1px solid #efefed} |
| #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} |
| #content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} |
| #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} |
| #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} |
| #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} |
| .audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} |
| .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} |
| table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} |
| .paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} |
| table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} |
| .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} |
| .admonitionblock>table td.icon{text-align:center;width:80px} |
| .admonitionblock>table td.icon img{max-width:none} |
| .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} |
| .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} |
| .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} |
| .exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} |
| .exampleblock>.content>:first-child{margin-top:0} |
| .exampleblock>.content>:last-child{margin-bottom:0} |
| .sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} |
| .sidebarblock>:first-child{margin-top:0} |
| .sidebarblock>:last-child{margin-bottom:0} |
| .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} |
| .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} |
| .literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} |
| .sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} |
| .literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} |
| .literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} |
| @media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} |
| @media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} |
| .literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} |
| .listingblock pre.highlightjs{padding:0} |
| .listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} |
| .listingblock pre.prettyprint{border-width:0} |
| .listingblock>.content{position:relative} |
| .listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} |
| .listingblock:hover code[data-lang]:before{display:block} |
| .listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} |
| .listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} |
| table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} |
| table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} |
| table.pyhltable td.code{padding-left:.75em;padding-right:0} |
| pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} |
| pre.pygments .lineno{display:inline-block;margin-right:.25em} |
| table.pyhltable .linenodiv{background:none!important;padding-right:0!important} |
| .quoteblock{margin:0 1em 1.25em 1.5em;display:table} |
| .quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} |
| .quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} |
| .quoteblock blockquote{margin:0;padding:0;border:0} |
| .quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} |
| .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} |
| .quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} |
| .quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} |
| .quoteblock .quoteblock blockquote{padding:0 0 0 .75em} |
| .quoteblock .quoteblock blockquote:before{display:none} |
| .verseblock{margin:0 1em 1.25em 1em} |
| .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} |
| .verseblock pre strong{font-weight:400} |
| .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} |
| .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} |
| .quoteblock .attribution br,.verseblock .attribution br{display:none} |
| .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} |
| .quoteblock.abstract{margin:0 0 1.25em 0;display:block} |
| .quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} |
| .quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} |
| table.tableblock{max-width:100%;border-collapse:separate} |
| table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} |
| table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} |
| table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} |
| table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} |
| table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} |
| table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} |
| table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} |
| table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} |
| table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} |
| table.frame-all{border-width:1px} |
| table.frame-sides{border-width:0 1px} |
| table.frame-topbot{border-width:1px 0} |
| th.halign-left,td.halign-left{text-align:left} |
| th.halign-right,td.halign-right{text-align:right} |
| th.halign-center,td.halign-center{text-align:center} |
| th.valign-top,td.valign-top{vertical-align:top} |
| th.valign-bottom,td.valign-bottom{vertical-align:bottom} |
| th.valign-middle,td.valign-middle{vertical-align:middle} |
| table thead th,table tfoot th{font-weight:bold} |
| tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} |
| tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} |
| p.tableblock>code:only-child{background:none;padding:0} |
| p.tableblock{font-size:1em} |
| td>div.verse{white-space:pre} |
| ol{margin-left:1.75em} |
| ul li ol{margin-left:1.5em} |
| dl dd{margin-left:1.125em} |
| dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} |
| ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} |
| ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} |
| ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} |
| ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} |
| ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} |
| ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} |
| ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} |
| ul.inline>li>*{display:block} |
| .unstyled dl dt{font-weight:400;font-style:normal} |
| ol.arabic{list-style-type:decimal} |
| ol.decimal{list-style-type:decimal-leading-zero} |
| ol.loweralpha{list-style-type:lower-alpha} |
| ol.upperalpha{list-style-type:upper-alpha} |
| ol.lowerroman{list-style-type:lower-roman} |
| ol.upperroman{list-style-type:upper-roman} |
| ol.lowergreek{list-style-type:lower-greek} |
| .hdlist>table,.colist>table{border:0;background:none} |
| .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} |
| td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} |
| td.hdlist1{font-weight:bold;padding-bottom:1.25em} |
| .literalblock+.colist,.listingblock+.colist{margin-top:-.5em} |
| .colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} |
| .colist>table tr>td:last-of-type{padding:.25em 0} |
| .thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} |
| .imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} |
| .imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} |
| .imageblock>.title{margin-bottom:0} |
| .imageblock.thumb,.imageblock.th{border-width:6px} |
| .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} |
| .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} |
| .image.left{margin-right:.625em} |
| .image.right{margin-left:.625em} |
| a.image{text-decoration:none;display:inline-block} |
| a.image object{pointer-events:none} |
| sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} |
| sup.footnote a,sup.footnoteref a{text-decoration:none} |
| sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} |
| #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} |
| #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} |
| #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em} |
| #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} |
| #footnotes .footnote:last-of-type{margin-bottom:0} |
| #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} |
| .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} |
| .gist .file-data>table td.line-data{width:99%} |
| div.unbreakable{page-break-inside:avoid} |
| .big{font-size:larger} |
| .small{font-size:smaller} |
| .underline{text-decoration:underline} |
| .overline{text-decoration:overline} |
| .line-through{text-decoration:line-through} |
| .aqua{color:#00bfbf} |
| .aqua-background{background-color:#00fafa} |
| .black{color:#000} |
| .black-background{background-color:#000} |
| .blue{color:#0000bf} |
| .blue-background{background-color:#0000fa} |
| .fuchsia{color:#bf00bf} |
| .fuchsia-background{background-color:#fa00fa} |
| .gray{color:#606060} |
| .gray-background{background-color:#7d7d7d} |
| .green{color:#006000} |
| .green-background{background-color:#007d00} |
| .lime{color:#00bf00} |
| .lime-background{background-color:#00fa00} |
| .maroon{color:#600000} |
| .maroon-background{background-color:#7d0000} |
| .navy{color:#000060} |
| .navy-background{background-color:#00007d} |
| .olive{color:#606000} |
| .olive-background{background-color:#7d7d00} |
| .purple{color:#600060} |
| .purple-background{background-color:#7d007d} |
| .red{color:#bf0000} |
| .red-background{background-color:#fa0000} |
| .silver{color:#909090} |
| .silver-background{background-color:#bcbcbc} |
| .teal{color:#006060} |
| .teal-background{background-color:#007d7d} |
| .white{color:#bfbfbf} |
| .white-background{background-color:#fafafa} |
| .yellow{color:#bfbf00} |
| .yellow-background{background-color:#fafa00} |
| span.icon>.fa{cursor:default} |
| .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} |
| .admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} |
| .admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} |
| .admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} |
| .admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} |
| .admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} |
| .conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} |
| .conum[data-value] *{color:#fff!important} |
| .conum[data-value]+b{display:none} |
| .conum[data-value]:after{content:attr(data-value)} |
| pre .conum[data-value]{position:relative;top:-.125em} |
| b.conum *{color:inherit!important} |
| .conum:not([data-value]):empty{display:none} |
| dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} |
| h1,h2,p,td.content,span.alt{letter-spacing:-.01em} |
| p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} |
| p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} |
| p{margin-bottom:1.25rem} |
| .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} |
| .exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} |
| .print-only{display:none!important} |
| @media print{@page{margin:1.25cm .75cm} |
| *{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} |
| a{color:inherit!important;text-decoration:underline!important} |
| a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} |
| a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} |
| abbr[title]:after{content:" (" attr(title) ")"} |
| pre,blockquote,tr,img,object,svg{page-break-inside:avoid} |
| thead{display:table-header-group} |
| svg{max-width:100%} |
| p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} |
| h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} |
| #toc,.sidebarblock,.exampleblock>.content{background:none!important} |
| #toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} |
| .sect1{padding-bottom:0!important} |
| .sect1+.sect1{border:0!important} |
| #header>h1:first-child{margin-top:1.25rem} |
| body.book #header{text-align:center} |
| body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} |
| body.book #header .details{border:0!important;display:block;padding:0!important} |
| body.book #header .details span:first-child{margin-left:0!important} |
| body.book #header .details br{display:block} |
| body.book #header .details br+span:before{content:none!important} |
| body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} |
| body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} |
| .listingblock code[data-lang]:before{display:block} |
| #footer{background:none!important;padding:0 .9375em} |
| #footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} |
| .hide-on-print{display:none!important} |
| .print-only{display:block!important} |
| .hide-for-print{display:none!important} |
| .show-for-print{display:inherit!important}} |
| </style> |
| </head> |
| <body class="article"> |
| <div id="header"> |
| </div> |
| <div id="content"> |
| <div class="paragraph"> |
| <p><a id="admin-shell"></a></p> |
| </div> |
| <div class="sect1"> |
| <h2 id="_equinox_console">Equinox Console</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p><a id="admin-shell-enable"></a></p> |
| </div> |
| <div class="sect2"> |
| <h3 id="_enabling_the_equinox_console">Enabling the Equinox Console</h3> |
| <div class="paragraph"> |
| <p>Shells are provided for both user region and kernel, although they are disabled by default and need enabling before |
| they can be used.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The user region shell ports may be reconfigured by editing the file |
| <code>osgi.console.properties</code> in the <code>repository/ext</code> directory, and |
| then restarting Virgo. The telnet properties in the file are prefixed with <strong>telnet.</strong>, and the ssh properties are prefixed with <strong>ssh.</strong>. |
| The kernel shell ports may be reconfigured by editing the file <code>osgi.console.properties</code> in the <code>configuration</code> directory, and then restarting Virgo.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To enable any of these shell ports, change the <code>enabled</code> setting from <code>false</code> to <code>true</code></p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-txt" data-lang="txt">enabled=true</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>in the corresponding properties files.</p> |
| </div> |
| <div class="paragraph"> |
| <p>If you wish to change a port, any free port can be used, but the usual defaults are, for telnet, 2501 for the user region and 2401 for the kernel, and |
| for ssh, 2502 for the user region and 2402 for the kernel.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Access is via ssh or telnet. |
| The simplest way to access the shell is via telnet to port 2501 or 2401 for user region or kernel, respectively.</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>$ telnet localhost 2501 |
| Trying ::1... |
| Connected to localhost. |
| Escape character is '^]'. |
| |
| osgi></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Alternatively, you can ssh to port 2502 or 2402 for user region or kernel, respectively. |
| The users and passwords for ssh are configured in <code>configuration/org.eclipse.virgo.kernel.users.properties</code> as described |
| in <a href="#configuring-authentication">Configuring Authentication</a>. The default user and password are <code>admin</code> |
| and <code>admin</code>.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>Currently the Virgo Nano Equinox Console is enabled by default. Telnet is accesible on <strong>2401</strong> and SSH on <strong>2402</strong>. In future these will be configurable.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>If you use the <code>shutdown</code> shell command to stop Virgo Server for Apache Tomcat, the shutdown messages appear in the shell terminal instead of in the terminal in which Virgo runs. This is due to the |
| mechanisms which the shell implementation uses to redirect standard output.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-using-vsh"></a></p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_using_virgo_shell_commands">Using Virgo Shell Commands</h3> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>This section is not applicable to Virgo Nano.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Virgo provides shell commands |
| that allow you to examine artifacts |
| currently installed in a particular Virgo Kernel instance, manage the lifecycle of the installed artifacts, install new artifacts, and shut down |
| the Virgo Kernel. You can install, examine, and manage the lifecycle of the following artifacts:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Bundles</p> |
| </li> |
| <li> |
| <p>Configuration Artifacts</p> |
| </li> |
| <li> |
| <p>PARs</p> |
| </li> |
| <li> |
| <p>Plans</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>and can examine:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Exported packages</p> |
| </li> |
| <li> |
| <p>Services in the OSGi service registry</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Virgo also provides shell commands to list all bundles that contain, export, or load a particular class.</p> |
| </div> |
| <div class="paragraph"> |
| <p>These commands are provided <strong>for the user region shells only</strong> and are grouped together in |
| the <code>vsh</code> <strong>scope</strong>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>You invoke commands using the <code>vsh:</code> scope. For example:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:plan list |
| |
| Name Version State |
| org.eclipse.virgo.apps.admin.plan 2.1.0 ACTIVE |
| org.eclipse.virgo.kernel.userregion.springdm 2.1.0 ACTIVE |
| org.eclipse.virgo.web 2.1.0 ACTIVE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-using-command-list"></a></p> |
| </div> |
| <div class="sect3"> |
| <h4 id="_virgo_shell_commands">Virgo Shell Commands</h4> |
| <div class="paragraph"> |
| <p>The following table lists the Virgo shell commands; each command in turn has a variety of options that you can specify, depending on what you want to do, such as start a bundle or refresh a plan. The reference documentation about each command provides the full list of available options.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-commands-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 1. Virgo Shell Commands</caption> |
| <colgroup> |
| <col style="width: 20%;"> |
| <col style="width: 80%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Command</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-bundle-command">bundle</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Manages and displays information about bundle artifacts.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-cl-clhas">clhas</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists all bundles that <emphasis role="bold">contain* a class or resource.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-cl-clexport">clexport</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists all bundles that <emphasis role="bold">export* a class or package.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-cl-clload">clload</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists all bundles that can <emphasis role="bold">load* a class.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-config-command">config</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Manages and displays information about configuration artifacts.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-package-command">packages</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays information about exported packages.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-par-command">par</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Manages and displays information about PAR artifacts.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-plan-command">plan</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Manages and displays information about plan artifacts.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-service-command">service</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays information about services in the OSGi service registry.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-install-command">install</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Installs an artifact to Virgo Kernel.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#admin-shell-vsh-shutdown-command">shutdown</a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Shuts down the Virgo Kernel instance to which the Equinox Console is connected.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-command-reference"></a></p> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_virgo_shell_command_reference">Virgo Shell Command Reference</h3> |
| <div class="paragraph"> |
| <p>This section contains reference information about the Virgo shell commands</p> |
| </div> |
| <div class="paragraph"> |
| <p><a href="#admin-shell-vsh-bundle-command">bundle</a>, |
| <a href="#admin-shell-cl-clhas">clhas</a>, |
| <a href="#admin-shell-cl-clexport">clexport</a>, |
| <a href="#admin-shell-cl-clload">clload</a>, |
| <a href="#admin-shell-vsh-config-command">config</a>, |
| <a href="#admin-shell-vsh-package-command">packages</a>, |
| <a href="#admin-shell-vsh-par-command">par</a>, |
| <a href="#admin-shell-vsh-plan-command">plan</a>, |
| <a href="#admin-shell-vsh-service-command">service</a>, |
| <a href="#admin-shell-vsh-install-command">install</a>, |
| <a href="#admin-shell-vsh-shutdown-command">shutdown</a>, |
| <a href="#admin-shell-vsh-help-command">help</a> and |
| <a href="#admin-shell-vsh-exit-command">exit</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-bundle-command"></a></p> |
| </div> |
| <div class="sect3"> |
| <h4 id="_bundle_command">bundle Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>bundle</code> command to manage the lifecycle of bundles deployed in Virgo Kernel and to gather information about deployed bundles, such as diagnostic information, header information, and so on. |
| The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-bundle-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 2. Options of the bundle Command</caption> |
| <colgroup> |
| <col style="width: 16%;"> |
| <col style="width: 83%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays the list of bundles that are currently installed in the current Virgo Kernel instance. With the exception of a few kernel bundles and their services, which Virgo Kernel uses to administer the user region, none of the kernel is visible to user installed artifacts; rather, only the bundles installed in the user region are visible. |
| Each bundle is identified by an internal <code>ID</code> which you can then use with the other <code>bundle</code> commands that manage a particular bundle, such as <code>start `<strong>`id</code></strong>. The <code>list</code> command also displays the version of the bundle, along with its state, which is one of the following standard OSGi lifecycle states: |
| <strong>Installed</strong>: The bundle is installed but its dependencies have not yet been resolved. |
| <strong>Resolved</strong>: The bundle is resolved and you can now start it. |
| <strong>Uninstalled</strong>: The bundle is uninstalled and you cannot use it. |
| <strong>Starting</strong>: The bundle is in the process of starting. |
| <strong>Active</strong>: The bundle is running and you can now use it. |
| <strong>Stopping</strong>: The bundle is in the process of stopping. |
| Use one of the other <code>bundle</code> commands to change the state of a bundle. For example, use the <code>bundle start `<strong>`id</code></strong> command to change the state of a bundle from <code>Installed</code> to <code>Active</code>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays detailed information about the specified bundle. Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| In addition to the information provided by the <code>bundle list</code> command (id, full name, version, and state), the <code>examine</code> command specifies whether the bundle includes a Spring application context (or is <strong>Spring Powered</strong>) and the exact physical location of the bundle JAR file. |
| The <code>examine</code> also provides the full list of packages that the bundle imports, as well as the bundles that in turn export these imported packages. Finally, the command displays the packages that the current bundle exports, and then in turn the list of other installed bundles that are currently importing these exported packages.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">start <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Starts the specified bundle. Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| After Virgo Kernel successfully starts the bundle, it is listed in the <code>Active</code> state.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">stop <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Stops the specified bundle. Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| When you stop a bundle, it goes from the <code>Active</code> state to the <code>Resolved</code> state, and you must re-start it if you want to use the application that the bundle contains.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">refresh <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Updates the contents of the specified bundle. Use the <code>bundle list</code> command to get the internal id of a particular bundle. Use this command if you have changed the contents of the bundle JAR file and you want to refresh the artifact as installed in the OSGi framework.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">uninstall <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Uninstalls the specified bundle from Virgo Kernel. Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| When the uninstall process is complete, the bundle does not show up in the list of bundles displayed by the <code>bundle list</code> command. If you want to use the application in the bundle, you must re-install it using the <code>install</code> command.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">diag <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Provides diagnostic information about the specified bundle. |
| In particular, this command displays information about the imported packages that Virgo Kernel could not resolve. |
| Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| Note that Virgo does not install unresolvable bundles. |
| Instead is takes a state dump (for offline analysis using the web administration console) and fails the deployment. |
| So bundles are only likely to become unresolvable in Virgo after an update operation.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">headers <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays the complete list of manifest headers of the specified bundle. Use the <code>bundle list</code> command to get the internal id of a particular bundle. |
| The manifest headers include: <code>Import-Package</code>, <code>Export-Package</code>, <code>Bundle-SymbolicName</code>, and so on.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The following examples show how to use this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p>First, use the <code>bundle list</code> command to view all the installed bundles:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:bundle list |
| |
| Id Name Version State |
| 40 org.eclipse.virgo.kernel.userregionfactory 3.0.0.RELEASE ACTIVE |
| 47 org.eclipse.equinox.cm 1.0.300.v20101204 ACTIVE |
| 48 org.eclipse.virgo.kernel.userregion 3.0.0.RELEASE ACTIVE |
| 49 org.eclipse.virgo.kernel.osgicommand 3.0.0.RELEASE ACTIVE |
| 50 org.eclipse.osgi.services 3.3.0.v20110110 ACTIVE |
| 51 com.springsource.org.apache.mina.core 2.0.2 ACTIVE |
| 52 org.apache.felix.gogo.command 0.8.0.v201105062003 ACTIVE |
| 53 org.apache.felix.gogo.runtime 0.8.0.v201105062003 ACTIVE |
| 54 org.apache.felix.gogo.shell 0.8.0.v201107131313 ACTIVE |
| 55 org.eclipse.equinox.console.supportability 1.0.0.20110722-2 ACTIVE |
| 56 com.springsource.org.apache.sshd.core 0.5.0 ACTIVE |
| 57 org.springframework.osgi.core 1.2.1 ACTIVE |
| 58 S org.springframework.osgi.extender 1.2.1 ACTIVE |
| 59 org.springframework.osgi.io 1.2.1 ACTIVE |
| 60 org.eclipse.virgo.kernel.agent.dm 3.0.0.RELEASE ACTIVE |
| 61 S org.eclipse.virgo.kernel.deployer.dm 3.0.0.RELEASE ACTIVE |
| 62 org.eclipse.equinox.ds 1.3.0.v20110124-0830 ACTIVE |
| 63 org.eclipse.equinox.util 1.0.200.v20100503 ACTIVE |
| 64 com.springsource.org.aopalliance 1.0.0 ACTIVE |
| 65 org.eclipse.virgo.kernel.dmfragment 3.0.0.RELEASE RESOLVED |
| 66 org.springframework.aop 3.0.5.RELEASE ACTIVE |
| 67 org.springframework.asm 3.0.5.RELEASE ACTIVE |
| 68 org.springframework.beans 3.0.5.RELEASE ACTIVE |
| 69 org.springframework.context 3.0.5.RELEASE ACTIVE |
| 70 org.springframework.core 3.0.5.RELEASE ACTIVE |
| 71 org.springframework.expression 3.0.5.RELEASE ACTIVE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to view the headers of the <code>org.springframework.osgi.extender</code> bundle (only the first few lines are shown):</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:bundle examine 5 |
| |
| Id: 5 |
| Name: org.springframework.osgi.extender |
| Version 1.2.1 |
| State: ACTIVE |
| Spring Powered: true |
| Bundle Location: file:<... omitted ...>/org.springframework.osgi.extender-1.2.1.jar/ |
| |
| Imported Packages: |
| org.springframework.osgi.context [1.2.1, 1.2.1] |
| exported by org.springframework.osgi.core 1.2.1 [4] |
| <... remainder omitted ...> |
| |
| Exported Packages: |
| org.springframework.osgi.extender 1.2.1 |
| <... remainder omitted ...> |
| |
| Published services: |
| 58 org.springframework.beans.factory.xml.NamespaceHandlerResolver |
| consumed by org.springframework.osgi.extender 1.2.1 [5] |
| consumed by org.eclipse.virgo.kernel.deployer.dm 2.1.0.RELEASE [8] |
| <... remainder omitted ...> |
| |
| Consumed services: |
| 1 org.osgi.service.packageadmin.PackageAdmin |
| published by org.eclipse.osgi 3.7.0.v20110224 [0] |
| <... remainder omitted ...> |
| |
| Fragments: |
| org.eclipse.virgo.kernel.dmfragment 2.1.0.RELEASE [10]</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-config-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_config_command">config Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>config</code> command to view and manage the configuration artifacts that have been installed in Virgo Kernel. A <strong>configuration artifact</strong> is simply a properties file that is associated with a user application that is contained in a bundle. Using configuration artifacts, you can manage the configuration of a user application completely separately from the bundle that contains the application. |
| The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-config-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 3. Options of the config Command</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists the configuration artifacts that are currently installed in Virgo Kernel. |
| The <code>list</code> option displays the full name of each installed configuration artifact, its version, and its current state. Configuration artifacts have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a configuration can be in is the same as those of bundles; see <a href="#admin-shell-bundle-command">the bundle command</a> for the list of possible states.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>name [version]</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays information about the specified configuration artifact. Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed. Use the <code>config list</code> command to view all configuration artifacts and versions currently installed in Virgo Kernel. |
| A configuration artifact must be active for you to examine it; if it is not currently active, use <code>config start</code> to start it and thus change its state to <code>Active</code>. |
| The command first displays the factory pid of the configuration artifact as well as the complete location of the bundle to which the configuration artifact is associated. The command then lists all the properties that make up the configuration, as well as their current value.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">start <strong>name [version]</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Starts the specified configuration artifact and makes it visible to Virgo Kernel. |
| Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the |
| configuration artifact installed (which Virgo does not currently support). |
| Use the <code>config list</code> command to view all configuration artifacts and versions currently installed in Virgo Kernel. |
| Starting the configuration sets its state to <code>Active</code>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">stop <strong>name [version]</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Stops the specified configuration artifact and makes it invisible to Virgo Kernel. Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which Virgo does not currently support). Use the <code>config list</code> command to view all configuration artifacts and versions currently installed in Virgo Kernel. |
| Stopping the configuration sets its state to <code>Resolved</code>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">refresh <strong>name [version]</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Updates the contents of the specified configuration artifact to Virgo Kernel. Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which Virgo does not currently support). Use the <code>config list</code> command to view all configuration artifacts and versions currently installed in Virgo Kernel. |
| Use this command if you have changed the contents of the configuration artifact, and you want to make this information known to Virgo Kernel and the associated bundle.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">uninstall <strong>name [version]</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Uninstalls the specified configuration artifact and make it completely unavailable to Virgo Kernel. Although you must specify the name of the configuration artifact, its version is optional unless you have multiple versions of the configuration artifact installed (which Virgo does not currently support). Use the <code>config list</code> command to view all configuration artifacts and versions currently installed in Virgo Kernel. |
| Stopping the configuration removes it from Virgo Kernel’s list of deployed artifacts and it will not show up when you perform a <code>config list</code>.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The following example shows how to use this command to list the installed configuration artifacts.</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:config list |
| |
| Name Version State |
| org.eclipse.virgo.kernel 0.0.0 ACTIVE |
| org.eclipse.virgo.kernel.jmxremote.access 0.0.0 ACTIVE |
| org.eclipse.virgo.kernel.userregion 0.0.0 ACTIVE |
| org.eclipse.virgo.kernel.users 0.0.0 ACTIVE |
| org.eclipse.virgo.medic 0.0.0 ACTIVE |
| org.eclipse.virgo.repository 0.0.0 ACTIVE |
| osgi.console.ssh 0.0.0 ACTIVE |
| osgi.console.telnet 0.0.0 ACTIVE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>To view the properties of a configuration artifact, and their current values, use <code>config examine</code>:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:config examine org.eclipse.virgo.repository |
| |
| Factory pid: |
| Bundle Location: file:plugins/org.eclipse.virgo.kernel.services-{version}.jar |
| |
| Properties: |
| chain: |
| ext,usr |
| ext.searchPattern: |
| repository/ext/{artifact} |
| ext.type: |
| external |
| service.pid: |
| org.eclipse.virgo.repository |
| usr.type: |
| watched |
| usr.watchDirectory: |
| repository/usr</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-package-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_packages_command">packages Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>packages</code> command to view the complete list of packages exported by all bundles installed in Virgo Kernel, as well as examine a particular exported package in more detail.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-package-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 4. Options of the packages Command</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays all the exported packages for all bundles in the uer region of Virgo Kernel. In addition to the package name, the command displays the version of the exported package and the <code>id</code> of the bundle that contains the exported package. You can examine the bundle by using the command <code>bundle examine</code> <strong>id</strong>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays details about the exported package. You must specify both the name of the exported package and its version; use <code>packages list</code> to view the exact names and version.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The <code>examine</code> command provides the following additional information about the exported package:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The name and version of the bundle that exports the package. This means that the package name is explicitly listed in the bundle’s <code>MANIFEST.MF</code> file as part of the <code>Export-Package</code> header.</p> |
| </li> |
| <li> |
| <p>Any attributes that are part of the <code>Export-Package</code>, in addition to <code>version</code>.</p> |
| </li> |
| <li> |
| <p>The directives that are part of the <code>Export-Package</code> header. A typical directive is <code>uses</code>, which declares up-front constraints on a number of other packages.</p> |
| </li> |
| <li> |
| <p>The list of all bundles that import the package.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to list all the exported packages for all bundles installed:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:packages list |
| |
| Name Version Providing Bundle |
| javax.accessibility 0.0.0 0 |
| javax.activation 0.0.0 0 |
| javax.activation 1.1.1 0 |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to examine a particular exported package:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:packages examine org.slf4j 1.6.1 |
| |
| Exporter: org.eclipse.virgo.region.user 0.0.0 [1] |
| |
| Attributes: |
| None |
| |
| Directives: |
| uses: |
| org.slf4j.spi |
| x-equinox-ee: |
| -1 |
| x-internal: |
| false |
| |
| Importer(s): |
| org.eclipse.virgo.kernel.agent.dm 2.1.0.RELEASE [7] |
| Import-Package attributes: |
| bundle-version: |
| 0.0.0 |
| version: |
| [1.6.1,2.0.0) |
| Import-Package directives: |
| resolution: |
| static |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-par-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_par_command">par Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>par</code> command to view all the PARs currently installed in Virgo Kernel, view details about a particular PAR and manage its lifecycle, such as starting, stopping, refreshing, and uninstalling it. |
| The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-par-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 5. Options of the par Command</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays all the PARs that are currently installed in Virgo Kernel. |
| The <code>list</code> option displays the full name of each installed PAR, its version, and its current state. PARs have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a PAR can be in is the same as those of bundles; see <a href="#admin-shell-bundle-command">the bundle command</a> for the list of possible states.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays information about the specified PAR; you are required to identify the PAR with both its name and its version. Use the <code>par list</code> command to view all installed PAR files and their versions. The command displays the following information: |
| The current state of the PAR (see <a href="#admin-shell-vsh-bundle-command">the bundle command</a> for the full list of possible states). |
| Whether the PAR is <strong>scoped</strong>. Scoping specifies whether Virgo Kernel should deploy the members of the PAR in their own scope; when scoping is disabled, Virgo Kernel deploys the artifacts into the global scope and they are accessible for access by all other artifacts. |
| Whether the PAR is <strong>atomic</strong>. When a PAR is atomic, Virgo Kernel manages the lifecycle of all its member artifacts as a single entity, which means if one artifact member is started, then Virgo Kernel starts <strong>all</strong> the PAR artifacts. If one artifact fails to start, then Virgo Kernel stops all other artifacts in the PAR. |
| The individual members, or children, of the PAR. These could be plans, bundles, configuration artifacts, and so on.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">start <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Starts the specified PAR. You must specify both the full name of the PAR as well as the version you want to start. Use the <code>par list</code> command to get the list of PARs currently installed in Virgo Kernel. |
| To start a PAR, it must have already been resolved by Virgo Kernel, or in other words, be in the <code>Resolved</code> state. After Virgo Kernel successfully starts the PAR, it is listed in the <code>Active</code> state.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">stop <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Stops the specified PAR. You must specify both the full name of the PAR as well as the version you want to stop. Use the <code>par list</code> command to get the list of PARs currently installed in Virgo Kernel. |
| When you stop a PAR, it goes from the <code>Active</code> state to the <code>Resolved</code> state, and you must re-start it if you want to use the application that the PAR contains.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">refresh <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Updates the contents of the specified PAR. You must specify both the name and version of the PAR you want to refresh. Use the <code>par list</code> command to this information. |
| Use this command if you have changed the contents of the PAR file and you want to refresh the artifact as installed in the OSGi framework.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">uninstall <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Uninstalls the specified PAR. You must specify both the name and version of the PAR you want to refresh. Use the <code>par list</code> command to this information. |
| When the uninstall process is complete, the PAR will not show up in the list of PARs displayed by the <code>par list</code> command. If you want to use the application in the PAR, you must re-install it using the <code>install</code> command.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The following example shows how to list the PARs that have been installed in Virgo Kernel:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:par list |
| |
| Name Version State |
| |
| org.eclipse.virgo.server.repository.hosted 2.1.0.RELEASE ACTIVE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to examine a particular PAR file:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:par examine org.eclipse.virgo.server.repository.hosted 2.1.0.RELEASE |
| |
| State: ACTIVE |
| Scoped: true |
| Atomic: true |
| |
| Children: |
| bundle org.eclipse.virgo.server.repository.hosted.core 2.1.0.RELEASE |
| bundle org.eclipse.virgo.server.repository.hosted.web 2.1.0.RELEASE |
| bundle org.eclipse.virgo.server.repository.hosted-synthetic.context 2.1.0.RELEASE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Finally, the following example shows how to refresh an installed PAR file:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:par refresh my.exciting.par 1.2.0 |
| |
| par my.exciting.par 1.2.0 refreshed successfully</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-plan-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_plan_command">plan Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>plan</code> command to view all the plans currently installed in Virgo Kernel, view details about a particular plan and manage its lifecycle, such as starting, stopping, refreshing, and uninstalling it. |
| The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-plan-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 6. Options of the plan Command</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays all the plans that are currently installed in Virgo Kernel. |
| The <code>list</code> option displays the full name of each installed plan, its version, and its current state. Plans have similar lifecycles to other artifacts, such as bundles, and so the list of states in which a plan can be in is the same as those of bundles; see <a href="#admin-shell-bundle-command">the bundle command</a> for the list of possible states.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays information about the specified plan; you are required to identify the plan with both its name and its version. Use the <code>plan list</code> command to view all installed plans and their versions. The command displays the following information: |
| The current state of the plan (see <a href="#admin-shell-vsh-bundle-command">the bundle command</a> for the full list of possible states). |
| Whether the plan is <strong>scoped</strong>. Scoping specifies whether Virgo Kernel should deploy the members of the plan in their own scope; when scoping is disabled, Virgo Kernel deploys the artifacts into the global scope and they are accessible for access by all other artifacts. |
| Whether the plan is <strong>atomic</strong>. When a plan is atomic, Virgo Kernel manages the lifecycle of all its member artifacts as a single entity, which means if one artifact member is started, then Virgo Kernel starts <strong>all</strong> the plan artifacts. If one artifact fails to start, then Virgo Kernel stops all other artifacts in the plan. |
| The individual members, or children, of the plan. These could be other plans, PARs, bundles, configuration artifacts, and so on.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">start <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Starts the specified plan. You must specify both the full name of the plan as well as the version you want to start. Use the <code>plan list</code> command to get the list of plans currently installed in Virgo Kernel. |
| To start a plan, it must have already been resolved by Virgo Kernel, or in other words, be in the <code>Resolved</code> state. After Virgo Kernel successfully starts the plan, it is listed in the <code>Active</code> state.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">stop <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Stops the specified plan. You must specify both the full name of the plan as well as the version you want to stop. Use the <code>plan list</code> command to get the list of plans currently installed in Virgo Kernel. |
| When you stop a plan, it goes from the <code>Active</code> state to the <code>Resolved</code> state, and you must re-start it if you want to use the application that the plan contains.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">refresh <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Updates the contents of the specified plan. You must specify both the name and version of the plan you want to refresh. Use the <code>plan list</code> command to this information. |
| Use this command if you have changed the contents of the plan file and you want to refresh the artifact as installed in the OSGi framework.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">uninstall <strong>name version</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Uninstalls the specified plan. You must specify both the name and version of the plan you want to refresh. Use the <code>plan list</code> command to this information. |
| When the uninstall process is complete, the plan will not show up in the list of plans displayed by the <code>plan list</code> command. If you want to use the application in the plan, you must re-install it using the <code>install</code> command.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The following example shows how to list the plans that have been installed in Virgo Kernel:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:plan list |
| |
| Name Version State |
| org.eclipse.virgo.apps.admin.plan 2.1.0 ACTIVE |
| org.eclipse.virgo.kernel.userregion.springdm 2.1.0 ACTIVE |
| org.eclipse.virgo.web 2.1.0 ACTIVE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to examine a particular plan:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:plan examine org.eclipse.virgo.kernel.userregion.springdm 2.1.0 |
| |
| State: ACTIVE |
| Scoped: false |
| Atomic: false |
| |
| Children: |
| bundle org.eclipse.virgo.kernel.agent.dm 2.1.0.RELEASE |
| bundle org.springframework.osgi.io 1.2.1 |
| bundle org.springframework.osgi.extender 1.2.1 |
| bundle org.springframework.osgi.core 1.2.1 |
| bundle org.eclipse.virgo.kernel.deployer.dm 2.1.0.RELEASE</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to stop a currently Active plan:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:plan stop org.eclipse.virgo.web 2.1.0 |
| |
| plan org.eclipse.virgo.web:2.1.0 stopped successfully</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to start a plan:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:plan start org.eclipse.virgo.web 2.1.0 |
| |
| plan org.eclipse.virgo.web:2.1.0 started successfully</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-service-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_service_command">service Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>service</code> command to view all the services that have been registered in the OSGi service registry of Virgo Kernel. You can also examine a specific service to discover its properties, the bundle that publishes the service, and any bundles that consume the service. |
| The following table lists the options you can specify for this command.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-service-command-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 7. Options of the service Command</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Option</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">list</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays the list of services that are currently registered in the OSGi service registry of Virgo Kernel. |
| Each service is identified by an internal <code>ID</code> which you can then use with the <code>service examine</code> command to view the details about a particular service. The <code>list</code> option also displays the object class that implements the service and the internal <code>id</code> of the bundle that provides the service.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">examine <strong>id</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Displays detailed information about the specified service. Use the <code>service list</code> command to get the internal id of a particular service. |
| This command displays the properties of the service, such as the object class that implements the service, the name of the bundle that publishes the service and any bundles that consume the service.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The following example shows how to list the services currently registered in the OSGi service registry:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:service list |
| |
| Id Object Class(es) Providing Bundle |
| |
| 1 org.osgi.service.packageadmin.PackageAdmin 0 |
| 2 org.osgi.service.permissionadmin.PermissionAdmin, ... 0 |
| 3 org.osgi.service.startlevel.StartLevel 0 |
| 4 org.eclipse.osgi.service.debug.DebugOptions 0 |
| 5 java.lang.ClassLoader 0 |
| 6 org.eclipse.osgi.framework.log.FrameworkLog 0 |
| 7 org.eclipse.osgi.framework.log.FrameworkLog 0 |
| <... remainder omitted ...> |
| |
| 72 org.eclipse.gemini.web.core.spi.ServletContainer 38 |
| 73 org.eclipse.gemini.web.core.WebContainer 37 |
| 74 org.eclipse.virgo.web.core.WebApplicationRegistry 39 |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to examine a particular service:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:service examine 73 |
| |
| Properties: |
| objectClass: |
| org.eclipse.gemini.web.core.WebContainer |
| service.id: |
| 73 |
| |
| Publisher: org.eclipse.gemini.web.core 1.1.0.RELEASE [37] |
| |
| Consumer(s): |
| org.eclipse.virgo.web.core 2.1.0.RELEASE [39]</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-install-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_install_command">install Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>install</code> command to deploy an artifact to Virgo Kernel. The artifact can be a bundle, PAR, plan, or configuration artifact.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The <code>install</code> command takes a single parameter: the URI of the artifact you want to deploy. For example, to deploy a bundle on the local computer, use the <code>file</code> scheme:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>file://full-pathname-to-artifact</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>After you execute the <code>install</code> command, Virgo Kernel attempts to resolve the artifact’s dependencies, and if it is successful, puts it in the <code>Resolved</code> state. At that point, you must start the artifact to be able to actually use it.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to install a bundle called <code>swf-booking-mvc.war</code> located in the <code>/home/apps</code> directory of the computer on which the Equinox Console Extension is being run:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:install file://home/apps/swf-booking-mvc.war |
| ... |
| Artifact bundle swf-booking-mvc.war 0.0.0 installed</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>This command is particularly useful for installing an artifact from the Virgo repository, in which case use the <code>repository:</code> scheme:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>repository:artifact-type/bundle-symbolic-name/bundle-version</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>For example:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:install repository:bundle/my.bundle/1.0 |
| ... |
| Artifact bundle my.bundle 1.0.0 installed</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to use the <code>bundle list</code> command to ensure that the bundle was indeed installed in Virgo Kernel; if you had installed a different kind of artifact, for example a plan, then you would use the appropriate command (such as <code>plan list</code>):</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:bundle list |
| |
| Id Name Version State |
| |
| 0 org.eclipse.osgi 3.6.1.R36x_v20100806 ACTIVE |
| 1 org.eclipse.virgo.region.user 0.0.0 ACTIVE |
| <... remainder omitted ...> |
| |
| 59 org.eclipse.virgo.server.splash 2.1.0.RELEASE ACTIVE |
| 60 swf-booking-mvc.war 0.0.0 RESOLVED</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that the <code>swf-booking-mvc.war</code> file is in the <code>Resolved</code> state. The following examples start the bundle, and then examine it to ensure that it is in the <code>Active</code> state:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:bundle start 60 |
| |
| bundle swf-booking-mvc.war:0.0.0 started successfully |
| |
| |
| osgi> vsh:bundle examine 60 |
| |
| Id: 60 |
| Name: swf-booking-mvc.war |
| Version 0.0.0 |
| State: ACTIVE |
| Spring Powered: true |
| Bundle Location: file:<... omitted ...>/swf-booking-mvc.war/ |
| |
| Imported Packages: |
| javax.crypto.interfaces [0.0.0, 0.0.0] |
| exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0] |
| org.omg.CosNaming.NamingContextPackage [0.0.0, 0.0.0] |
| exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0] |
| org.omg.DynamicAny.DynAnyFactoryPackage [0.0.0, 0.0.0] |
| exported by org.eclipse.osgi 3.6.1.R36x_v20100806 [0] |
| <... remainder omitted ...> |
| |
| osgi></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-vsh-shutdown-command"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_shutdown_command">shutdown Command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>shutdown</code> command to shut down the Virgo Kernel instance to which you are connected. When Virgo Kernel is shut down, the shell returns you to the operating system prompt. |
| The <code>shutdown</code> command does not have any options.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to use this command.</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> vsh:shutdown |
| osgi> ... |
| Connection closed by foreign host. |
| $</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-cl-clhas"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_clhas_command">clhas command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>clhas</code> command to list the entries contained in the bundles deployed in Virgo and to solve class loading issues. |
| The command accepts as a parameter a search pattern in the form <strong>path/resource</strong>. The resource part of the pattern can contain wildcards. |
| The output contains all bundles that have resources or classes matching the pattern. Since wildcards are allowed, the matching entities are listed as well.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following examples show how to use this command. |
| Use the <code>clhas</code> to view all bundles that contain <code>Servlet</code> class:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi>clhas /javax/servlet/Servlet.class |
| |
| Bundles containing [/javax/servlet/Servlet.class]: |
| 76 javax.servlet |
| /javax/servlet/Servlet.class</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Use the wildcard <code>*</code> with <code>clhas</code> to view all classes starting with <code>Servlet</code>:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clhas /javax/servlet/Servlet* |
| |
| Bundles containing [/javax/servlet/Servlet*]: |
| 76 javax.servlet |
| /javax/servlet/ServletRequestAttributeEvent.class |
| /javax/servlet/ServletRequest.class |
| <... remainder omitted ...> |
| /javax/servlet/Servlet.class |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The <code>clhas</code> command can also be used with class name instead of resource path:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clhas javax.servlet.Servlet |
| |
| Bundles containing [javax/servlet/Servlet.class]: |
| 76 javax.servlet |
| /javax/servlet/Servlet.class</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Please note that the command converts the class name to a path and appends <code>class</code> extension by default. |
| To search for a resource with an extension different than <code>class</code> you should use the resource path form:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clhas /LocalStrings.properties |
| |
| Bundles containing [/LocalStrings.properties]: |
| 96 com.springsource.org.apache.catalina |
| /org/apache/catalina/core/LocalStrings.properties |
| /org/apache/tomcat/util/http/mapper/LocalStrings.properties |
| /org/apache/catalina/loader/LocalStrings.properties |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following example shows how to identify a possible <code>ClassCastException</code> due to wrong packaging:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi>clhas /javax/servlet/Servlet.class |
| |
| Bundles containing [/javax/servlet/Servlet.class]: |
| 76 javax.servlet |
| /javax/servlet/Servlet.class |
| 107 myapp |
| /WEB-INF/classes/javax/servlet/Servlet.class</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>It’s obvious that the <code>javax.servlet</code> package should not be present in <code>myapp</code> application and its packaging has to be changed. This problem can often be seen in WAR or web bundles that package Servlet/JSP classes by accident.</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-cl-clexport"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_clexport_command">clexport command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>clexport</code> command to list the bundles that export a class or package. |
| The command accepts as a parameter the fully qualified class name (in the form <strong>package.class</strong>). |
| The command checks to see if the provided class is actually contained in a bundle. If the class is not found in a bundle but its package is exported, then a hint <code>[class not found, package only]</code> is displayed.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following examples show how to use this command. |
| Use the <code>clexport</code> to view all bundles that contain <code>Servlet</code> class:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clexport javax.servlet.Servlet |
| |
| Bundles exporting [javax.servlet.Servlet]: |
| 14 com.springsource.javax.servlet</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>If a bundle exports a package but does not contain the requested class, the output of the command will be similar to this:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clexport javax.servlet.ServletX |
| |
| Bundles exporting [javax.servlet.ServletX]: |
| 14 com.springsource.javax.servlet [class not found, package only]</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="admin-shell-cl-clload"></a></p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_clload_command">clload command</h4> |
| <div class="paragraph"> |
| <p>Use the <code>clload</code> command to list the bundles that can load a class or to check if a specific bundle can load a class. |
| The command accepts as parameters either:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>the fully qualified class name (in the form <strong>package.class</strong>)</p> |
| </li> |
| <li> |
| <p>the fully qualified class name (in the form <strong>package.class</strong>) and the symbolic name or id of the bundle that is to be tested</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The command lists not only the bundle that successfully loaded the class, but also the one that actually provides the class. This is visualized with hints like <code>[exported by 14 com.springsource.javax.servlet]</code>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following examples show how to use this command. |
| You can use the <code>clload</code> to view all bundles that can load <code>Servlet</code> class:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clload javax.servlet.Servlet |
| |
| Successfully loaded [javax.servlet.Servlet] from: |
| 56 com.springsource.org.apache.taglibs.standard |
| [exported by 14 com.springsource.javax.servlet] |
| 54 org.eclipse.virgo.apps.admin.web |
| [exported by 14 com.springsource.javax.servlet] |
| 19 com.springsource.org.apache.commons.fileupload |
| [exported by 14 com.springsource.javax.servlet] |
| <... remainder omitted ...></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>If a bundle is to be tested, then its id can be used as a command parameter:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clload javax.servlet.Servlet 19 |
| |
| Successfully loaded [javax.servlet.Servlet] using class loader from: |
| 19 com.springsource.org.apache.commons.fileupload |
| [exported by 14 com.springsource.javax.servlet]</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Or the same class load test can specify the symbolic name of the bundle:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> clload javax.servlet.Servlet com.springsource.org.apache.commons.fileupload |
| |
| Successfully loaded [javax.servlet.Servlet] using class loader from: |
| 19 com.springsource.org.apache.commons.fileupload |
| [exported by 14 com.springsource.javax.servlet]</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><a id="p2-commands"></a></p> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_using_the_p2_for_extending_your_virgo_installation">Using the p2 for extending your Virgo installation</h3> |
| <div class="sect3"> |
| <h4 id="_extending_with_the_p2_director">Extending with the p2 director</h4> |
| <div class="paragraph"> |
| <p>You can provision new features on top of your Virgo installation using the p2 director. It can be used both for initial provisioning and extending an existing installtion.</p> |
| </div> |
| <div class="paragraph"> |
| <p>For extending an existing installation you can use these director arguments:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>-repository http://download.eclipse.org/rt/ecf/3.5.3/site.p2 |
| -installIU org.eclipse.ecf.remoteservice.feature.feature.group |
| -destination <your {virgo-name} installation folder></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>This installs the <strong>latest</strong> version of the specified p2 feature in your Virgo installation’s p2 profile.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_extending_via_the_p2_shell_commands">Extending via the p2 shell commands</h4> |
| <div class="paragraph"> |
| <p>Another way to achieve the same results is to use the p2 commands. The commands are available only in VN as it includes p2 by default.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Note</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>For the other distributions only the director is supported and the operation only extends their kernel region.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Here’s a list of the most commonly used p2 commands:</p> |
| </div> |
| <div class="paragraph"> |
| <p><a id="p2-common-commands-table"></a></p> |
| </div> |
| <table class="tableblock frame-all grid-all spread"> |
| <caption class="title">Table 8. p2 Common Shell Commands</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Command</th> |
| <th class="tableblock halign-left valign-top">Help</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provaddrepo <repository URI></code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Add specified URI as metadata and artifact repository. Note that if you pass a wrong URL you’ll get an error saying: |
| <code>Repository not modifiable: <a href="http://wrongURL" class="bare">http://wrongURL</a></code>. The default behavior of this command is to create an empty repository at the |
| specified location if there isn’t any. That won’t work for remote locations so keep in mind that if you see this you probably passed a wrong URL.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provdelrepo <repository URI></code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Remove specified metadata and artifact repository.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provinstall <InstallableUnit> <version> <profileid></code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Install an IU to the profileid. If no profileid is given, installs into default profile.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provremove <InstallableUnit> <version> <profileid></code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Uninstall an IU from the profileid. If no profileid is given, uninstalls form default profile.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provlg [<repository URI | *> <iu id | *> <version range | *>]</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists all IUs with group capabilities in the given repo or in all repos if URI is omitted.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>provliu [<repository URI | *> <iu id | *> <version range | *>]</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lists the IUs that match the pattern in the given repo. * matches all.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>confapply</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">This is a Simple Configurator command, not a p2 one. However it is relevant because it applies dynamically, at runtime, the installed p2 features. |
| What the command does is to apply to the running OSGi framework the current content in the bundles.info file. When using the provinstall command it takes care of updating the bundles.info file.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>Here’s an example showing how to install the ECF remote services but with the p2 commands this time:</p> |
| </div> |
| <div class="literalblock"> |
| <div class="content"> |
| <pre>osgi> provaddrepo http://download.eclipse.org/rt/ecf/3.5.3/site.p2 |
| |
| osgi> provlg |
| |
| org.eclipse.ecf.core.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.core.featurepatch.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.core.featurepatch.source.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.core.source.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.datashare.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.datashare.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.dnssd.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.dnssd.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.jmdns.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.jmdns.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.slp.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.slp.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.zookeeper.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.discovery.zookeeper.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.eventadmin.examples.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.eventadmin.examples.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.eventadmin.feature.feature.group 2.0.0.v20111109-2142 |
| org.eclipse.ecf.eventadmin.source.feature.feature.group 2.0.0.v20111109-2142 |
| org.eclipse.ecf.osgi.services.feature.feature.group 2.0.1.v20111109-2142 |
| org.eclipse.ecf.osgi.services.source.feature.feature.group 2.0.1.v20111109-2142 |
| org.eclipse.ecf.remoteservice.examples.feature.feature.group 1.1.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.examples.source.feature.feature.group 1.1.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.rest.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.rest.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.rosgi.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.rosgi.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.sdk.feature.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.remoteservice.sdk.source.feature.feature.group 3.5.3.v20111109-2142 |
| org.eclipse.ecf.remoteservice.soap.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.soap.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.remoteservice.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.server.generic.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.server.generic.source.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.xmpp.feature.feature.group 1.0.0.v20111109-2142 |
| org.eclipse.ecf.xmpp.source.feature.feature.group 1.0.0.v20111109-2142 |
| |
| osgi> provinstall org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142 |
| Installation complete for org.eclipse.ecf.remoteservice.feature.feature.group 1.0.0.v20111109-2142 |
| |
| osgi> confapply |
| |
| osgi> ss |
| |
| "Framework is launched." |
| |
| |
| id State Bundle |
| 0 ACTIVE org.eclipse.osgi_3.7.1.R37x_v20110808-1106 |
| ... |
| 92 RESOLVED org.springframework.osgi.io_1.2.1 |
| 93 RESOLVED org.eclipse.ecf.console_1.0.0.v20111109-2142 |
| 94 RESOLVED org.eclipse.ecf.discovery_4.0.0.v20111109-2142 |
| 95 RESOLVED org.eclipse.ecf.provider_4.2.100.v20111109-2142 |
| 96 RESOLVED org.eclipse.ecf.provider.discovery_2.1.200.v20111109-2142 |
| 97 RESOLVED org.eclipse.ecf.provider.remoteservice_4.0.0.v20111109-2142 |
| 98 RESOLVED org.eclipse.ecf.remoteservice_6.0.200.v20111109-2142 |
| 99 RESOLVED org.eclipse.ecf.sharedobject_2.2.100.v20111109-2142 |
| 100 RESOLVED org.eclipse.equinox.concurrent_1.0.200.v20110502</pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>You can see that after applying the changes with <strong>confapply</strong> the remote services bundles and their dependencies are installed in VN.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div id="footer"> |
| <div id="footer-text"> |
| Last updated 2017-02-08 16:40:17 +01:00 |
| </div> |
| </div> |
| </body> |
| </html> |