| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <html> |
| <head> |
| <link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link> |
| <link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link> |
| </script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script> |
| <meta name="keywords" content="..."/> |
| <meta name="description" content="..." /> |
| <title> |
| Apache Aries - Aries Containers |
| </title> |
| </head> |
| <body onload="SetMenu()"> |
| |
| <table width="100%" cellpadding="0" cellspacing="0"> |
| <tr width="100%"> |
| <td id="cell-0-0" colspan="2"> </td> |
| <td id="cell-0-1"> </td> |
| <td id="cell-0-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-1-0"> </td> |
| <td id="cell-1-1"> </td> |
| <td id="cell-1-2"> |
| <div style="padding: 5px;"> |
| <div id="banner"> |
| <!-- Banner --> |
| <table border="0" cellpadding="0" cellspacing="0" width="100%"> |
| <tr> |
| <td align="left" class="topbardiv" nowrap=""> |
| <a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a> |
| </td> |
| <td align="right" nowrap=""> |
| <a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a> |
| </td> |
| </tr> |
| </table> |
| <!-- Banner --> |
| </div> |
| </div> |
| <div id="top-menu"> |
| <table border="0" cellpadding="1" cellspacing="0" width="100%"> |
| <tr> |
| <td> |
| <div align="left"> |
| <!-- Breadcrumbs --> |
| <!-- Breadcrumbs --> |
| </div> |
| </td> |
| <td> |
| <div align="right"> |
| <!-- Quicklinks --> |
| <DIV style="padding: 5px 5px 0px 25px;"> |
| <FORM action="http://www.google.com/search" method="get" style="font-size: 10px;"> |
| <A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A> |
| <INPUT name="ie" type="hidden" value="UTF-8"></INPUT> |
| <INPUT name="oe" type="hidden" value="UTF-8"></INPUT> |
| <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT> |
| <INPUT name="btnG" type="submit" value="Search"></INPUT> |
| <INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT> |
| <INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT> |
| </FORM> |
| </DIV> |
| <!-- Quicklinks --> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </td> |
| <td id="cell-1-3"> </td> |
| <td id="cell-1-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-2-0" colspan="2"> </td> |
| <td id="cell-2-1"> |
| <table> |
| <tr height="100%" valign="top"> |
| <td height="100%"> |
| <div id="wrapper-menu-page-right"> |
| <div id="wrapper-menu-page-top"> |
| <div id="wrapper-menu-page-bottom"> |
| <div id="menu-page"> |
| <!-- NavigationBar --> |
| <style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div> |
| |
| <div id="documentation" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/documentation/integrators-guide.html">Integrators Guide</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/articles.html">Articles</a> |
| </div> |
| <div class="menuitem"> |
| <a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tutorials.html">Tutorials</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/documentation/tools.html">Tools</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div> |
| |
| <div id="modules" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/modules/samples.html">Samples</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/async-svcs.html">Asynchronous Services</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint.html">Blueprint</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintannotation.html">Blueprint Annotations</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/blueprintweb.html">Blueprint Web</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/containers.html">Containers</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esaanttask.html">ESA Ant Task </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jmx.html">JMX</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jndiproject.html">JNDI</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/jpaproject.html">JPA</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactioncontrol.html">Transaction Control Service</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/transactionsproject.html">Transactions</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/rsa.html">Remote Service Admin (RSA)</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/spi-fly.html">SPI Fly</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/subsystems.html">Subsystems</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/modules/applications.html">Applications (obsolete)</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div> |
| |
| <div id="downloads" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/downloads/currentreleases.html">Current Releases</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/testresults.html">Compliance Tests</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/downloads/archived-releases.html">Archived Releases</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div> |
| |
| <div id="community" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/community/resources.html">Community Resources</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/gettinginvolved.html">Getting Involved</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/people.html">Who we are</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/boardreports.html">Board Reports</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/community/logos.html">Logos for Users</a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div> |
| |
| <div id="development" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="/development/buildingaries.html">Building Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/guidelines.html">Cording Guidelines</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/architecture.html">Architecture</a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/releasingaries.html">Releasing Aries </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/compliancetesting.html">OSGi Compliance Tests </a> |
| </div> |
| <div class="menuitem"> |
| <a href="/development/maintainingthewebpages.html">Web Site Maintenance </a> |
| </div> |
| </div> |
| |
| <div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div> |
| |
| <div id="sponsorship" class="menuitemgroup"> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
| </div> |
| <div class="menuitem"> |
| <a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a> |
| </div> |
| </div> |
| |
| <div class="promotion"> |
| <a href="http://www.apache.org/events/current-event.html"> |
| <img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/> |
| </a> |
| </div> |
| <!-- NavigationBar --> |
| </div> |
| </div> |
| </div> |
| </div> |
| </td> |
| <td height="100%" width="100%"> |
| <!-- Content --> |
| <div class="wiki-content"><style type="text/css"> |
| /* The following code is added by mdx_elementid.py |
| It was originally lifted from http://subversion.apache.org/style/site.css */ |
| /* |
| * Hide class="elementid-permalink", except when an enclosing heading |
| * has the :hover property. |
| */ |
| .headerlink, .elementid-permalink { |
| visibility: hidden; |
| } |
| h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> |
| <h1 id="aries-containers">Aries Containers<a class="headerlink" href="#aries-containers" title="Permanent link">¶</a></h1> |
| <p>Aries Containers is an Apache Aries subproject to manage container deployments, such as docker-based microservices, from a Java API.</p> |
| <p>Many technologies exist to manage container deployments. Examples include Kubernetes, Marathon/Mesos, Docker Swarm, Amazon ECS |
| and others. While each technology provides specific features, many of these management technologies share common behaviour. |
| Aries Containers provides an abstraction that allows users to easily switch between these technologies. </p> |
| <p>Benefits:</p> |
| <ul> |
| <li>Requirements change - container deployers may find that they need to change target platforms at short notice. Using an abstraction API |
| helps making such changes without too much additional work.</li> |
| <li>Testing - many container management systems require cluster of machines or otherwise large setup which may make testing during |
| development difficult. Aries Containers also contains a <code>docker.local</code> binding which makes it possible to run the same code with using |
| a local docker installation on the developer's machine.</li> |
| </ul> |
| <p>Current Aries Containers modules:</p> |
| <ul> |
| <li><code>containers-api</code> - the API implemented by the various bindings.</li> |
| <li><code>containers-docker-local</code> - Binding that uses the local docker installation.</li> |
| <li><code>containers-marathon</code> - Marathon binding.</li> |
| <li><code>containers-parent</code> - Parent pom.</li> |
| <li><code>containers-examples</code> - Examples.</li> |
| <li>...</li> |
| </ul> |
| <p>This project could influence the design process of the <a href="https://github.com/osgi/design/blob/master/rfps/rfp-0179-ComputeManagementService.pdf">OSGi RFP 179</a>.</p> |
| <h1 id="source">Source<a class="headerlink" href="#source" title="Permanent link">¶</a></h1> |
| <p>The Aries RSA source is in a separate <a href="https://git-wip-us.apache.org/repos/asf/aries-containers.git">git repository aries-containers</a> there is also a <a href="https://github.com/apache/aries-containers">mirror on github</a>.</p> |
| <p>To build the source, just run:</p> |
| <p><code>mvn install</code></p> |
| <p>Java 1.8 or higher is required. Maven 3.3.9+ is recommended.</p> |
| <h1 id="quick-start">Quick Start<a class="headerlink" href="#quick-start" title="Permanent link">¶</a></h1> |
| <p>The easiest way to get started is with the examples and the local docker binding. Aries Containers work well in an OSGi |
| environment where bindings are provided as OSGi services.</p> |
| <p>As an alternative, Aries Containers can also be used in a plain Java environment. Instead of obtaining the bindings |
| from the service registry, they need to be instantiated directly in this case.</p> |
| <h2 id="osgi-example">OSGi example<a class="headerlink" href="#osgi-example" title="Permanent link">¶</a></h2> |
| <p>The OSGi example uses the Felix SCR implementation to get the currently active ServiceManager injected into a simple servlet. |
| The servlet provides a simple UI to perform some of the management operations.</p> |
| <p>The servlet is written using OSGi Declarative Service annotations and OSGi Http Whiteboard annotations and can be found here: |
| <a href="https://git-wip-us.apache.org/repos/asf?p=aries-containers.git;a=blob;f=containers-examples/containers-example-osgiservlet/src/main/java/org/apache/aries/containers/examples/osgiservlet/ServiceManagerServlet.java;hb=HEAD">ServiceManagerServlet.java</a></p> |
| <p>Main functionality of the servlet can be summarized as follows:</p> |
| <div class="codehilite"><pre>@Component(service = Servlet.class, |
| property = {HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN + "=/manager"}) |
| public class ServiceManagerServlet extends HttpServlet { |
| |
| @Reference |
| ServiceManager serviceManager; |
| |
| @Override |
| protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
| PrintWriter pw = resp.getWriter(); |
| pw.println("<span class="nt"><BODY><H1></span>Service Deployments<span class="nt"></H1></span>"); |
| |
| pw.println("<span class="nt"><UL></span>"); |
| for (String dep : serviceManager.listServices()) { |
| pw.println("<span class="nt"><LI></span>" + dep); |
| } |
| </pre></div> |
| |
| |
| <p>In short - an OSGi Declarative Service Component is registered as a HTTP Whiteboard Servet. The Aries Containers Service Manager is |
| injected into the <code>serviceManager</code> field and then used in the servlet to manage services.</p> |
| <p>This demo can be launched in any OSGi framework that supports Declarative Services and the HTTP Whiteboard. For example, to run this demo |
| with the Apache Felix OSGi framework, add:</p> |
| <ul> |
| <li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.scr-2.0.10.jar">The Felix SCR Declarative Services Implementation</a></li> |
| <li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.configadmin-1.8.14.jar">Felix Configuration Admin Service Implementation</a></li> |
| <li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.eventadmin-1.4.8.jar">Felix Event Admin Service Implementation</a></li> |
| <li><a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.whiteboard-3.0.0.jar">Felix Http Whiteboard bundle</a> with <a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.jetty-3.4.2.jar">Felix Jetty</a> and the <a href="http://www-us.apache.org/dist//felix/org.apache.felix.http.servlet-api-1.1.2.jar">Servlet API</a>.</li> |
| </ul> |
| <p>Then add the Aries Containers implementation with the appropriate binding and their dependencies. To run with the Docker Local binding, add</p> |
| <ul> |
| <li>Aries Containers API</li> |
| <li>Aries Containers Docker Local</li> |
| <li><a href="http://repo2.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar">SLF4J API</a> and <a href="http://repo2.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar">implementation</a>.</li> |
| </ul> |
| <p>Finally add the OSGi demo bundle itself. The resulting bundle list will look like this:</p> |
| <div class="codehilite"><pre><span class="n">lb</span> |
| <span class="n">START</span> <span class="n">LEVEL</span> 1 |
| <span class="n">ID</span><span class="o">|</span><span class="n">State</span> <span class="o">|</span><span class="n">Level</span><span class="o">|</span><span class="n">Name</span> |
| 0<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 0<span class="o">|</span><span class="n">System</span> <span class="n">Bundle</span> <span class="p">(</span>5<span class="p">.</span>6<span class="p">.</span>4<span class="p">)</span><span class="o">|</span>5<span class="p">.</span>6<span class="p">.</span>4 |
| 1<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">jansi</span> <span class="p">(</span>1<span class="p">.</span>16<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>16<span class="p">.</span>0 |
| 2<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">JLine</span> <span class="n">Bundle</span> <span class="p">(</span>3<span class="p">.</span>3<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>3<span class="p">.</span>0 |
| 3<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Bundle</span> <span class="n">Repository</span> <span class="p">(</span>2<span class="p">.</span>0<span class="p">.</span>10<span class="p">)</span><span class="o">|</span>2<span class="p">.</span>0<span class="p">.</span>10 |
| 4<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">Command</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>2 |
| 5<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">JLine</span> <span class="n">Shell</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>6<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>6 |
| 6<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Gogo</span> <span class="n">Runtime</span> <span class="p">(</span>1<span class="p">.</span>0<span class="p">.</span>6<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>0<span class="p">.</span>6 |
| 7<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Declarative</span> <span class="n">Services</span> <span class="p">(</span>2<span class="p">.</span>0<span class="p">.</span>10<span class="p">)</span><span class="o">|</span>2<span class="p">.</span>0<span class="p">.</span>10 |
| 8<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Http</span> <span class="n">Jetty</span> <span class="p">(</span>3<span class="p">.</span>4<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>4<span class="p">.</span>2 |
| 9<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Servlet</span> <span class="n">API</span> <span class="p">(</span>1<span class="p">.</span>1<span class="p">.</span>2<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>1<span class="p">.</span>2 |
| 10<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Http</span> <span class="n">Whiteboard</span> <span class="p">(</span>3<span class="p">.</span>0<span class="p">.</span>0<span class="p">)</span><span class="o">|</span>3<span class="p">.</span>0<span class="p">.</span>0 |
| 11<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">Configuration</span> <span class="n">Admin</span> <span class="n">Service</span> <span class="p">(</span>1<span class="p">.</span>8<span class="p">.</span>14<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>8<span class="p">.</span>14 |
| 12<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Felix</span> <span class="n">EventAdmin</span> <span class="p">(</span>1<span class="p">.</span>4<span class="p">.</span>8<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>4<span class="p">.</span>8 |
| 13<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Aries</span> <span class="n">Containers</span> <span class="n">API</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705261547<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705261547 |
| 14<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Apache</span> <span class="n">Aries</span> <span class="n">Containers</span> <span class="n">impl</span> <span class="k">for</span> <span class="n">local</span> <span class="n">Docker</span> <span class="n">use</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291452<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291452 |
| 15<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">slf4j</span><span class="o">-</span><span class="n">api</span> <span class="p">(</span>1<span class="p">.</span>7<span class="p">.</span>25<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>7<span class="p">.</span>25 |
| 16<span class="o">|</span><span class="n">Resolved</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">slf4j</span><span class="o">-</span><span class="n">simple</span> <span class="p">(</span>1<span class="p">.</span>7<span class="p">.</span>25<span class="p">)</span><span class="o">|</span>1<span class="p">.</span>7<span class="p">.</span>25 |
| 17<span class="o">|</span><span class="n">Active</span> <span class="o">|</span> 1<span class="o">|</span><span class="n">Container</span> <span class="n">Example</span> <span class="n">OSGi</span> <span class="n">Servlet</span> <span class="p">(</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291444<span class="p">)</span><span class="o">|</span>0<span class="p">.</span>0<span class="p">.</span>1<span class="p">.</span>201705291444 |
| </pre></div> |
| |
| |
| <p>Now you can access the servlet at <a href="http://localhost:8080/containers/manager">http://localhost:8080/containers/manager</a></p> |
| <p><img alt="screenshot" src="containers/osgidemo.png" /></p> |
| <p>After adding a container you can inspect its result by querying <code>docker</code> for its running containers:</p> |
| <div class="codehilite"><pre>$ <span class="n">docker</span> <span class="n">ps</span> |
| <span class="n">CONTAINER</span> <span class="n">ID</span> <span class="n">IMAGE</span> <span class="n">COMMAND</span> <span class="n">STATUS</span> <span class="n">PORTS</span> <span class="n">NAMES</span> |
| 7<span class="n">cc5c753777e</span> <span class="n">httpd</span> "<span class="n">httpd</span><span class="o">-</span><span class="n">foreground</span>" <span class="n">Up</span> 4 <span class="n">seconds</span> 0<span class="p">.</span>0<span class="p">.</span>0<span class="p">.</span>0<span class="p">:</span>51467<span class="o">-></span>80<span class="o">/</span><span class="n">tcp</span> <span class="n">myapache</span> |
| </pre></div> |
| |
| |
| <h2 id="plain-java-example">Plain Java example<a class="headerlink" href="#plain-java-example" title="Permanent link">¶</a></h2> |
| <p>This example launches a small Java Application to create a service deployment. Initially a single container is deployed. The user can |
| modify the number of replicas from within the application.</p> |
| <p>The code can be found here: <a href="https://git-wip-us.apache.org/repos/asf?p=aries-containers.git;a=blob;f=containers-examples/containers-example-javaapp/src/main/java/org/apache/aries/containers/examples/javaapp/Main.java;hb=HEAD">Main.java</a></p> |
| <p>The main functionality is:</p> |
| <div class="codehilite"><pre> <span class="n">ServiceManager</span> <span class="n">sm</span> <span class="p">=</span> <span class="n">new</span> <span class="n">LocalDockerServiceManager</span><span class="p">();</span> |
| |
| <span class="o">//</span> <span class="n">If</span> <span class="n">you</span> <span class="n">want</span> <span class="n">to</span> <span class="n">run</span> <span class="n">with</span> <span class="n">Marathon</span><span class="p">,</span> <span class="n">use</span> <span class="n">the</span> <span class="n">following</span> <span class="n">line</span> |
| <span class="o">//</span> <span class="n">ServiceManager</span> <span class="n">sm</span> <span class="p">=</span> <span class="n">new</span> <span class="n">MarathonServiceManager</span><span class="p">(</span>"<span class="n">http</span><span class="p">:</span><span class="o">//</span>192<span class="p">.</span>168<span class="p">.</span>99<span class="p">.</span>100<span class="p">:</span>8080<span class="o">/</span>"<span class="p">);</span> |
| |
| <span class="n">ServiceConfig</span> <span class="n">sc</span> <span class="p">=</span> <span class="n">ServiceConfig</span><span class="p">.</span><span class="n">builder</span><span class="p">(</span>"<span class="n">mytesthttpd</span>"<span class="p">,</span> "<span class="n">httpd</span>"<span class="p">).</span> |
| <span class="n">cpu</span><span class="p">(</span>0<span class="p">.</span>2<span class="p">).</span><span class="n">memory</span><span class="p">(</span>32<span class="p">).</span><span class="n">port</span><span class="p">(</span>80<span class="p">).</span><span class="n">build</span><span class="p">();</span> |
| <span class="n">Service</span> <span class="n">svc</span> <span class="p">=</span> <span class="n">sm</span><span class="p">.</span><span class="n">getService</span><span class="p">(</span><span class="n">sc</span><span class="p">);</span> |
| <span class="o">//</span> <span class="n">The</span> <span class="n">service</span> <span class="n">is</span> <span class="n">now</span> <span class="n">created</span> |
| </pre></div> |
| |
| |
| <p>If you are running this the Docker local binding, you can see the docker container created:</p> |
| <div class="codehilite"><pre>$ <span class="n">docker</span> <span class="n">ps</span> |
| <span class="n">CONTAINER</span> <span class="n">ID</span> <span class="n">IMAGE</span> <span class="n">COMMAND</span> <span class="n">STATUS</span> <span class="n">PORTS</span> <span class="n">NAMES</span> |
| 7<span class="n">cc5c753777e</span> <span class="n">httpd</span> "<span class="n">httpd</span><span class="o">-</span><span class="n">foreground</span>" <span class="n">Up</span> 4 <span class="n">seconds</span> 0<span class="p">.</span>0<span class="p">.</span>0<span class="p">.</span>0<span class="p">:</span>51467<span class="o">-></span>80<span class="o">/</span><span class="n">tcp</span> <span class="n">mytesthttpd</span> |
| </pre></div> |
| |
| |
| <p>The example also allows scaling up and down of replica containers for this service.</p> |
| <h1 id="bindings">Bindings<a class="headerlink" href="#bindings" title="Permanent link">¶</a></h1> |
| <h2 id="docker-local">Docker Local<a class="headerlink" href="#docker-local" title="Permanent link">¶</a></h2> |
| <p>This binding works by issuing <code>docker</code> commands on the local machine and is very useful for testing. Make sure the environment |
| variables normally provided via <code>docker-machine env <myenv></code> are set.</p> |
| <p>OSGi ServiceManager identifier property: <code>container.factory.binding = docker.local</code></p> |
| <p>Constructor, for use outside of OSGi: <code>org.apache.aries.containers.docker.local.impl.LocalDockerServiceManager</code></p> |
| <h2 id="marathon">Marathon<a class="headerlink" href="#marathon" title="Permanent link">¶</a></h2> |
| <p>This binding uses Marathon as the underlying container manager. It requires the following configuration to be set:</p> |
| <div class="codehilite"><pre><span class="n">service</span><span class="p">.</span><span class="n">pid</span><span class="p">:</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">aries</span><span class="p">.</span><span class="n">containers</span><span class="p">.</span><span class="n">marathon</span> |
| <span class="n">marathon</span><span class="p">.</span><span class="n">url</span><span class="p">=</span><span class="o"><</span><span class="n">the</span> <span class="n">URL</span> <span class="n">where</span> <span class="n">marathon</span> <span class="n">can</span> <span class="n">be</span> <span class="n">contacted</span><span class="o">></span> |
| </pre></div> |
| |
| |
| <p>Once configured, the Marathon binding will register its OSGi service. </p> |
| <p>OSGi ServiceManager identifier property: <code>container.factory.binding = marathon</code></p> |
| <p>Constructors, for use outside of OSGi: <code>org.apache.aries.containers.marathon.impl.MarathonServiceManager</code></p> |
| <div class="codehilite"><pre><span class="cm">/**</span> |
| <span class="cm"> * Create the Marathon Service Manager.</span> |
| <span class="cm"> *</span> |
| <span class="cm"> * @param marathonURL The Marathon URL</span> |
| <span class="cm"> */</span> |
| <span class="n">public</span> <span class="n">MarathonServiceManager</span><span class="p">(</span><span class="n">String</span> <span class="n">marathonURL</span><span class="p">);</span> |
| |
| <span class="cm">/**</span> |
| <span class="cm"> * Create the Marathon Service Manager for use with DC/OS.</span> |
| <span class="cm"> *</span> |
| <span class="cm"> * @param marathonURL The Marathon URL.</span> |
| <span class="cm"> * @param dcosUser The DCOS user or service-user.</span> |
| <span class="cm"> * @param passToken The password or token to use.</span> |
| <span class="cm"> * @param serviceAcct `true` if this is a service account `false` if this is a plain user.</span> |
| <span class="cm"> */</span> |
| <span class="n">public</span> <span class="n">MarathonServiceManager</span><span class="p">(</span><span class="n">String</span> <span class="n">marathonURL</span><span class="p">,</span> <span class="n">String</span> <span class="n">dcosUser</span><span class="p">,</span> <span class="n">String</span> <span class="n">passToken</span><span class="p">,</span> <span class="n">boolean</span> <span class="n">serviceAcct</span><span class="p">);</span> |
| </pre></div></div> |
| <!-- Content --> |
| </td> |
| </tr> |
| </table> |
| </td> |
| <td id="cell-2-2" colspan="2"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-3-0"> </td> |
| <td id="cell-3-1"> </td> |
| <td id="cell-3-2"> |
| <div id="footer"> |
| <!-- Footer --> |
| <div id="site-footer"> |
| <a href="http://aries.apache.org/privacy-policy.html";>Privacy |
| Policy</a> |
| </div> |
| <!-- Footer --> |
| </div> |
| </td> |
| <td id="cell-3-3"> </td> |
| <td id="cell-3-4"> </td> |
| </tr> |
| <tr width="100%"> |
| <td id="cell-4-0" colspan="2"> </td> |
| <td id="cell-4-1"> </td> |
| <td id="cell-4-2" colspan="2"> </td> |
| </tr> |
| </table> |
| </body> |
| </html> |