Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-getting-started.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-getting-started.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-getting-started.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Apache Felix User Admin - Getting Started</h1> - <h2 id="authentication">Authentication</h2> + <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> +<h2 id="authentication">Authentication<a class="headerlink" href="#authentication" title="Permanent link">¶</a></h2> <p>To test whether an initiator of an action is known to the UserAdmin service, it should be authenticated. To authenticate a user, you typically do something like:</p> <p>{code:java} private UserAdmin m_userAdmin; @@ -92,7 +114,7 @@ if (user == null || !user.hasCredential( <span class="p">}</span> </pre></div> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project
Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-introduction.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-introduction.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-introduction.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,9 +77,20 @@ </div> <h1>Apache Felix User Admin - Introduction</h1> - <p>The Apache Felix User Admin provides an implementation of the OSGi UserAdmin compendium service. It allows you to manage roles (users and groups), define RBAC-like authorization schemes and test whether certain roles are authorized to initiate certain actions. </p> + <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> +<p>The Apache Felix User Admin provides an implementation of the OSGi UserAdmin compendium service. It allows you to manage roles (users and groups), define RBAC-like authorization schemes and test whether certain roles are authorized to initiate certain actions. </p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-mongodb-store.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-mongodb-store.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-user-admin/apache-felix-user-admin-mongodb-store.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Apache Felix User Admin - MongoDB Store</h1> - <p>The Apache Felix User Admin MongoDB store provides a MongoDB-based store for use with the Felix UserAdmin service. It uses MongoDB to persist the role information.</p> + <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> +<p>The Apache Felix User Admin MongoDB store provides a MongoDB-based store for use with the Felix UserAdmin service. It uses MongoDB to persist the role information.</p> <p>Note that this driver additionally needs the <a href="http://www.mongodb.org/display/DOCS/Java+Language+Center">MongoDB java driver</a> in order to operate! </p> <p>The MongoDB-based store service this bundle provides can be configured at runtime by using the service PID "<code>org.apache.felix.useradmin.mongodb</code>". The configuration options recognized by this service are:</p> <ul> @@ -79,7 +101,7 @@ <p>Alternatively, one can also supply the above mentioned configuration keys prefixed with "<code>org.apache.felix.useradmin.mongodb.</code>" as system properties. For example by adding <code>-Dorg.apache.felix.useradmin.mongodb.server=my.mongo.server:29000</code> to your JVM arguments will let this service use the MongoDB server at "<code>my.mongo.server</code>" on port 29000. However, using system properties will imply that only a single store can be configured on a system (which could be a sensible default for some situations)!</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Apache Felix Web Console</h1> - <div class="toc"> + <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 class="toc"> <ul> <li><a href="#requirements">Requirements</a></li> <li><a href="#variants">Variants</a></li> @@ -89,7 +111,7 @@ </ul> </div> <p>The Apache Felix Web Console is a simple tool to inspect and manage OSGi framework instances using your favourite Web Browser.</p> -<h2 id="requirements">Requirements</h2> +<h2 id="requirements">Requirements<a class="headerlink" href="#requirements" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The Web Console only has a single required dependency on the framework: A running implementation of the OSGi Http Service Specification. The reason for this is, that the Web Console is implemented as a servlet (actually just a gateway servlet dispatching to Web Console plugins) which is registered with the Http Service. If your framework does not yet have a Http Service installed, you might select from a variety of such implementations. The following is just an incomplete list:</p> <ul> @@ -104,7 +126,7 @@ <li>Apache Felix Declarative Services -- If your framework uses the Apache Felix Declarative Services implementation, you can use to the Web Console to inspect the declared components available from the various bundles and managed by the Service Component Runtime.</li> </ul> <p>Note, that the Apache Felix Declarative Services implementation is the only Apache Felix dependency contained in the Web Console. If you do not use the Apache Felix Declarative Services implementation, you just cannot inspect the declared components (because there is no official public API for this). Otherwise the Web Console perfectly operates without any problems.</p> -<h2 id="variants">Variants</h2> +<h2 id="variants">Variants<a class="headerlink" href="#variants" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The Web Console Bundle is available in two variants: A <em>full</em> variant and a <em>bare</em> variant. The <em>full</em> variant embeds three Java libraries which are not embedded in the <em>bare</em> variant. The <em>bare</em> variant expects the packages provided by those libraries to be exported from bundles installed in the framework.</p> <p>The three libraries are :</p> @@ -118,7 +140,7 @@ <li><em>Full</em> variant symbolic name: <code>org.apache.felix.webconsole</code></li> <li><em>Bare</em> variant symbolic name: <code>org.apache.felix.webconsole.bare</code></li> </ul> -<h2 id="installation">Installation</h2> +<h2 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>To install just use your favourite current means of installing new bundles in to the OSGi framework. For example using the Apache Felix shell console you might do:</p> <div class="codehilite"><pre><span class="o">></span> <span class="n">install</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">mirror</span><span class="p">.</span><span class="k">switch</span><span class="p">.</span><span class="n">ch</span><span class="o">/</span><span class="n">mirror</span><span class="o">/</span><span class="n">apache</span><span class="o">/</span><span class="n">dist</span><span class="o">/</span><span class="n">felix</span><span class="o">/</span><span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">webconsole</span><span class="o">-</span>2<span class="p">.</span>0<span class="p">.</span>6<span class="p">.</span><span class="n">jar</span> @@ -128,12 +150,12 @@ <p>where <em>x</em> is the bundle number printed by the Shell Console indicating the Bundle ID of the Web Console bundle.</p> -<h2 id="configuration">Configuration</h2> +<h2 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The configuration of the Web Console consists of two parts: One part is the configuration of the Http Service defining at which host address (host and port number) the servlet container is accessible. This configuration is technically outside of the scope of the Web Console configuration. See below for more information and how this is influenced.</p> <p>The second part of the Web Console configuration is the configuration of the console itself. The Web Console is configured using the OSGi Configuration Admin Service in that the Web Console registered a <code>ManagedService</code> with Service PID <code>org.apache.felix.webconsole.internal.servlet.OsgiManager</code> (of course you may well use the Web Console to edit the configuration of the Web Console itself).</p> <p>The Web Console supports the following settings with their corresponding default values:</p> -<table> +<table class="table"> <thead> <tr> <th>Property</th> @@ -185,9 +207,9 @@ </tbody> </table> <p>The default values apply if the respective property is missing from the configuration or if no configuration is provided at all.</p> -<h4 id="framework-properties">Framework Properties</h4> +<h4 id="framework-properties">Framework Properties<a class="headerlink" href="#framework-properties" title="Permanent link">¶</a></h4> <p>Some of the configuration properties supported through the OSGi Configuration Admin service can also be set globally and statically as framework properties. Such framework properties will also be considered actual default values for missing properties in Configuration Admin configuration as well as for the Metatype descriptor.</p> -<table> +<table class="table"> <thead> <tr> <th>Framework Property</th> @@ -222,13 +244,13 @@ </tbody> </table> <p>Please note that setting any of these properties as framework property makes them visible to all bundles deployed. This is particularly to be considered in case of the <code>felix.webconsole.password</code> property (as for authentication, the use of a <a href="/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html">Web Console Security Provider</a> is suggested anyway).</p> -<h4 id="configuration-of-the-osgi-http-service">Configuration of the OSGi Http Service</h4> +<h4 id="configuration-of-the-osgi-http-service">Configuration of the OSGi Http Service<a class="headerlink" href="#configuration-of-the-osgi-http-service" title="Permanent link">¶</a></h4> <p>As said above, the configuration of the OSGi Http Service used by the Web Console to register itself is outside of the scope of the Web Console. Lets just say, the OSGi Http Service specification defines a system propety -- <code>org.osgi.service.http.port</code> -- which may be set to define the port at which the Http Service should listen for HTTP requests. The respective Http Service implementation may define additional properties to define the actual interface on which to listen or to define a servlet context path.</p> <p>By default it is probably safe to assume, that having set the <code>org.osgi.service.http.port</code> to a defined value, the Http Service implementation will listen on all interfaces for requests at the set port number and that no servlet context path actually exists. For example, given the <code>org.osgi.service.http.port</code> property is set to <em>8888</em> the Web Console in the local system can be reached at : <code>http://localhost:8888/system/console</code>, where the <code>/system/console</code> path is configured using the <code>manager.root</code> configuration property (see the Configuration section).</p> <p>If you happen to deploy an OSGi framework instance inside a traditional web application and thus the Http Service implementation is actually a bridge into the existing servlet container (see for example <a href="http://www.eclipse.org/equinox/server/http*in*container.php">Equinox in a Servlet Container</a> or the Apache Sling Launchpad Web application), the host, port and context path are defined by your servlet container and web application deployment. For example, if the servlet container listens on host <code>sample.org</code> at port <code>8888</code> and the web application with your OSGi container is available in the <code>/osgi</code> context, the Web Console would be accessible at <code>http://sample.org:8888/osgi/system/console</code>.</p> -<h2 id="configuration-manager">Configuration Manager</h2> +<h2 id="configuration-manager">Configuration Manager<a class="headerlink" href="#configuration-manager" title="Permanent link">¶</a></h2> <p>The Configuration Manager is available via <code>http://localhost:8888/system/console/configMgr</code>. It display all OSGi services which can be configured.</p> -<h3 id="configuration-factories">Configuration factories</h3> +<h3 id="configuration-factories">Configuration factories<a class="headerlink" href="#configuration-factories" title="Permanent link">¶</a></h3> <p>The Configuration Manager has special support for configuration factories by allowing to add new items via the "plus" buttons or editing or removing existing ones.</p> <p>By default for each confguration factory item a unique ID is displayed, which is quite cryptic. Example: <code>org.apache.felix.jaas.Configuration.factory.18a6be2a-3173-4120-8f56-77fabff7b7ea</code>.</p> <p>The developer of the service with configuration factory can define a special "name hint" configuration propery which defines a name template which is used to build the configuration factory item name when displayed in the Configuration Manager. The name of this property is <code>webconsole.configurationFactory.nameHint</code>. It allows referencing other service property names as placeholders by enclosing in brackets.</p> @@ -237,35 +259,35 @@ jaas.realmName = "myRealm" jaas.classname = "myClass"</code></p> <p>In this case the Configuration Manager displays the name "myRealm, myClass" as display name for the configuration entry which is much more human-readable than the cryptic name. Please not that the OSGi configuration property <code>webconsole.configurationFactory.nameHint</code> must not be set to "private". It is never displayed by the Configuration Manager.</p> -<h2 id="security">Security</h2> +<h2 id="security">Security<a class="headerlink" href="#security" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The Web Console only has very basic security at the moment supporting only HTTP Basic authentication. This security is enabled by default and may be disabled by simply clearing the <code>username</code> property.</p> <p>To enhance the security of the Web Console you strongly encouraged to change at least the <code>password</code> for the admin user.</p> <p>As of Web Console 3.1.0 this simple user setup can be extended by providing <a href="/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html">Web Console Security Provider</a>. See that page for more information.</p> -<h2 id="browser-compliance">Browser Compliance</h2> +<h2 id="browser-compliance">Browser Compliance<a class="headerlink" href="#browser-compliance" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The goal of the Web Console is to support as big a range of Web Browsers as possible. As it stands now, Firefox (versions 2 and 3), Opera and Internet Explorer (versions 6 and 7) seem to be capable of using the Web Console. Should you encounter any problems with your particular browser, please report an issue for the <em>Web Console</em> in our issue tracking system (<a href="https://issues.apache.org/jira/browse/Felix">JIRA</a>).</p> <p>Beginning with Release 1.2.8 the Web Console is using JQuery to enhance the user experience. This should also help in keeping browser support on the broadest possible basis.</p> -<h2 id="extending-the-web-console">Extending the Web Console</h2> +<h2 id="extending-the-web-console">Extending the Web Console<a class="headerlink" href="#extending-the-web-console" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>The Web Console can be extended by registering an OSGi service for the interface <code>javax.servlet.Servlet</code> with the service property <code>felix.webconsole.label</code> set to the label (last segment in the URL) of the page. The respective service is called a Web Console Plugin or a plugin for short.</p> <p>Please for to the <a href="/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console.html">Extending the Apache Felix Web Console</a> for full documentation on extending the Apache Felix Web Console.</p> -<h2 id="restful-api">RESTful API</h2> +<h2 id="restful-api">RESTful API<a class="headerlink" href="#restful-api" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>While the Web Console does not have a full featured and documented REST-ful API, most plugins try to follow REST approaches. For example the Bundles plugin is able to send information on all bundles or a single directly addressed bundle.</p> <p>An attempt is made to document the current state of REST-like APIs at <a href="/documentation/subprojects/apache-felix-web-console/web-console-restful-api.html">Web Console RESTful API</a></p> -<h2 id="issues">Issues</h2> +<h2 id="issues">Issues<a class="headerlink" href="#issues" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>Should you have any questions using the Web Console, please send a note to one of our <a href="/mailinglists.html">Mailing Lists</a>.</p> <p>Please report any issues with the Web Console in our issue tracking system (<a href="https://issues.apache.org/jira/browse/Felix">JIRA</a>) and be sure to report for the <em>Web Console</em> component. See our [Issue Tracking] page for more details.</p> -<h2 id="screenshots">Screenshots</h2> +<h2 id="screenshots">Screenshots<a class="headerlink" href="#screenshots" title="Permanent link">¶</a></h2> <p><a href="">Top</a></p> <p>| !console-bundles.png|thumbnail! | !console-bundles-details.png|thumbnail! | !console-components.png|thumbnail! | | Bundle List | Bundle Details | Declarative Services Components (requires Apache Felix SCR) | | !console-config.png|thumbnail! | !console-status.png|thumbnail! | !console-system-info.png|thumbnail! | | Configuration Admin | System Status | System Information |</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1654730 by cziegeler on Mon, 26 Jan 2015 07:22:38 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Extending the Apache Felix Web Console</h1> - <h1 id="extending-the-apache-felix-web-console">Extending the Apache Felix Web Console</h1> + <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="extending-the-apache-felix-web-console">Extending the Apache Felix Web Console<a class="headerlink" href="#extending-the-apache-felix-web-console" title="Permanent link">¶</a></h1> <p>The <a href="/documentation/subprojects/apache-felix-web-console.html">Apache Felix Web Console</a> is extensible in various ways described no these pages:</p> <ul> <li><a href="/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-web-console-plugins.html">Providing Web Console Plugins</a></li> @@ -77,7 +99,7 @@ <li><a href="/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html">Web Console Security Provider</a></li> </ul> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/branding-the-web-console.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/branding-the-web-console.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/branding-the-web-console.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,9 +77,20 @@ </div> <h1>Branding the Web Console</h1> - <h1 id="branding-the-web-console">Branding the Web Console</h1> + <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="branding-the-web-console">Branding the Web Console<a class="headerlink" href="#branding-the-web-console" title="Permanent link">¶</a></h1> <p>Branding the Web Consle mainly concerns hooking into the looks of the Web Console providing vendor-provided setup like CSS, Logo, Main Title, Vendor URL, etc.</p> -<h2 id="brandingplugin-and-defaultbrandingplugin">BrandingPlugin and DefaultBrandingPlugin</h2> +<h2 id="brandingplugin-and-defaultbrandingplugin">BrandingPlugin and DefaultBrandingPlugin<a class="headerlink" href="#brandingplugin-and-defaultbrandingplugin" title="Permanent link">¶</a></h2> <p>Branding for the Web Console can be provided in two ways: By registering a <code>BrandingPlugin</code> service or by providing a branding properties files. The Web Console uses the branding from the <code>BrandingPlugin</code> service registered with the highest ranking.</p> <p>The <code>BrandingPlugin</code> interface provides the following information used for branding:</p> <div class="codehilite"><pre><span class="c1">// Returns an indicative name of the branding plugin</span> @@ -111,7 +133,7 @@ <p>If no <code>BrandingPlugin</code> service is registered, the <code>DefaultBrandingPlugin</code> is used.</p> <p>The <code>DefaultBrandingPlugin</code> reads the <code>/META-INF/webconsole.properties</code> from the web console bundle to setup the branding using the following properties:</p> -<table> +<table class="table"> <thead> <tr> <th>Property Name</th> @@ -168,7 +190,7 @@ </tbody> </table> <p><em>Note:</em> The <code>/META-INF/webconsole.properties</code> file is not contained in the Apache Felix Web Console bundle itself. It may be provided by a Fragment Bundle attaching to the Apache Felix Web Console bundle. For an example of such a fragment bundle see prototype <a href="https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/webconsolebranding/">Sling Web Console Branding Bundle</a> with its [<code>webconsole.properties</code>|https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/webconsolebranding/src/main/resources/META-INF/webconsole.properties?view=markup]</p> -<h2 id="branding-the-stylesheet">Branding the Stylesheet</h2> +<h2 id="branding-the-stylesheet">Branding the Stylesheet<a class="headerlink" href="#branding-the-stylesheet" title="Permanent link">¶</a></h2> <p>Branding the CSS Stylesheet is basically possible with the <code>BrandingPlugin.getMainStyleSheet()</code> method. The default value of the <code>DefaultBrandingPlugin</code> points to <a href="http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css?view=markup"><code>webconsole.css</code></a>. This allows styling the main content structure as shown here:</p> <p>{code:html} <body> @@ -211,7 +233,7 @@ <span class="n">It</span> <span class="n">is</span> <span class="n">yet</span> <span class="n">unclear</span> <span class="n">how</span> <span class="n">these</span> <span class="n">plugins</span> <span class="n">can</span> <span class="n">be</span> <span class="n">styled</span><span class="p">....</span> </pre></div> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-resources.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-resources.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-resources.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Providing Resources</h1> - <h1 id="providing-resources">Providing Resources</h1> + <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="providing-resources">Providing Resources<a class="headerlink" href="#providing-resources" title="Permanent link">¶</a></h1> <p>Extending the Apache Felix Web Console with new functionality is as easy as registering a <code>javax.servlet.Servlet</code> with at least the <code>felix.webconsole.label</code> service registration property set (see above). Providing resources is a bit more complex and requires more work on behalf of the plugin.</p> <p>Out of the box the Apache Felix Web Console plugin servces resources through the OSGi <code>HttpContext</code> used to register the web console with OSGi <code>HttpService</code>. This is done by registering resources with the <code>HttpService</code> below the <code>/res</code> alias. This mechanism though does not lend itself for easy extensibility. Therefore another mechanism has been chosen, which relies on similar mechanisms.</p> <p>A web console plugin may implement a <code>getResource</code> method which is looked up using reflection. This method is called by the <code>AbstractWebConsole.doGet</code> to check whether the request is actually for a resource.</p> @@ -79,7 +101,7 @@ <p>This method is called with the path info of the request (<code>HttpServletRequest.getPathInfo()</code>) and expects and URL to the resource to be sent to the client. If the path cannot be resolved to a resource the <code>getResource</code> method is expected to return <code>null</code> thus causing regular processing of rendering the page.</p> <p>If the <code>getResource</code> method returns an accessible non-<code>null</code> URL, the request is serviced by sending back the contents of the given URL. Simple caching support is included which handles the <code>If-Modified-Since</code> header and sets the <code>Last-Modified</code> header from the resource URL.</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-web-console-plugins.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-web-console-plugins.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-web-console-plugins.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Providing Web Console Plugins</h1> - <h1 id="providing-web-console-plugins">Providing Web Console Plugins</h1> + <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="providing-web-console-plugins">Providing Web Console Plugins<a class="headerlink" href="#providing-web-console-plugins" title="Permanent link">¶</a></h1> <p>The Web Console can be extended by registering an OSGi service for the interface <code>javax.servlet.Servlet</code> with the service property <code>felix.webconsole.label</code> set to the label (last segment in the URL) of the page. The respective service is called a Web Console Plugin or a plugin for short.</p> <p>The most basic plugin is a plain old Servlet whose <code>service(ServletRequest, ServletResponse)</code> method is called by the Apache Felix Web Console. Before calling the servlet the web console sets two request attributes helping the plugin rendering the response:</p> <ul> @@ -75,7 +97,7 @@ <li><em><code>felix.webconsole.labelMap</code></em> -- This request attribute of type <code>Map</code> provides a mapping of labels to page titles of registered console plugins. This map may be used to render a navigation of the console plugins such as the <code>AbstractWebConsolePlugin.renderTopNavigation</code> method does. The keys and values of the map are of type <code>String</code>.</li> </ul> <p>To help rendering the response the Apache Felix Web Console bundle provides two options: One option is to extend the <code>AbstractWebConsolePlugin</code> overwriting the <code>renderContent</code> method. The other option is to register the servlet with another service registration property to indicate the desire to wrap the response.</p> -<h2 id="extending-the-abstractwebconsoleplugin">Extending The AbstractWebConsolePlugin</h2> +<h2 id="extending-the-abstractwebconsoleplugin">Extending The AbstractWebConsolePlugin<a class="headerlink" href="#extending-the-abstractwebconsoleplugin" title="Permanent link">¶</a></h2> <p>To leverage the rendering of the common header and footer around the plugin's data area, the plugin can extend the abstract <code>org.apache.felix.webconsole.AbstractWebConsolePlugin</code> class implementing the following methods:</p> <ul> <li><em><code>renderContext(HttpServletRequest, HttpServletResponse)</code></em> -- This method is called to render the actual plugin data area.</li> @@ -89,10 +111,10 @@ <li><em><code>deactivate()</code></em> -- Destroys the plugin.</li> </ul> <p>In addition to these OSGi-oriented setup methods the Web Console itself will call the <code>Servlet.init(ServletConfig)</code> method before putting the plugin into service and the <code>Servlet.destroy()</code> method when the plugin is removed.</p> -<h4 id="providing-css-files">Providing CSS Files</h4> +<h4 id="providing-css-files">Providing CSS Files<a class="headerlink" href="#providing-css-files" title="Permanent link">¶</a></h4> <p>Part of rendering the header, the <code>AbstractWebConsolePlugin</code> also emits links to CSS files to include for displaying the page. Since such CSS links may only be present in the header section of the generated HTML the <code>getCssReferences()</code> method is provided. This method is called to create links for additional CSS files. The default implementation of this method returns <code>null</code> meaning no additional CSS links to be rendered. Extensions of the <code>AbstractWebConsolePlugin</code> may overwrite this method to provide a list of CSS links.</p> <p>The CSS links provided by the <code>getCssReferences()</code> method may be absolute or relative paths, though relative paths are recommended. Relative paths are turned into absolute path by prepending them with the value of the <code>felix.webconsole.appRoot</code> request attribute.</p> -<h2 id="transparent-response-wrapping">Transparent Response Wrapping</h2> +<h2 id="transparent-response-wrapping">Transparent Response Wrapping<a class="headerlink" href="#transparent-response-wrapping" title="Permanent link">¶</a></h2> <p>While being very simple and straight forward, extending the <code>AbstractWebConsolePlugin</code> actually creates a binding from the plugin provider bundle to the Web Console bundle, which may be undesired. To support the use case of wanting the benefits of the <code>AbstractWebConsolePlugin</code> but wiring independency of the Web Console, a plugin servlet may be registered with a second service registration property (besides the required <code>felix.webconsole.label</code>):</p> <ul> <li><em><code>felix.webconsole.title</code></em> -- If registered servlet does not extend the <code>AbstractWebConsolePlugin</code> but provides this property (of type <code>String</code>) the servlet is wrapped in an adapter to the <code>AbstractWebConsolePlugin</code> which calls <code>Servlet.service(ServletRequest, ServletResponse)</code> method on behalf of the <code>renderContent</code> implementation.</li> @@ -109,7 +131,7 @@ <p>Please note, that sometimes it is not desirable to have the <code>AbstractWebConsolePlugin</code> render the header and footer of the response. For this reason, the <code>AbstractWebConsolePlugin</code> only renders the header and footer if the request to such a wrapped plugin either has no extension or if the extension is <code>.html</code>. For any other extension, e.g. <code>.txt</code> or <code>.json</code>, the header and footer is not rendered and the <code>service</code> method of the plugin is directly called.</p> <p>It is suggested that plugins extend from the <code>javax.servlet.http.HttpServlet</code> class and implement the appropriate <code>doXxx(HttpServletRequest, HttpServletResponse)</code> methods such as <code>doGet</code> and <code>doPost</code>. In addition, unless non-GET requests are handled through AJAX calls, it is suggested that non-GET requests return a redirect after processing the request.</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-logging.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-logging.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-logging.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Web Console Logging</h1> - <h1 id="web-console-logging">Web Console Logging</h1> + <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="web-console-logging">Web Console Logging<a class="headerlink" href="#web-console-logging" title="Permanent link">¶</a></h1> <p>The Web Console does not provide its own mechanism for logging. Rather the Servlet Container logging mechanism is used by calling the <code>GenericServlet.log</code> methods for logging. It is expected by the OSGi Http Service implementation implements these <code>log</code> methods writing to the OSGi Log Service.</p> <p>The drawback of using servlet container logging is that we have no control over the logging levels used and applied to log messages. To at least allow some level of log message filtering the Web Console can be configured with a logging level using the <code>loglevel</code> property of the <em>Apache Felix OSGi Management Console</em> (<code>org.apache.felix.webconsole.internal.servlet.OsgiManager</code>).</p> <p>The <code>AbstractWebConsolePlugin</code> class provides two addition <code>log</code> methods taking a <code>level</code> parameter which allow plugins to filter certain log messages:</p> @@ -80,7 +102,7 @@ | 3 | LOG_INFO | This log entry may be the result of any change in the bundle or service and does not indicate a problem. | | 4 | LOG_DEBUG | This log entry is used for problem determination and may be irrelevant to anyone but the bundle developer. |</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-output-templating.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-output-templating.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-output-templating.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,8 +77,19 @@ </div> <h1>Web Console Output Templating</h1> - <p>Templating and Internationalization support of the Web Console is based on Java Resource Bundles loaded from the plugin bundles and is transparent to the plugin itself.</p> -<h2 id="basic-mechanism">Basic Mechanism</h2> + <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> +<p>Templating and Internationalization support of the Web Console is based on Java Resource Bundles loaded from the plugin bundles and is transparent to the plugin itself.</p> +<h2 id="basic-mechanism">Basic Mechanism<a class="headerlink" href="#basic-mechanism" title="Permanent link">¶</a></h2> <p>All requests handled by web console plugins are wrapped by response wrapper, which installs a Writer filter if the response is a <code>text/html</code> response. This writer filter recognizes variables of the pattern <code>$&#123;name&#125;</code> and tries to replace that part of the output with another string:</p> <div class="codehilite"><pre><span class="o">*</span> <span class="n">If</span> <span class="n">a</span> <span class="n">variable</span> <span class="n">of</span> <span class="n">that</span> <span class="n">name</span> <span class="n">exists</span><span class="p">,</span> <span class="n">the</span> <span class="n">value</span> <span class="n">of</span> <span class="n">that</span> <span class="n">variable</span> <span class="n">is</span> <span class="n">used</span><span class="p">.</span> <span class="n">See</span> <span class="n">Variable</span> <span class="n">Resolution</span> <span class="n">below</span><span class="p">.</span> <span class="o">*</span> <span class="n">Otherwise</span> <span class="k">if</span> <span class="n">a</span> <span class="n">resource</span> <span class="n">bundle</span> <span class="n">provides</span> <span class="n">a</span> <span class="n">translated</span> <span class="n">string</span> <span class="k">for</span> <span class="n">the</span> <span class="n">name</span><span class="p">,</span> <span class="n">that</span> <span class="n">string</span> <span class="n">is</span> <span class="n">used</span><span class="p">.</span> <span class="n">See</span> <span class="n">Resource</span> <span class="n">Bundles</span> <span class="n">below</span><span class="p">.</span> @@ -75,11 +97,10 @@ </pre></div> -<h3 id="example">Example</h3> +<h3 id="example">Example<a class="headerlink" href="#example" title="Permanent link">¶</a></h3> <p>Consider the plugin bundle provides a localization for the default german locale <code>de</code>:</p> -<p>{panel:title=OSGI-INF/l10n/bundle_de.properties} -Hello = Guten Tag -{panel}</p> +<p panel="panel">{panel:title=OSGI-INF/l10n/bundle_de.properties} +Hello = Guten Tag</p> <p>And the plugin defines a variable replacement and writes output with the following code:</p> <div class="codehilite"><pre>WebConsoleUtil.getVariableResolver().put("world", "Schweiz"); response.getWriter().println("<span class="cp">${</span><span class="n">Hello</span><span class="cp">}</span> <span class="cp">${</span><span class="n">world</span><span class="cp">}</span>"); @@ -91,15 +112,15 @@ response.getWriter().println("<span </pre></div> -<h2 id="variable-resolution">Variable Resolution</h2> +<h2 id="variable-resolution">Variable Resolution<a class="headerlink" href="#variable-resolution" title="Permanent link">¶</a></h2> <p>Variable Resolution is based on a <code>org.apache.felix.webconsole.VariableResolver</code> object provided as a request attribute prior to calling the <code>ServletResponse.getWriter()</code> method. If no such resolver is provided in the request, an instance of the <code>org.apache.felix.webconsole.DefaultVariableResolver</code> is used and stored in the request. Replacing the <code>VariableResolver</code> after the <code>getWriter()</code> has been called has no effect for variable resolution. Variables may be added to the <code>VariableResolver</code> even after the <code>getWriter()</code> method has been called.</p> -<h2 id="resource-bundles">Resource Bundles</h2> +<h2 id="resource-bundles">Resource Bundles<a class="headerlink" href="#resource-bundles" title="Permanent link">¶</a></h2> <p>Resources for the Resource Bundles is provided by the Web Console bundle on the one hand and by the bundle providing the plugin on the other hand. Resources are identified inside a bundle with the <code>Bundle-Localization</code> manifest header as described in Section 3.10 Localization in the Core Specification.</p> <p>This also means, that additional translations may be provided by fragment bundles.</p> <p>During request processing the <code>Locale</code> of the request (<code>ServletRequest.getLocale()</code>) is used to identify the actual resources to use. From this information a <code>ResourceBundle</code> is constructed from a collection of the resources provided by the plugin bundle and the resources provided by the Web Console.</p> -<h3 id="web-console-localization">Web Console Localization</h3> +<h3 id="web-console-localization">Web Console Localization<a class="headerlink" href="#web-console-localization" title="Permanent link">¶</a></h3> <p>The Web Console contains a single localization file <code>OSGI-INF/l10n/bundle.properties</code>. Fragments attached to the Web Console bundle may provide translations for these resources. All plugins of the Web Console itself will use a ReosurceBundle, which is only based on the localization of the Web Console itself.</p> -<h2 id="using-templating">Using Templating</h2> +<h2 id="using-templating">Using Templating<a class="headerlink" href="#using-templating" title="Permanent link">¶</a></h2> <p>To use the described templating, the plugin developer may provide the following:</p> <ol> <li>Use templated strings in the generated response. Such templated strings will be replaced with variable values or localization strings as available.</li> @@ -107,7 +128,7 @@ response.getWriter().println("<span <li>Provide localization files and optionally set the <code>Bundle-Localization</code> header if the base file name is not the default <code>OSGI-INF/l10n/bundle</code>.</li> </ol> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-web-console/web-console-security-provider.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Web Console Security Provider</h1> - <h1 id="web-console-security-provider">Web Console Security Provider</h1> + <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="web-console-security-provider">Web Console Security Provider<a class="headerlink" href="#web-console-security-provider" title="Permanent link">¶</a></h1> <div class="toc"> <ul> <li><a href="#web-console-security-provider">Web Console Security Provider</a><ul> @@ -77,7 +99,7 @@ </ul> </div> <p>As of Apache Felix Web Console 3.1.0 security of the Web Console can be extended by providing a <code>WebConsoleSecurityProvicer</code> service. An extension to this service has been introduced with the <code>WebConsoleSecurityProvider2</code> service in Apache Felix Web Console 3.1.4.</p> -<h2 id="webconsolesecurityprovider">WebConsoleSecurityProvider</h2> +<h2 id="webconsolesecurityprovider">WebConsoleSecurityProvider<a class="headerlink" href="#webconsolesecurityprovider" title="Permanent link">¶</a></h2> <p>The <code>WebConsoleSecurityProvider</code> service provides two methods:</p> <p>{code:java} /<em><em> @@ -151,10 +173,10 @@ public boolean authorize( Object user, S <p>This method is in full control of authentication and thus has to extract the user credentials from the request and can also fail the request.</p> -<h2 id="sample">Sample</h2> +<h2 id="sample">Sample<a class="headerlink" href="#sample" title="Permanent link">¶</a></h2> <p>A sample of a <code>WebConsoleSecurityProvider</code> service is the Apache Sling implementation <a href="http://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/webconsolesecurityprovider/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider.java"><code>SlingWebConsoleSecurityProvider</code></a>. This implementation uses a JCR implementation to login to the repository and thus validate the credentials.</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,18 +77,29 @@ </div> <h1>MOSGi Managed OSGi framework</h1> - <p>MOSGi enables the remote management of OSGi-compatible service gateways, using JMX. The framework is a reference architecture for end-to-end gateway management. It provides the following features: + <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> +<p>MOSGi enables the remote management of OSGi-compatible service gateways, using JMX. The framework is a reference architecture for end-to-end gateway management. It provides the following features: <em> relies on JMX management infrastructure (IP-based management), </em> provides two JMX agents: the standard Java 1.5 agent and a specific Java 1.4 lightweight embedded agent (MX4J agent deviation), <em> provides a way to deploy various probes on remote gateways, </em> provides a management console, * the graphical part of a probe (management console part) can be dynamically plugged in the management console and is dynamically downloaded.</p> -<h1 id="very-fast-quickstart-guide">Very fast QuickStart Guide</h1> +<h1 id="very-fast-quickstart-guide">Very fast QuickStart Guide<a class="headerlink" href="#very-fast-quickstart-guide" title="Permanent link">¶</a></h1> <p>Go into $FELIX_HOME/trunk/mosgi.doc and read Readme.txt.</p> -<h1 id="general-architecture">General architecture</h1> +<h1 id="general-architecture">General architecture<a class="headerlink" href="#general-architecture" title="Permanent link">¶</a></h1> <p>The overall architecture is presented in the following picture :</p> <p>!MOSGiArchitecture.png!</p> -<h1 id="how-it-works">How it works</h1> +<h1 id="how-it-works">How it works<a class="headerlink" href="#how-it-works" title="Permanent link">¶</a></h1> <p>Managed OSGi gateways can install JMX probes from various repositories. A JMX probe is a standard OSGi bundle that registers an <a href="">#MBean</a> component in the managed gateway's JMX agent.</p> <p>The management console (running in a standard OSGi framework) is connected to each gateway through the JMX remoting protocol. When it connects for the first time to a managed gateway, it asks for probes that are installed (i.e. all MBeans registered in the TabUI JMX domain). Then, for each MBean found, the management console asks for its graphical representation through a call to our standard API (component getUI() call). This call redirects to a bundle in the GUI probe repository that is installed by the management console. So the management console discovers at run-time the user interface it should use to supervise a specific remote gateway.</p> @@ -98,7 +120,7 @@ supervise a specific remote gateway.</p> <p>A JMX Console is an OSGi framework also (for simplicity) which should host two bundles : <em> JMX Console: the graphical framework that will host graphical plugins </em> jmxconsole common tabs: tabs that are common to all gateways. For the moment it only concerns a tab that shows remote notification (it works whith remote logger)</p> -<h1 id="osgijmx-mbean-registration">OSGi/JMX MBean registration</h1> +<h1 id="osgijmx-mbean-registration">OSGi/JMX MBean registration<a class="headerlink" href="#osgijmx-mbean-registration" title="Permanent link">¶</a></h1> <p>MOSGi installs JMX-MX4J agent at the gateways level. Any one can register an MBean to the JMX agent. The registration can be made in two ways. The direct code and the white board pattern. <em> In the direct code, one can register an MBean to the agent through the standard service interface : </em>javax.management.MBeanServer*</p> <p>Example:</p> @@ -117,7 +139,7 @@ supervise a specific remote gateway.</p> </pre></div> -<h1 id="management-console">Management Console</h1> +<h1 id="management-console">Management Console<a class="headerlink" href="#management-console" title="Permanent link">¶</a></h1> <p>The management console is a ad-hoc jmx compatible console. Its aim is not to be a concurrent to general purpose consoles like MX4J or JConsole but provides an ad-hoc user interface depending on the managed gateway. The console is based on a plugin framework. Each time the consol connects to a gateway it gets the list of available MBean. Then for each registered MBean it asks for specific local bundles for managing it. Each graphical bundle is integrated as a graphical tab in the management console.</p> <p>In the next screenshot, the gateway user has deployed 4 probes on the remote gateway : Remote Obr, Remote Bundle List, GNU/Linux and OSGi Plateform.!jmxconsoleGUI.png!</p> <p>In order to get these tabs, the gateway manager deploys the 4 probe bundles on the remote gateway and GUI tabs are automatically made available to the remote console. These bundles are : @@ -126,10 +148,10 @@ supervise a specific remote gateway.</p> <em> GNU-Linux : a probe that gets status from running host operating system </em> OSGi Platform : a probe that gets information from current running gateway</p> <p>These plugin are developed as simple examples and are available in felix repository. A <a href="/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.html">ProbeGuide</a> that describes plugin integration is available. Plugin are dynamically removed and reinstalled each time you change your selected gateway.</p> -<h3 id="mbean-definition">MBean Definition</h3> +<h3 id="mbean-definition">MBean Definition<a class="headerlink" href="#mbean-definition" title="Permanent link">¶</a></h3> <p>An MBean is a Management Component for the JMX framework. It is made of an MBean interface and an implementation of it. The MBean interface is used to make remote management with the implementation. </p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.html (original) +++ websites/staging/felix/trunk/content/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>ProbeGuide</h1> - <h1 id="developping-probes-for-mosgi-framework">Developping probes for MOSGi framework</h1> + <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="developping-probes-for-mosgi-framework">Developping probes for MOSGi framework<a class="headerlink" href="#developping-probes-for-mosgi-framework" title="Permanent link">¶</a></h1> <p>{quote}</p> <p>{quote} MOSGi is a management infrastructure for OSGi gateways remote management. The architecture relies on JMX management infrastructure and is classically build on a three layered system:</p> @@ -75,7 +97,7 @@ MOSGi is a management infrastructure for </em> The Agent layer: there is one agent per gateway and is responsible for maintaining access to a list of available probes, * The Manager layer is the remote environment that can communicate with the agent to get information from the gateway through the probes</p> <p>There are various way to implements this architecture (CIM/Wbem, Snmp, JMX). We have choose to use the JMX proposal because it is standardized in the java virtual machine since jdk1.5.</p> -<h1 id="jmx-management-infrastructure-synthesis">JMX management infrastructure synthesis</h1> +<h1 id="jmx-management-infrastructure-synthesis">JMX management infrastructure synthesis<a class="headerlink" href="#jmx-management-infrastructure-synthesis" title="Permanent link">¶</a></h1> <p>Sun JMX proposal defines the following elements :</p> <p>!JMXLayers.png! <em> The agent is the registry for probes called MBeans and is accessed through connectors. @@ -85,9 +107,9 @@ MOSGi is a management infrastructure for <p>!jmxmx4jhtml.png!</p> <p>These are various mbeans deployed on a specific gateway. We can identify 4 columns : the mbean registered name (and domain), its implementation, a comment and a function to unregister it.</p> <p>Mbeans are component that declare a management interface that should have a syntactic name similar to the class they instrument. For instance the class foo.Test should implement a management interface whose name is foo.TestMBean. The registration mechanism associates a implementation (conform to the management interface) with an objectName (a unique identifier). The corresponding call is something like :aMbeanServer.register(aMBeanImplementation, anObjectName);. There are many kinds of MBeans (standard, dynamic, model and simple) but their description is out of the scope of this document.</p> -<h1 id="mosgi-probe-developpement">MOSGi probe developpement</h1> +<h1 id="mosgi-probe-developpement">MOSGi probe developpement<a class="headerlink" href="#mosgi-probe-developpement" title="Permanent link">¶</a></h1> <p>Our management infrastructure proposes a framework for deploying standard mbean within OSGi gateways. It also embeds a reference to a graphical part (manager view) directly in the Mbean itself. Thus the management console is automatically populated with client part of the management system.</p> -<h2 id="gateway-probes">Gateway probes</h2> +<h2 id="gateway-probes">Gateway probes<a class="headerlink" href="#gateway-probes" title="Permanent link">¶</a></h2> <p>These probes are developed in conformance to the following elements. <em> A probe must be registered under the domain TabUI. It means that they will have a corresponding tab in our management console. </em> A probe must implement a management interface conform to the JMX specification (ie : foo.LinuxProbe --> foo.LinuxProbeMBean) @@ -140,7 +162,7 @@ MOSGi is a management infrastructure for <p>Once the probe is made as a bundle it can be deployed on the remote gateway. Then a manager (management console) can ask communicate with the gateway agent to manage the probe.</p> -<h2 id="mosgi-jmxconsole-architecture">MOSGi JmxConsole architecture</h2> +<h2 id="mosgi-jmxconsole-architecture">MOSGi JmxConsole architecture<a class="headerlink" href="#mosgi-jmxconsole-architecture" title="Permanent link">¶</a></h2> <p>When a probe is deployed on a remote gateway it is manageable by standard management consoles like JConsole, MC4J... We have developed our own management console that is able to manage probe in a more dedicated approach.</p> <p>The management console is based on a plugin mechanism. Each plugin is represented as a tab and each tab manages a probe. The console is launched with two bundles. Remotegui.jar is the execution framework and remotecomponent.jar contains a sole remote logger service that gets remote notification from gateways. The screen represented the gateway status after it has been launched.!EmptyConsole.png! The left panel identifies connected gateways, @@ -153,7 +175,7 @@ When the user selects a gateway (green f <p>For instance if the user selects the green point he gets the following tabs.</p> <p>!TabbedConsole.png!</p> <p>4 probes have been deployed on the remote gateway and 4 graphical tabs have been installed.</p> -<h2 id="graphical-tab-integration">Graphical tab integration</h2> +<h2 id="graphical-tab-integration">Graphical tab integration<a class="headerlink" href="#graphical-tab-integration" title="Permanent link">¶</a></h2> <p>When developing a probe one shall provide a corresponding MOSGi tab. It should follow these guidelines. <em> It should be a bundle in order to be remotely installed on the console </em> It should implement Plugin interface with is the jmxconsole container interface specification.</p> @@ -182,10 +204,10 @@ When the user selects a gateway (green f <p>Implementation tabs are provided as open-source code. You can find various implementation of this interface in felix repository in the <em>mosgi.managedelements.xxx.tab</em> elements.</p> -<h2 id="function-call-sequence">Function call sequence</h2> +<h2 id="function-call-sequence">Function call sequence<a class="headerlink" href="#function-call-sequence" title="Permanent link">¶</a></h2> <p>The next figure presents a function call sequence when using MOSGi framework.</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project Modified: websites/staging/felix/trunk/content/documentation/tutorials-examples-and-presentations.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/tutorials-examples-and-presentations.html (original) +++ websites/staging/felix/trunk/content/documentation/tutorials-examples-and-presentations.html Tue Sep 1 06:05:17 2015 @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><a href="/news.html">news</a> <br /> + <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> +<p><a href="/news.html">news</a> <br /> <a href="/license.html">license</a> <br /> <a href="/downloads.cgi">downloads</a> <br /> <a href="/documentation.html">documentation</a> <br /> @@ -66,7 +77,18 @@ </div> <h1>Tutorials, Examples, and Presentations</h1> - <h1 id="tutorials-examples-and-presentations">Tutorials, Examples, and Presentations</h1> + <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="tutorials-examples-and-presentations">Tutorials, Examples, and Presentations<a class="headerlink" href="#tutorials-examples-and-presentations" title="Permanent link">¶</a></h1> <ul> <li><a href="/documentation/tutorials-examples-and-presentations/apache-felix-application-demonstration.html">Apache Felix Application Demonstration</a></li> <li><a href="/documentation/tutorials-examples-and-presentations/apache-felix-osgi-faq.html">OSGi Frequently Asked Questions</a></li> @@ -75,7 +97,7 @@ <li><a href="/documentation/tutorials-examples-and-presentations/presentations.html">Presentations</a></li> </ul> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> - Rev. 1422427 by fmeschbe on Sun, 16 Dec 2012 00:36:51 +0000 + Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000 </div> <div class="trademarkFooter"> Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project