You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2013/02/07 11:01:35 UTC

svn commit: r1443380 - in /felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo: ./ apache-felix-ipojo-devguide/

Author: clement
Date: Thu Feb  7 10:01:34 2013
New Revision: 1443380

URL: http://svn.apache.org/viewvc?rev=1443380&view=rev
Log:
migrate pages to CMS, initial work on the reference card

Modified:
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.mdtext
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.mdtext
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-keypoints.mdtext
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.mdtext
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.mdtext
    felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/ipojo-reference-card.mdtext

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.mdtext Thu Feb  7 10:01:34 2013
@@ -7,13 +7,12 @@ Title: How to use iPOJO Manipulation Met
 
 *During the manipulation process, iPOJO gathers information about the manipulated classes. These metadata are stored inside the bundle manifest and are used to avoid reflection on the manipulated class. By using these metadata, your handler can check that the implementation class contains required fields, methods, check implemented interfaces.*
 
-{div:class=toc}
 [TOC]
-{div}
 
 ## Contained information
 
 Manipulation metadata contains:
+
 * Interfaces implemented by component type implementation
 * Fields of the component type implementation
 * Methods of the component type implementation
@@ -24,6 +23,7 @@ Field Metadata contains field name and t
 
 Manipulation (i.e. PojoMetadata) can be obtained form the factory of a (primitive) component type such as in:
 
+    :::java
     public void configure(InstanceManager im, Element metadata, Dictionary configuration)  {
         ...
         PojoMetadata manipulation = getFactory().getPojoMetadata();
@@ -34,15 +34,16 @@ Manipulation (i.e. PojoMetadata) can be 
 ## Getting Metadata
 
 From the manipulation metadata, you can query manipulation information by using following methods:
-* MethodMetadata\[\]({{ refs..path }}) getMethods() : Get all methods
-* FieldMetadata\[\]({{ refs..path }}) getFields() : Get all fields
-* String\[\]({{ refs..path }}) getInterfaces() : Get all implemented interfaces
-* FieldMetadata getField(String name) : Look for the field with the given name. Returns null if not found.
-* FieldMetadata getField(String name, String type): Look for the field with the given name and type. Returns null if not found.
-* boolean isInterfaceImplemented(String itf) : Is the given interface name implemented by the manipulated class.
-* MethodMetadata getMethod(String name) : Look for the method with the given name. Returns null if not found. Returns the first found if several method match.
-* MethodMetadata\[\]({{ refs..path }}) getMethods(String name) : Look for all methods with the given name. Returns an empty array if not found.
-* MethodMetadata getMethod(String name, String\[\]({{ refs..path }}) types) : Look for the method with the given name and argument type list. Returns null if not found.
+
+* `MethodMetadata[] getMethods()` : Get all methods
+* `FieldMetadata[] getFields()` : Get all fields
+* `String[] getInterfaces()` : Get all implemented interfaces
+* `FieldMetadata getField(String name)` : Look for the field with the given name. Returns null if not found.
+* `FieldMetadata getField(String name, String type)`: Look for the field with the given name and type. Returns null if not found.
+* `boolean isInterfaceImplemented(String itf)` : Is the given interface name implemented by the manipulated class.
+* `MethodMetadata getMethod(String name)` : Look for the method with the given name. Returns null if not found. Returns the first found if several method match.
+* `MethodMetadata[] getMethods(String name)` : Look for all methods with the given name. Returns an empty array if not found.
+* `MethodMetadata getMethod(String name, String[] types)` : Look for the method with the given name and argument type list. Returns null if not found.
 
 From a Field Metadata object, you can obtain the field name, type, and 'reflective' type. From a Method Metadata object, you can obtain the method name, the argument type array, and the returned type ('void' for void method).
 
@@ -50,25 +51,27 @@ From a Field Metadata object, you can ob
 
 You often need to invoke method on the POJO objects. iPOJO provides an helper class, named Callback, allow you to manage this invocation easily. You can obtain a Callback object from the Method Metadata. By this way, you are sure that the method exists in the implementation. To create the callback, use the following code:
 
-        PojoMetadata manip = getFactory().getPojoMetadata();
-        MethodMetadata method = manip.getMethod("your_method_name");
-        Callback cb = new Callback(method, im);
+    :::java
+    PojoMetadata manip = getFactory().getPojoMetadata();
+    MethodMetadata method = manip.getMethod("your_method_name");
+    Callback cb = new Callback(method, im);
 
 Then you can directly invoke your method:
 
-        ...
-        Object[] args = ...;  // Build your argument array
-        cb.call(args);
-        ...
+    :::java
+    Object[] args = ...;  // Build your argument array
+    cb.call(args);
+    ...
 
 
 ## Types & Reflective Types
 
 When querying field (or a method argument) type, the API returns following code identifiers:
+
 * For primitive types : int, long, short, byte, char, double, float, boolean
-* For primitives type arrays : int\[\]({{ refs..path }}), long\[\], short\[\], byte\[\], char\[\], double\[\], float\[\], boolean\[\]
+* For primitives type arrays : int[], long[], short[], byte[], char[], double[], float[], boolean[]
 * For object : qualified class name as java.lang.String
-* For object arrays : the qualified class name of the content type followed by \[\]({{ refs..path }}) as java.lang.String\[\]
+* For object arrays : the qualified class name of the content type followed by []({{ refs..path }}) as java.lang.String[]
 
 Array types are different from Java internal/reflective array types. To get the internal/reflective array type for field type you can use the `getReflectiveType` method.
   

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.mdtext Thu Feb  7 10:01:34 2013
@@ -9,49 +9,47 @@ Title: Apache Felix iPOJO Feature Overvi
 
 ## Core Features
 
-* *POJO-based approach* \- Most components can simply be POJOs and need not have iPOJO\- or OSGi-specific API in them.
-* *Simple service provisioning* \- iPOJO manages all aspects of providing an OSGi service.
-** *Service property management*
-**- Can be controlled by configuration properties.
-**- Can be mapped to member fields and        automatically updated by the component instance at run time by just        changing the member field value.
-** *Service life cycle participation* \- The component instance can participate in the       service life cycle by declaring a boolean member field that indicates       when the service is actually valid (normally a service is assumed to be       valid if the component instance's dependencies are satisfied).
-* *Rich service dependency model* \- Automatically manages a full spectrum of      service dependencies.
-** *Optional/mandatory* service dependencies.
-** *Singular/aggregate* service dependencies.
-** *Default service implementations* \- The component can provide default       implementations of dependent services if no providers are available.
-** *Member field or method injection* \- Also supported in combination.
-**- Member field injection does not require        cluttering component code with bind/unbind methods.
-**- Member method injection supports various method        signatures
-**-- method() \- Acts as a simple event-callback mechanism.
-**-- method(<service-interface> svc) \- Receives the service object cast to the         appropriate interface.
-**-- method(ServiceReference ref) \- Receives the OSGi ServiceReference for the service object.
-**-- method(ServiceReference ref, <service-interface> svc) \- Receives the OSGi ServiceReference and the service object cast to the         appropriate interface.
-** *Binding policies* \-       Allow components to control how/when their dependencies are bound.
-**- *Static* \- Static dependencies *cannot* change        without invalidating the component instance, so injected services        typically do not change at run time and service departures typically        result in the component instance being destroyed and potentially        recreated.
-**- *Dynamic* \- Dynamic dependencies *can* change        without invalidating the component instance, so injected services can        change at run time, but *do not* change with respect to service        priority changes (i.e., they do not automatically switch if a higher        priority service appears).
-**- *Dynamic priority* \- Dynamic priority dependencies *can* change without invalidating the component instance and *do* dynamically update based on service priority rankings at run time.
-* *Configuration property management* \- Integrated with OSGi Configuration Admin      service.
-** *Member field/member method injection* \- Also supported in combination.
-** *Service property propagation* \- Configuration properties can be configured to       update service properties if the component instance is providing a       service.
-* *Sophisticated concurrency handling* \- Externalizes concurrency issues so that      component code does not need to worry about services changing while they      are in use (i.e., no locking protocol in component code).
-* *Deferred instance creation* \- POJO instances are not created until they      are actually needed, thus reducing start-up overhead.
-* *Introspection support* \-      Supports introspecting a component instance and the state of its      dependencies.
-** Interactive introspection is supported by an arch command for Felix' shell.
-* *Extensible* \- All      iPOJO features are implemented via a set of `handlers`, which is an      extensibility mechanism open to developers by which they can support      custom functionality (e.g., exporting a provided service remotely, etc.).
+* *POJO-based approach* - Most components can simply be POJOs and need not have iPOJO- or OSGi-specific API in them.
+* *Simple service provisioning* - iPOJO manages all aspects of providing an OSGi service.
+* *Service property management*
+	* Can be controlled by configuration properties.
+	* Can be mapped to member fields and automatically updated by the component instance at run time by just changing the member field value.
+* Service life cycle participation
+	* The component instance can participate in the service life cycle by declaring a boolean member field that indicates when the service is actually valid (normally a service is assumed to be       valid if the component instance's dependencies are satisfied).
+* *Rich service dependency model* - Automatically manages a full spectrum of      service dependencies.
+	* *Optional/mandatory* service dependencies.
+	* *Singular/aggregate* service dependencies.
+	* *Default service implementations* - The component can provide default       implementations of dependent services if no providers are available.
+	* *Member field or method injection* - Also supported in combination.
+		* Member field injection does not require cluttering component code with bind/unbind methods.
+		* Member method injection supports various method signatures
+			* method() - Acts as a simple event-callback mechanism.
+			* method(<service-interface> svc) - Receives the service object cast to the         appropriate interface.
+			* method(ServiceReference ref) - Receives the OSGi ServiceReference for the service object.
+			* method(ServiceReference ref, <service-interface> svc) - Receives the OSGi ServiceReference and the service object cast to the         appropriate interface.
+	* *Binding policies* -       Allow components to control how/when their dependencies are bound.
+		* *Static* - Static dependencies *cannot* change        without invalidating the component instance, so injected services        typically do not change at run time and service departures typically        result in the component instance being destroyed and potentially        recreated.
+		* *Dynamic* - Dynamic dependencies *can* change        without invalidating the component instance, so injected services can        change at run time, but *do not* change with respect to service        priority changes (i.e., they do not automatically switch if a higher        priority service appears).
+		* *Dynamic priority* - Dynamic priority dependencies *can* change without invalidating the component instance and *do* dynamically update based on service priority rankings at run time.
+* *Configuration property management* - Integrated with OSGi Configuration Admin      service.
+* *Member field/member method injection* - Also supported in combination.
+	* *Service property propagation* - Configuration properties can be configured to       update service properties if the component instance is providing a       service.
+* *Sophisticated concurrency handling* - Externalizes concurrency issues so that      component code does not need to worry about services changing while they      are in use (i.e., no locking protocol in component code).
+* *Deferred instance creation* - POJO instances are not created until they      are actually needed, thus reducing start-up overhead.
+* *Introspection support* -      Supports introspecting a component instance and the state of its      dependencies.
+	* Interactive introspection is supported by an arch command for Felix' shell.
+* *Extensible* - All      iPOJO features are implemented via a set of `handlers`, which is an      extensibility mechanism open to developers by which they can support      custom functionality (e.g., exporting a provided service remotely, etc.).
 
 ## Advanced/Experimental Features
 
-* *Composite model* \-      iPOJO supports a flexible architectural-like model for composing services.
-** *Flexible composites* \- A       composite is an abstract component implementation.
-**- *Sub-services and sub-components* \- Unlike traditional component composition, an        iPOJO composite can be described in terms of services in addition to        sub-components; thus sub-service implementation selection is deferred        until run time.
-**- *Optional/mandatory* sub-services and/or sub-components.
-**- *Singular/aggregate* sub-services and/or sub-components.
-** *Hierarchical* \- A       composite component may contain other composite components.
-**- *Composite scoping* \- A composite acts as a scoping mechanism        where sub-services/sub-components are not visible externally and        external services are not visible internally.
-** *Service dependencies* \- A       composite has the full expressive capabilities of primitive components       when it comes to service dependencies (see above description of service       dependencies in core features).
-**- For a composite, a service dependency        effectively imports an external service into the composite scope from        its parent composite (which may be the OSGi service registry in the root        case).
-** *Composite is just a component* \- Composites can be instantiated and       automatically managed just like a primitive component.
-  
-  
-  
-  
+* *Composite model* -      iPOJO supports a flexible architectural-like model for composing services.
+	* *Flexible composites* - A       composite is an abstract component implementation.
+	* *Sub-services and sub-components* - Unlike traditional component composition, an        iPOJO composite can be described in terms of services in addition to        sub-components; thus sub-service implementation selection is deferred        until run time.
+	* *Optional/mandatory* sub-services and/or sub-components.
+	* *Singular/aggregate* sub-services and/or sub-components.
+	* *Hierarchical* - A       composite component may contain other composite components.
+	* *Composite scoping* - A composite acts as a scoping mechanism        where sub-services/sub-components are not visible externally and        external services are not visible internally.
+	* *Service dependencies* - A       composite has the full expressive capabilities of primitive components       when it comes to service dependencies (see above description of service       dependencies in core features).
+	* For a composite, a service dependency        effectively imports an external service into the composite scope from        its parent composite (which may be the OSGi service registry in the root        case).
+	* *Composite is just a component* - Composites can be instantiated and       automatically managed just like a primitive component.
+ 
\ No newline at end of file

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-keypoints.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-keypoints.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-keypoints.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-keypoints.mdtext Thu Feb  7 10:01:34 2013
@@ -23,20 +23,24 @@ with iPOJO you're free! To describe your
 
 ## Reliable and Efficient
 iPOJO relies on:
+
  * An OSGi R4.1 framework
  * A J2ME Foundation 1.1 java virtual machine
+
 So, you can use iPOJO on Apache Felix, Eclipse Equinox or any OSGi implementation compliant with the OSGi R4.1 specification. Moreover, iPOJO just relies on J2ME Foundation 1.1 profile. So, you can easily embed it...
 However, this does not limit iPOJO in term of performance. iPOJO is one of the most efficient component models for OSGi.  
 
 ## Embeddable
 As told in the previous section, iPOJO does not required advanced Java Virtual Machine. Moreover its footprint is quite small. iPOJO Core size is only 200Kb ! No more is required to use iPOJO...
+
 ## Adaptable
 iPOJO provides a very simple extensibility mechanism. So, you can extend iPOJO for your own requirement. Just look to the list of available handler (i.e. extension). Almost everything is possible...
 
 ## Going further
+
 * Want to go further; read the [Why choose iPOJO page]({{ refs.apache-felix-ipojo-why-choose-ipojo.path }}).
 * Want to try; look at the [iPOJO in 10 minutes tutorial]({{ refs.ipojo-in-10-minutes.path }})
-* Want more information; feel free to send an email on [usrs@felix.apache.org]({{ refs.mailto-users-felix-apache-org.path }})
+* Want more information; feel free to send an email on [users@felix.apache.org](mailto:users@felix.apache.org)
   
   
   

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.mdtext Thu Feb  7 10:01:34 2013
@@ -7,32 +7,73 @@ Title: apache-felix-ipojo-supportedOSGi
 
 *Despite iPOJO is an Apache Felix subproject, it relies only on *OSGi R4* features. So, it is possible to use it on others OSGi implementations.*
 
-{center}
-|Features| Apache Felix | Eclipse Equinox | Knoplerfish |
-|--|--|--|--|
-|Core|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Composites|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Configuration Admin|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Temporal Dependency|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Whiteboard pattern handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Extender pattern handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|Event Admin handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!
-|JMX handler (requires Java 5+)|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
-{center}
+<table class="table table-bordered table-striped table-hover">
+	<thead>
+		<tr>
+			<th>Features</th>
+			<th>Apache Felix</th>
+			<th>Eclipse Equinox</th>
+			<th>Knowplerfish</th>
+		</tr>	
+	</thead>		
+	<tbody>
+		<tr>
+			<td>Core features</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>	
+		<tr>
+			<td>Composites features</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Configuration Admin</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Temporal service dependencies</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Whiteboard and Extender pattern handler</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Event admin handler</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>JMX handler</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+	</tbody>
+</table>
+
 
 Feel free to send a mail on the Felix mailing list, if an implementation is not listed here.
 
 ----
 
-<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr>
-<td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td>
-<td>
-<b class="strong">Note about Knopflerfish</b><br/>
-<p>Old version of Knopflerfish does not allow getting a service during its unregistration. To enable this feature, launch the Knopflerfish framework with the 
-<em>-Dorg.knopflerfish.servicereference.valid.during.unregistering=true</em> property. You can add this property in the <em>props.xargs</em> file</p>
-<p>Recent version of KF does no more require this property.</p>
-</td>
-</tr></table>
+<div markdown="1" class="alert alert-success">
+Old version of Knopflerfish does not allow getting a service during its unregistration. To enable this feature, launch the Knopflerfish framework with the 
+<code>-Dorg.knopflerfish.servicereference.valid.during.unregistering=true</code> property. You can add this property in the <code>props.xargs</code> file.
+
+Recent version of KF does no more require this property.
+</div>
+
 
   
   

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.mdtext Thu Feb  7 10:01:34 2013
@@ -5,37 +5,100 @@ Title: apache-felix-ipojo-supportedVMs
 
 # Supported Java Virtual Machines
 
-|Features| Sun JVM 
-|--|
-(1.3, 1.4) || Sun JVM 
-(5, 6) || Apache Harmony || JamVM || IBM J9 || BEA JRockit
- (1.4) || BEA JRockit 
-(1.5,1.6) || Mika || Dalvik (Android)
-|Core|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!yellow.gif|align=center!|
-|Composites|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!yellow.gif|align=center!|
-|Configuration Admin|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
-|Temporal Dependency|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
-|Whiteboard pattern handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
-|Extender pattern handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
-|Event Admin handler|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|!green.gif|align=center!|
+<table class="table table-bordered table-striped table-hover">
+	<thead>
+		<tr>
+			<th>Features</th>
+			<th>Sun JVM (1.4, 5, 6)</th>
+			<th>Oracle JVM and OpenJDK</th>
+			<th>Harmony</th>
+			<th>JamVM</th>
+			<th>Mika</th>
+			<th>JRockit</th>
+			<th>Dalvik (Android)</th>
+		</tr>	
+	</thead>		
+	<tbody>
+		<tr>
+			<td>Core features</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class=" icon-warning-sign"></i></td>
+		</tr>	
+		<tr>
+			<td>Composites features</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-warning-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Configuration Admin</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Temporal service dependencies</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Whiteboard and Extender pattern handler</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+		<tr>
+			<td>Event admin handler</td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+			<td><i class="icon-ok-sign"></i></td>
+		</tr>
+	</tbody>
+</table>
 
 Feel free to send a mail on the Felix mailing list if a JVM is not listed here.
 
 ----
 
-<div class="info" markdown="1">
-**Note about Android**
+<div class="alert alert-info" markdown="1">
+<strong>Note about Android</strong>
 iPOJO is supported on Android except for two features:
-* Nullable are not supported (Default-Implementations are supported)
-* Composites cannot provide services (but they can export services)
-
+<ul>
+	<li>Nullable are not supported (Default-Implementations are supported)</li>
+	<li>Composites cannot provide services (but they can export services)</li>
+</ul>
 These two limitations comes from the Android VM (Dalvik) that does not support the definition of new classes at runtime (i.e. dynamically generated classes).
 </div>
 
-<div class="info" markdown="1">
-**Note about Android**
-iPOJO 1.6+ uses smart proxy by default. On Android this is not supported, however, you can disable the proxies with:
-`proxy="false"` in the service requirements.
+<div class="alert alert-info" markdown="1">
+<strong>Note about Android</strong>
+iPOJO 1.6+ uses smart proxy by default. On Android this is not supported, however, you can disable the proxies with: <code>proxy="false"</code> in the service requirements.
 </div>
 
   

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/ipojo-reference-card.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/ipojo-reference-card.mdtext?rev=1443380&r1=1443379&r2=1443380&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/ipojo-reference-card.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-ipojo/ipojo-reference-card.mdtext Thu Feb  7 10:01:34 2013
@@ -4,67 +4,111 @@ Title: iPOJO-Reference-Card
 
 
 # Declaring component types
-{code:xml|title=XML}
-<component
-    classname="my.Implementation"
-    name="my-type">
-</component>
+XML:
 
-    {code:java|title=Annotations}
+    :::xml
+    <component
+        classname="my.Implementation"
+        name="my-type">
+    </component>
+
+Java:
+
+    :::java
     @Component(name="my-type")
     public class Implementation {
       // ...
     }
 
-{div:class=borderedTable}
-{center}
-|Attribute name | Required | Default value | |
-|--|--|--|--|
-| classname | yes | | indicates the implementation class (automatic when using annotations). |
-| name | no | implementation class name | specifies the component type name. |
-  
-  
-  
-  
-{center}
-{div}
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Attribute name</th>
+      <th>Required</th>
+      <th>Default value</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>classname</td>
+      <td>yes</td>
+      <td></td>
+      <td>indicates the implementation class (automatic when using annotations).</td>
+    </tr>
+    <tr>
+      <td>name</td>
+      <td>no</td>
+      <td>the implementation class name</td>
+      <td>specifies the component class name</td>
+    </tr>
+  </tbody>
+</table>
+
 * [How-to use iPOJO factories]({{ refs.how-to-use-ipojo-factories.path }})
 
 # Creating component instances
-{code:xml|title=XML}
-<instance component="my-type"/>
-<instance component="my.Implementation"/>
-<instance component="my-type" name="my-instance"/>
-<instance component="my-type" name="my-instance">
-    <property name="property1" value="value1"/>
-</instance>
+XML:
 
-    {div:class=borderedTable}
-    {center}
-    ||Attribute name || Required || Default value || ||
-    | component | yes | | specifies the component type (either by using the name or the class name) |
-    | name | no | generated | specifies the instance name. |
-    {center}
-    {div}
-    * Instances can contains a configuration given under the {{key-value}} form. Properties can also by complex type.
-    * [How-to use iPOJO factories]
-    
-    {code:java|title=Annotations}
+    :::xml
+    <instance component="my-type"/>
+    <instance component="my.Implementation"/>
+    <instance component="my-type" name="my-instance"/>
+    <instance component="my-type" name="my-instance">
+        <property name="property1" value="value1"/>
+    </instance>
+
+Java:
+
+    :::java
     @Component(name="my-type")
     @Instantiate
     public class Implementation {
       // ...
-    }
+    }    
+
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Attribute name</th>
+      <th>Required</th>
+      <th>Default value</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>component</td>
+      <td>yes</td>
+      <td></td>
+      <td>specifies the component type (either by using the name or the class name)</td>
+    </tr>
+    <tr>
+      <td>name</td>
+      <td>no</td>
+      <td>generated</td>
+      <td>specifies the instance name.</td>
+    </tr>
+  </tbody>
+</table>
+
+* Instances can contains a configuration given under the `key-value` form. Properties can also by complex type.
+* How-to use iPOJO factories
 
 
 # Providing services
-{code:xml|title=XML}
-<component classname="my.service.implementation" name="my-service-impl">
-   <provides/>
-</component>
-<instance name="my-service-impl"/>
 
-    {code:java|title=Annotations}
+XML:
+
+    :::xml
+    <component classname="my.service.implementation" name="my-service-impl">
+       <provides/>
+    </component>
+    <instance name="my-service-impl"/>
+
+Java:
+
+    :::java
     @Component
     @Provides
     public class Implementation implements FooService {
@@ -73,32 +117,54 @@ Title: iPOJO-Reference-Card
 
 * Only instances provides really services, so don't forget to declare an instance.
 * Published service interfaces must be implemented by your component implementation
-{div:class=borderedTable}
-{center}
-|Attribute name | Required | Default value | |
-|--|--|--|--|
-| specifications | no | all implemented interfaces | specifies the published service interfaces |
-| strategy | no | `singleton` | specifies the service object creation policy among `singleton`, `service` (OSGi Service Factory), `method` (use the factory method), `instance` (an object per instance) |
-{center}
-{div}
+
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Attribute name</th>
+      <th>Required</th>
+      <th>Default value</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>specifications</td>
+      <td>no</td>
+      <td>all implemented interfaces</td>
+      <td>specifies the published service interfaces</td>
+    </tr>
+    <tr>
+      <td>strategy</td>
+      <td>no</td>
+      <td>`singleton`</td>
+      <td>specifies the service object creation policy among `singleton`, `service` (OSGi Service Factory), `method` (use the factory method), `instance` (an object per instance)</td>
+    </tr>
+  </tbody>
+</table>
+
 * [Providing OSGi services]({{ refs.providing-osgi-services.path }})
 
 # Publishing service properties
 
-{code:xml|title=XML}
-<component classname="my.service.implementation" name="my-service-impl">
-  <provides>
-	<property name="foo" field="m_foo" />
-	<property name="bar" field="m_bar" mandatory="true" />
-	<property name="baz" type="java.lang.String" /> <!-- Static property (do not change at runtime) -->
-  </provides>
-</component>
-<instance name="my-service-impl"> <!-- The configuration has to inject value in unvalued mandatory properties -->
-  <property name="bar" value="5"/>
-  <property name="baz" value="my string"/>
-<instance/>
+XML:
 
-    {code:java|title=Annotations}
+    :::xml
+    <component classname="my.service.implementation" name="my-service-impl">
+      <provides>
+    	<property name="foo" field="m_foo" />
+    	<property name="bar" field="m_bar" mandatory="true" />
+    	<property name="baz" type="java.lang.String" /> <!-- Static property (do not change at runtime) -->
+      </provides>
+    </component>
+    <instance name="my-service-impl"> <!-- The configuration has to inject value in unvalued mandatory properties -->
+      <property name="bar" value="5"/>
+      <property name="baz" value="my string"/>
+    <instance/>
+
+Java:
+
+    :::java
     @Component
     @Provides(specifications= {FooService.class, BarService.class},
     properties= {
@@ -111,31 +177,66 @@ Title: iPOJO-Reference-Card
         @ServiceProperty(name="bar", mandatory=true)
         public int m_bar;
         
-    // ...
+        // ...
     }
 
-{div:class=borderedTable}
-{center}
-|Attribute name | Required | Default value | |
-|--|--|--|--|
-| name | no | field name | specifies the published property name |
-| mandatory | no | false | specifies if the property has to receive a value from the instance configuration |
-| value | no |  | specifies the default property value |
-| field | no | (automatic with annotations) | specifies the field attached to the service property |
-| type | Only if there is no field (generated) | Type of the property | 
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Attribute name</th>
+      <th>Required</th>
+      <th>Default value</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>name</td>
+      <td>no</td>
+      <td>the field name</td>
+      <td>specifies the published property name</td>
+    </tr>
+    <tr>
+      <td>mandatory</td>
+      <td>no</td>
+      <td>false</td>
+      <td>specifies if the property has to receive a value from the instance configuration</td>
+    </tr>
+    <tr>
+      <td>value</td>
+      <td>no</td>
+      <td></td>
+      <td>specifies the default property value</td>
+    </tr>
+    <tr>
+      <td>field</td>
+      <td>no</td>
+      <td>(automatic with annotations)</td>
+      <td>specifies the injected field</td>
+    </tr>
+    <tr>
+      <td>type</td>
+      <td>only if there is no fields</td>
+      <td></td>
+      <td>specified the property type</td>
+    </tr>
+  </tbody>
+</table>
 
-{center}
-{div}
 * [Providing OSGi services]({{ refs.providing-osgi-services.path }})
 
 # Using services with field injection
-{code:xml|title=XML}
-<component classname="my.consumer.Implementation">
-    <requires field="fs" />
-    <requires field="bs" />
-</component>
+XML:
 
-    {code:java|title=Annotations}
+    :::xml
+    <component classname="my.consumer.Implementation">
+        <requires field="fs" />
+        <requires field="bs" />
+    </component>
+
+Java:
+    
+    :::java
     @Component
     public class Dependency {
     
@@ -148,37 +249,101 @@ Title: iPOJO-Reference-Card
         //...
     }
 
-{div:class=borderedTable}
-{center}
-|Attribute name | Required | Default value | |
-|--|--|--|--|
-| id | no | field name | dependency id |
-| field | no | automatically detected with annotations | injected field |
-| optional | no | false | specifies if the dependency if optional |
-  
-  
-| specification | yes/no | can be discovered from the code | specifies the required service specification. This attribute is required when the service type cannot be inferred from the code (Collection type for fields, callbacks without service objects) |
-| filter | no | no filter | specifies the dependency LDAP filter |
-| from | no |  | specifies a specific provider by its name |
-| policy | no | `dynamic` | specifies the binding policy among `dynamic`, `static` and `dynamic-priority`  |
-| nullable | no | true | enables/disables nullable object injection for optional dependencies  |
-| default-implementation // defaultimplementation for annotations | no | | specifies the default-implementation for optional dependencies  |
-| comparator | no | | specifies the comparator class used to sort service providers |
-{center}
-{div}
+<table class="table table-striped">
+  <thead>
+    <tr>
+      <th>Attribute name</th>
+      <th>Required</th>
+      <th>Default value</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+        <td class="confluenceTd"> id </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> field name </td>
+        <td class="confluenceTd"> dependency id </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> field </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> automatically detected with annotations </td>
+        <td class="confluenceTd"> injected field </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> optional </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> false </td>
+        <td class="confluenceTd"> specifies if the dependency if optional </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> aggregate </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> false <br class="atl-forced-newline"> (automatically detected with fields) </td>
+        <td class="confluenceTd"> specifies if the dependency is aggregate of <tt>scalar</tt> </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> specification </td>
+        <td class="confluenceTd"> yes/no </td>
+        <td class="confluenceTd"> can be discovered from the code </td>
+        <td class="confluenceTd"> specifies the required service specification. This attribute is required when the service type cannot be inferred from the code (Collection type for fields, callbacks without service objects) </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> filter </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> no filter </td>
+        <td class="confluenceTd"> specifies the dependency LDAP filter </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> from </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd">&nbsp;</td>
+        <td class="confluenceTd"> specifies a specific provider by its name </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> policy </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> <tt>dynamic</tt> </td>
+        <td class="confluenceTd"> specifies the binding policy among <tt>dynamic</tt>, <tt>static</tt> and <tt>dynamic-priority</tt>  </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> nullable </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd"> true </td>
+        <td class="confluenceTd"> enables/disables nullable object injection for optional dependencies  </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> default-implementation // defaultimplementation for annotations </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd">&nbsp;</td>
+        <td class="confluenceTd"> specifies the default-implementation for optional dependencies  </td>
+    </tr>
+    <tr>
+        <td class="confluenceTd"> comparator </td>
+        <td class="confluenceTd"> no </td>
+        <td class="confluenceTd">&nbsp;</td>
+        <td class="confluenceTd"> specifies the comparator class used to sort service providers </td>
+    </tr>
+    </tbody>
+</table>
+
 * [Service Requirement Handler]({{ refs.service-requirement-handler.path }})
 
 # Using services with method injection
-{code:xml|title=XML}
-<component classname="my.consumer.Implementation">
-    <requires>
-	<callback type="bind" method="bind" />
-	<callback type="unbind" method="unbind" />
-        <callback type="modified" method="modified" /> <!-- for filtered service dependencies, to be notified when a service is modified but still match -->
-    </requires>	
-</component>
+XML:
+
+    :::xml
+    <component classname="my.consumer.Implementation">
+        <requires>
+    	<callback type="bind" method="bind" />
+    	<callback type="unbind" method="unbind" />
+            <callback type="modified" method="modified" /> <!-- for filtered service dependencies, to be notified when a service is modified but still match -->
+        </requires>	
+    </component>
+
+Java:
 
-    {code:java|title=Annotations}
     @Component
     public class Dependency {
     
@@ -272,7 +437,7 @@ Title: iPOJO-Reference-Card
 ## Immediate components
 * A POJO object (implementation object) is created as soons as the instance becomes valid
 * Instances that don't provide services becomes automatically immediate
-{code:xml|title=XML}
+    :::xml
 <component classname="my.service.implementation" name="my-service-impl" immediate="true">
    <provides/>
 </component>
@@ -294,7 +459,7 @@ Title: iPOJO-Reference-Card
 * [Lifecycle Callback Handler]({{ refs.lifecycle-callback-handler.path }})
 
 ## Lifecycle callbacks
-{code:xml|title=XML}
+    :::xml
 <component classname="my.implementation" name="my-impl">
     <callback transition="validate" method="start" />
     <callback transition="invalidate" method="stop" />
@@ -318,7 +483,7 @@ Title: iPOJO-Reference-Card
 * [Lifecycle Callback Handler]({{ refs.lifecycle-callback-handler.path }})
 
 # Declaring properties
-{code:xml|title=XML}
+    :::xml
 <component classname="my.Implementation" name="my-impl">
     <properties propagation="true" managedservice="MyPID">
         <property name="boo" method="setBoo" />
@@ -370,7 +535,7 @@ Title: iPOJO-Reference-Card
 # PostRegistration and PostUnregistration callbacks
 * This feature is part of the provided service handler, and so requires that the component provides a service.
 * The callback receives a `ServiceReference` as parameter.
-{code:xml|title=XML}
+    :::xml
 <component
      classname="...">
     <provides
@@ -393,7 +558,7 @@ Title: iPOJO-Reference-Card
 # Controlling service publication
 * This feature is part of the provided service handler, and so requires that the component provides a service.
 * It allows a component to force the un-publication of a service.
-{code:xml|title=XML}
+    :::xml
 <component
      classname="...">
     <provides>
@@ -434,7 +599,7 @@ arch -handlers => list available handler
  * Service objects can be injected as `proxies` and be given to collaborator objects.
 * Temporal dependencies are implemented as an *external handlers*. To use them, deploy and start the temporal dependency handler bundle.
 
-{code:xml|title=XML}
+    :::xml
 <iPOJO xmlns:temporal="org.apache.felix.ipojo.handler.temporal">
 <component
     className="my.Implementation">
@@ -481,7 +646,7 @@ arch -handlers => list available handler
  * The event admin handler is implemented as an *external handlers*. To use it, deploy and start the event admin handler bundle and an implementation of the event admin service.
  * Event (or data) are receive thanks to a callback method.
 
-{code:xml|title=XML}
+    :::xml
 <ipojo
     xmlns:ev="org.apache.felix.ipojo.handlers.event.EventAdminHandler">
 	<component className="...MyComponent">
@@ -552,7 +717,7 @@ If you use this attribute, the parameter
      * The event admin handler is implemented as an _external handlers_. To use it, deploy and start the event admin handler bundle and an implementation of the event admin service.
      * To send events, your code must contains a {{org.apache.felix.ipojo.handlers.event.publisher.Publisher}} field.
     
-    {code:xml|title=XML}
+        :::xml
     <ipojo
         xmlns:ev="org.apache.felix.ipojo.handlers.event.EventAdminHandler">
     	<component className="...MyComponent">
@@ -619,7 +784,7 @@ public class MyComponent {
  * Allows implementing an `Extender pattern` without handling obscure details
  * The extender pattern handler is implemented as an *external handlers*. To use it, deploy and start the external pattern handler bundle.
 
-{code:xml|title=XML}
+    :::xml
 <ipojo xmlns:extender="org.apache.felix.ipojo.extender">
 	<component
 		classname="org.apache.felix.ipojo.extender.Myextender">
@@ -667,7 +832,7 @@ public class MyComponent {
  * Allows implementing a `Whiteboard pattern` without handling obscure details
  * The whiteboard pattern handler is implemented as an *external handlers*. To use it, deploy and start the whiteboard pattern handler bundle.
 
-{code:xml|title=XML}
+    :::xml
 <ipojo xmlns:wbp="org.apache.felix.ipojo.whiteboard">
      <component 
           classname="org.apache.felix.ipojo.test.MyWhiteBoardPattern"