SlideShare a Scribd company logo
Monitoring OSGi Applications with the Web Console
Carsten Ziegeler| Adobe Research Switzerland
About
cziegeler@apache.org

@cziegeler

§ 

Rnd Team at Adobe Research Switzerland

§ 

OSGi Core Platform and Enterprise Expert Groups

§ 

Member of the ASF
§ 

Most active in Apache Sling, Felix, Ace

§ 

Conference Speaker

§ 

Technical Reviewer

§ 

Article/Book Author

2
Problem Description
§ 

Manage an OSGi based application

§ 

Remotely

§ 

Easy of use

§ 

Extensibility

§ 

Offline support

3
Various Solutions
§ 

JMX

§ 

Text based
§ 
§ 

Knopflerfish Shell

§ 

Equinox Console

§ 

§ 

Apache Felix Shell, Apache Felix Gogo Shell

OSGi RFC 147 (Command Line Interface)

GUI based
§ 

Knopflerfish Desktop (Swing)

§ 

Apache Felix Web Console

4
Apache Felix Web Console
§ 

Rich set of core functionality
§ 

Bundles

§ 

Services

§ 

Configuration Admin

§ 

System Information

§ 

JQuery based UI

§ 

Extensible

§ 

Pluggable authentication

§ 

Still light-weight

5
Installation
§ 

Dependencies
§ 

OSGi Http Service

§ 

Commons IO 1.4 (*)

§ 

Commons File Upload 1.2 (*)

§ 

org.json (.e.g. Apache Geronimo Bundles: json-20090211) (*)

§ 

Two flavors: bundle with and without above marked dependencies

§ 

Additional optional dependencies

§ 

Additional plugins

6
Extension Points
§ 

Plugins

§ 

Inventory Printer (Configuration Printer)

§ 

Security Provider

§ 

Branding

§ 

Translations

7
Plugins
§ 

javax.servlet.Servlet service

§ 

Optional extend AbstractWebConsolePlugin

§ 

Service properties
§ 

felix.webconsole.label

§ 

felix.webconsole.title

§ 

felix.webconsole.category

8
Sample Plugin #1
@Component	
@Service(value=HttpServlet.class)	
@Properties({	
@Property(name="felix.webconsole.label", value="sample"),	
@Property(name="felix.webconsole.title", 	
value="Sample Plugin"),	
@Property(name="felix.webconsole.category", 	
value="My App")	
})	
public class SamplePlugin extends HttpServlet {	
	
@Override	
public void service(ServletRequest rq, ServletResponse rs)	
throws ServletException, IOException {	
rs.getWriter().println("Hello World...");	
}	
}

9
Sample Plugin #2
public class Sample2 extends SimpleWebConsolePlugin {
public Sample2(BundleContext ctx) {
super("sample2", "Sample Plugin #2", null);
register(ctx);
}
@Override
protected void renderContent(
HttpServletRequest req,
HttpServletResponse res)
throws IOException {
res.getWriter().println("Hi There ...")
}
}

10
Apache Felix Inventory
§ 

OSGi service providing status information
§ 

Bundle list, services, system properties etc.

§ 

Different formats: text, html, json

§ 

Optional attachments

§ 

Directly support in
web console

11
Inventory Printer Sample
@Component	
@Service(value={InventoryPrinter.class})	
@Properties({	
@Property(name=InventoryPrinter.NAME, value="slingjobs"),	
@Property(name=InventoryPrinter.TITLE, value="Sling Jobs"),	
@Property(name=InventoryPrinter.FORMAT, 	
value={"TEXT", "JSON"})	
})	
public class InventoryPlugin implements InventoryPrinter {	
	
public void print(final PrintWriter pw, 	
final Format format, final boolean isZip) {	
// print something	
}	
}	
	
Attachments: ZipAttachmentProvider

12
Branding
§ 

Service Interface: BrandingPlugin

§ 

Default Branding: DefaultBrandingPlugin

§ 

Branding Fragment
§ 

§ 

/META-INF/webconsole.properties
webconsole.brand.name = Apache Sling Web Console
webconsole.product.name = Apache Sling
webconsole.product.url = http://sling.apache.org
webconsole.product.image = /res/sling/logo.png
webconsole.favicon = /res/sling/favicon.ico

Sample
§ 

Sling Web Console Branding Plugin

13
Security Provider
§ 

Service interface: WebConsoleSecurityProvider
§ 
§ 

Validates Username / Password

§ 

§ 

HTTP Basic Authentication Based
Access Control (hook only)

Service Interface: WebConsoleSecurityProvider2
§ 
§ 

§ 

Extends WebConsoleSecurityProvider
Flexible Authentication (implementing HttpContext.handleSecurity)

Implementations
§ 

Default: Single configurable User

§ 

Karaf: JAAS based authentication

§ 

Sling
§ 

Authenticates against JCR Repository

§ 

Supports Sling Authentication Setup

14
Security Provider
§ 

WebConsoleSecurityProvider, WebConsoleSecurityProvider2

§ 

Web Console uses them for authentication

§ 

Methods for authorization not used atm

§ 

On the road map for next version!

15
Translations
§ 

Out-of-the-box
§ 

§ 

Bulgarian, English, German, Russian

Extensible
§ 

Fragment to the Web Console

§ 

Based on Standard Bundle Localization

§ 

OSGI-INF/l10n/bundle*.properties

16
Monitoring OSGi Applications with the Web Console - Carsten Ziegeler

More Related Content

Monitoring OSGi Applications with the Web Console - Carsten Ziegeler