<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<book xmlns:xi="http://www.w3.org/2001/XInclude">
  <bookinfo>
    <title>Eclipse Gemini Blueprint</title>
	
    <subtitle>Frequently Asked Questions</subtitle>
    <releaseinfo>&version;</releaseinfo>

    <authorgroup>
      <author>
        <firstname>Costin</firstname>
        <surname>Leau</surname>
        <affiliation>SpringSource</affiliation>
      </author>
    </authorgroup>

    <legalnotice>
      <para>Documentation made available under the terms of the Eclipse Public License v1.0 
      and Apache License v2.0 which accompanies this distribution. 
      The Eclipse Public License is available at <ulink url="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</ulink> and 
      the Apache License v2.0 is available at <ulink url="http://www.opensource.org/licenses/apache2.0.php">http://www.opensource.org/licenses/apache2.0.php</ulink>.
      You may elect to redistribute this code under either of these licenses.</para>
    </legalnotice>
    
    <copyright>
      <year>2006 -</year>
      <year>2011</year>
      <holder>VMware Inc.</holder>
      <holder>Oracle Inc.</holder>
    </copyright>
    
  </bookinfo>

  <toc />

  <chapter id="spring-osgi-faq">
    <title>Frequently Asked Questions</title>

   <section id="eclipse-springdm">
      <title>What's the relationship between Spring Dynamic Modules and Gemini Blueprint?</title>

        <para>Eclipse Gemini Blueprint is based on Spring Dynamic Modules 2.0 which has been migrated
        to the Eclipse Foundation. While the name and the packages have changed the internals are still the same; one
        will find both names are used interchangeably (especially by those that have used Spring DM for a while).
        Further more, all Spring DM applications are supported by Gemini Blueprint (do pay attention to the migration guide available
        <ulink url="http://www.eclipse.org/gemini/blueprint/documentation/migration/">here</ulink>).</para>
	</section>

   <section id="name-change">
      <title>What happened to "Spring OSGi" project name?</title>

        <para>The OSGi term is a trademark belonging to <ulink
        url="http://www.osgi.org/">The OSGi Alliance</ulink>. In order to
        comply with their guidelines, it was decided that the project name 
        be changed to "Spring Dynamic Modules for OSGi Service Platforms" 
        (aka Spring DM). The new name is still pending final approval 
        by the OSGi Alliance. 
        The name change was the result of an amicable discussion between 
        the OSGi Alliance and Interface21. Interface21 is a member of the 
        OSGi Alliance, and the OSGi	Alliance remain very supportive of 
        the project.
        Note that Spring Dynamic Modules has moved to Eclipse Foundation to form Gemini Blueprint project (see above)</para>
	</section>
	
	<section id="internal-package">
      <title>Why aren't there any javadocs on <literal>*.internal.*</literal>?</title>

        <para><literal>org.eclipse.gemini.blueprint.*.internal</literal> packages are
        meant (as the name implies) to be private and non-public package. Thus,
        there is no documentation, support or compatibility guarantee for
        them. In fact, the Gemini Blueprint bundle does not even export
        them to prevent accidental usage.</para>

        <para>If you find classes under this package, which you really, really
        depend on, then consider raising an issue on <ulink type=""
        url="http://opensource.atlassian.com/projects/spring/browse/OSGI">JIRA</ulink>
        to have access opened up.</para>
	</section>
	
	<section id="requirements">
	  <title>What are Gemini Blueprint requirements?</title>
	  <para>
	    Gemini Blueprint requires at least Java 1.7, OSGi 4.1+ and Spring 4.2
	    It might be possible to use Gemini Blueprint on a lower <ulink 
	    url="http://wiki.eclipse.org/index.php/Execution_Environments">execution environment</ulink>
	    (such <ulink url="http://java.sun.com/products/cdc/">CDC</ulink>) but 
	    it is not guaranteed to work.
	    Both Spring and Gemini Blueprint rely on <ulink url="http://java.sun.com/products/javabeans/">
	    JavaBeans</ulink> (java.beans package) which, unfortunately, is missing in most 
	    restricted environments. See this <ulink url="http://java.sun.com/products/cdc/reference/cdc_packages.pdf" 
	    type="application/pdf">PDF</ulink> for information on CDC profiles.
	    Note that, Spring 4.2 also requires Java 1.7.
	  </para>
	  <para>
	    Nevertheless, experiences and feedback on running Gemini Blueprint in restricted environments 
	    is welcomed - please use our mailing list.
	  </para>
    </section>

	<section id="other-module-frameworks">
	  <title>Are there plans to support other dynamic module frameworks (such as the JSR 277 extensions in Java 7)?</title>
	  <para>There are no current plans to support other dynamic module frameworks.</para>
	</section>
	
	<section id="restricted-environments">
	  <title>Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</title>
	  <para>See the <link linkend="requirements">requirements</link> entry. The OSGi Service Platform is designed to run in 
	  very constrained environments however, Gemini Blueprint depends on the Spring Framework v4.2.x which in turn depends on
	  JDK 1.7. Thus Gemini Blueprint cannot run on more constrained environments (such as the OSGi Minimum Execution Environment)
	  unless Spring itself also runs in those environments. There are no current plans to make such a version of Spring. 
	  However as existing OSGi developers adopt Gemini Blueprint to simplify creation of OSGi applications and the user
	  base expands, the target audience can cover domains much broader than <emphasis>enterprise Java applications</emphasis>. 
	  In time this could create a large enough demand to justify the investment needed to allow Spring and Gemini Blueprint to run in
	  restricted environments.</para>
	</section>

 

    <section id="supported-osgi-platforms">
	  <title>What OSGi platforms are supported?</title>
	  <para>
	  Gemini Blueprint requires an OSGi 4.2 (though it might work on OSGi 4.0 and 4.1) platform. The framework has been tested
	  on <ulink url="http://www.eclipse.org/equinox/">Equinox</ulink>, <ulink url="http://felix.apache.org">Felix</ulink> 
	  and <ulink url="http://www.knopflerfish.org/">Knopflerfish</ulink> 
	  - in fact, the test suite is <ulink url="http://build.springframework.org:8085/bamboo/browse/OSGI">ran</ulink> 
	  against all of them as part of our continuous integration process.
	  </para>
	</section>
	
	
	<section id="osgi-intro">
	  <title>Where can I learn about OSGi?</title>
	  <para>
	   The best place to start is The Osgi Alliance <ulink url="http://www.osgi.org/">home</ulink> and 
	   <ulink url="http://www2.osgi.org/Main/HomePage">developer</ulink> pages which
	   provide the OSGi specifications, introductions and many links and blogs on the topic.
	   Please see the reference documentation appendix for more information.
 	  </para>
	  
	  <para>
	   In addition, all OSGi implementation websites host detailed, step-by-step tutorials and introduction.
	  </para>
	  
	  <para>   
	   If you discover any additional materials useful for OSGi newbies, please let us know to update the list.
	   Thank you.
	  </para>
	</section>
	
	<section id="building-the-sources">
      <title>I have problems building the sources. What can I do?</title>
      <para>Please see the file called <literal>readme-building.txt</literal> found in the source tree.
      </para>
    </section>
    <!--
	<section id="backport-util-concurrent">
	  <title>I get an exception about backport-util-concurrent library being required. Why is that?</title>

        <para>This exception is thrown only when running on Java 1.4 
        without backport-util-concurrent bundle installed.
        </para>
        <para>
        OSGi platform is a concurrent environment. Beans from different
        application contexts can interact with each other creating cycles 
        between their owning contexts. This means that the backing
        contexts have to be able to lookup and create/retrieve bean instances,
        all at the same time, on multiple threads. A traditional synchronised
        collection allows proper locking and thread coordination and prevents
        race conditions, but can cause very easily deadlocks.</para>

        <para>Consider two contexts each containing two beans: <mediaobject>
            <imageobject role="fo">
              <imagedata align="center"
                         fileref="src/docbkx/resources/images/deadlock.png"
                         format="PNG"/>
            </imageobject>

            <imageobject role="html">
              <imagedata align="center" fileref="images/deadlock.png"
                         format="PNG"/>
            </imageobject>

            <caption>
              <para>Inter-application context bean interaction</para>
            </caption>
          </mediaobject></para>

        <para>If both bean A and C are requested by two separate threads at
        the same time, this scenario will deadlock since each thread waits for
        the other one to release the "bean registry" lock even just for
        reading. However, when using a concurrent collection, reading doesn't
        require a lock so each thread can interact with the other context
        without waiting for a lock. Java 1.5 and upwards provide <ulink
        url="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html">concurrent
        collections</ulink> under <literal>java.util</literal> package.
        However, since Java 1.4 does not, <ulink
        url="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/">backport-util-concurrent</ulink>
        library is required.</para>
      </section>
    -->

      
      <section id="logging">
        <title>How can I use logging in OSGi?</title>

        <para>OSGi platforms do not change the way libraries work, it just
        enforces tighter classloading. Thus, you can, in most of the cases,
        use the same logging strategy used in non-OSGi environments.</para>

        <para>Spring (and Gemini Blueprint) use internally the <ulink
        url="http://commons.apache.org/logging/">commons-logging API</ulink>
        which acts as an "ultra-thin bridge between different logging
        implementations". In OSGi, just like in a non-OSGi environment, Spring
        and Gemini Blueprint delegate all logging (including initialisation) to the
        actual commons-logging API implementation.</para>

        <para>Out of the box, <ulink url="http://www.slf4j.org/">SLF4J</ulink> library is provided, which
        shares the same purpose as commons-logging but without the
        class loading discovery mechanism (that causes loading issues), using
        static wiring (see the SLF4J site for more info). To use slf4j, make sure
        you use: <literal>slf4j-api-XXX.jar</literal>, <literal>jcl104-overslf4j-XXX.jar</literal>
        and <literal>slf4j-log4j-XXX.jar</literal> (where XXX stands for the slf4j version).
        The last jar provides the static wiring between slf4j and log4j - if another implementation
        is desired (such as jdk14), then a different jar is required (for the jdk14 that would be
        slf4j-jdk14-XXX.jar) - see the official SLF4J site for more information.
        Please see <link linkend="commons-logging">this
        question</link > for more details on why commons-logging jar is not
        used.</para>

        <para>Gemini Blueprint uses SLF4J on top of <ulink
        url="http://logging.apache.org/log4j/">Log4J</ulink> but this can be
        easily changed. As part of log4j initialisation, a
        <literal>log4j.properties</literal> or <literal>log4j.xml</literal>
        configuration fille needs to be present in the bundle classpath. This
        means that the configuration file has to be part of your bundle or one
        of its attached fragments. Besides SLF4J, for another OSGi-aware
        solution, one can try <ulink
        url="http://wiki.ops4j.org/dokuwiki/doku.php?id=pax:logging">Pax
        Logging</ulink>.</para>

        <para>To learn more about log4j setup process, follow this <ulink
        type=""
        url="http://logging.apache.org/log4j/1.2/manual.html">link</ulink>.</para>
      </section>

      <section id="commons-logging">
        <title>If you use the commons-logging API, why rely on SLF4J and
        not the commons-logging jar?</title>

        <para>The commons-logging project provides the commons-logging API
        (<literal>commons-logging-api-nn.jar</literal>) along with an
        implementation (<literal>commons-logging-adapters-nn.jar</literal>)
        that provides a wrapper between the API and the actual logging libraries
        used underneath (such as log4j, java.util.logging, etc). However, in
        order to determine what implementation should be used, commons-logging
        library tries to do some classloading-based discovery that is fragile
        and can fail unexpectedly. In an strict classloading environment such
        as OSGi, this mechanism adds unnecessary complexity - that's why we
        decided to use SFL4J which is not just simpler and actively maintained
        but is also OSGi-friendly out of the box.</para>

        <para>For more information about commons-logging classloading
        problems, see these links: <ulink
        url="http://radio.weblogs.com/0122027/2003/08/15.html">#1</ulink>
        <ulink
        url="http://www.qos.ch/logging/thinkAgain.jsp">#2</ulink></para>
      </section>
      
      <section id="getting-commons-logging-to-work">
        <title>I have to use commons-logging, what can I do?</title>

        <para>If you have to use commons-logging (for example the jar is required by certain bundles)
        then try using the most recent version commons-logging version (1.1+) as it provides more options
        on the discovery process. Below are some settings that can be used to make commons-logging work
        inside an OSGi environment:</para>
        
        <itemizedlist>
          <listitem>
          	<para>1.0.x</para>
          	<para>
          	Unfortunately, commons-logging 1.0.x uses the thread context class loader (TCCL) always for <ulink 
          	url="http://commons.apache.org/logging/commons-logging-1.1/tech.html#A_Short_Theory_Guide_To_JCL">loading
          	loggers</ulink> implementations. Inside an OSGi environment, the TCCL is undefined and cannot be relied upon.
          	Since managing the TCCL is almost impossible as most loggers are defined as static fields that need to
          	resolved on class loading, using a different <classname>LogFactory</classname> is advised. One can use
          	the <emphasis>org.apache.commons.logging.LogFactory</emphasis> system property to specify a different
          	log factory however, the commons-logging bundle should be able to load this class.</para>
          </listitem>
          <listitem>
          	<para>1.1.x</para>
          	<para>If using commons logging 1.1.x, one can turn off the tccl usage through <emphasis>use_tccl</emphasis>
          	property, part of the <emphasis>commons-logging.properties</emphasis> file.
          	<ulink url="http://commons.apache.org/logging/commons-logging-1.1/troubleshooting.html"/>. Additionally,
          	1.1.x provides several system properties (such as <emphasis>org.apache.commons.logging.Log.allowFlawedContext</emphasis>,
          	<emphasis>org.apache.commons.logging.Log.allowFlawedDiscovery</emphasis> and 
          	<emphasis>org.apache.commons.logging.Log.allowFlawedHierarchy</emphasis>) that can change the behavious of the discovery process.
          	See the <ulink url="http://commons.apache.org/logging/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html">LogFactoryImpl</ulink>
          	javadoc for more details.</para>
          </listitem>
        </itemizedlist>
         
        <para>In our tests, commons logging 1.1.x can be used with reasonable success inside OSGi. We haven't been able to find a generic
        configuration for commons logging 1.0.x that works and that does not rely on fragile hacks dependent on the running environment.</para>
        
      </section>

      <section id="logging-impl-choice">
        <title>Why don't you use the OSGi logging service/[insert your favourite
        logging library in here]?</title>

        <para>It is completely up to you what logging implementation you want
        Gemini Blueprint to use. To route log messages to the OSGi logging service, 
        just use a commons-logging API implementation that delegates to the 
        OSGi logging service, such as Pax Logging.</para>
      </section>
      
      
      <section id="osgi-wrapping">
        <title>I have to use [insert name] library/framework inside. What can I do?</title>
        
          <para>
          OSGi requires JARs to contain certain <literal>MANIFEST.MF</literal> entries which indicate what classes are 
          required and shared by each archive. This means that <emphasis>tradition</emphasis> jars cannot be used inside an OSGi environment. 
          To solve the problem one can:
          </para>
          <itemizedlist>
          	<listitem>
          	  <para>Use a repository of pre-wrapped libraries such as <ulink url="http://www.eclipse.org/orbit/">Orbit</ulink>,
          	  <ulink url="http://felix.apache.org/site/apache-felix-commons.html">Felix Commons</ulink> or Knopflerfish <ulink 
          	  url="http://www.knopflerfish.org/repo/index.html">repository</ulink>.
          	  Gemini Blueprint uses the SpringSource Enterprise <ulink url="http://www.springsource.com/repository/app/">Bundle Repository</ulink> 
          	  for its dependencies, which you might find useful. Additionally, for artifacts that have not yet made it into SpringSource Repository,
          	  Gemini Blueprint provides a small, temporary (Amazon S3) 
          	  Maven repository (<ulink url="http://s3.amazonaws.com/maven.springframework.org/osgi">link</ulink> | 
          	  <ulink url="http://s3browse.com/explore/maven.springframework.org/osgi/">browser-friendly link</ulink>) for its internal usage.</para> 
          	</listitem>
          	<listitem>
          	  <para>Wrap the necessary jars with proper OSGi manifest. While this can be done by hand, we strongly recommend Peter Kriens
          	  excellent <ulink url="http://www.aqute.biz/Code/Bnd">bnd</ulink> tool which can do this for you automatically.
          	  For Maven, see Felix <ulink url="http://felix.apache.org/site/maven-bundle-plugin-bnd.html">
          	  maven-bundle-plugin</ulink>.
          	  </para> 
          	</listitem>
          	<listitem>
          	  <para>Include the jar inside your OSGi bundle and include it in the bundle classpath through <emphasis>Bundle-ClassPath</emphasis>
          	  directive. See the OSGi specification for more information.</para>
          	</listitem>
          </itemizedlist>
	  </section>
	  
	  <section id="jdk-crippled-jta-api">
          <title>I keep getting <emphasis>java.lang.NoClassDefFoundError: javax/transaction/...</emphasis> when trying to do data access..</title>
        
          <para>
          This problem is likely to be caused by bad class wiring. All 1.3+ JDKs include incomplete <emphasis>javax.transaction</emphasis> 
          and <emphasis>javax.transaction.xa</emphasis> packages for usage inside ORB environments. To address the problem, use a proper
          JTA library which contains all the classes from the forementioned packages and exports them with a specific version to prevent
          confusion.
          </para>
          <para>
          Gemini Blueprint wraps JTA 1.1 library for OSGI environments which can be found at Spring snapshot repository. One can deploy this library
          and specify version 1.1 for <emphasis>javax.transaction*</emphasis> packages inside <emphasis>Import-Package</emphasis> header.
          By specifying the version, one can be sure that the proper package is used.
          </para>
          <para>
          Note that JTA 1.1 is compatible with version 1.0.1.
          </para>
	  </section>
	  
	  <section id="incomplete-osgi-jar">
	  	 <title>When doing integration testing I receive <emphasis>java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set</emphasis>... </title>
	  	 
	  	 <para>Remove the official OSGi jars (osgi.jar or osgi-r4-core.jar) from the classpath and use only the actual OSGi platform (Equinox/Knopflerfish/Felix) 
	  	 jars. The former provides only the public classes without an actual implementation and thus cannot be used during runtime, only during the compilation stage.
	  	 </para>
	  </section>
      <!-- this should be part of an OSGi intro more likely -->

      <section id="auto-export-visibility">
        <title>The autoExport option doesn't work properly!</title>

        <para>autoExport flag, part of the service exporter, will discover and
        include for exporting only the <emphasis>visible</emphasis> interfaces/classes implemented
        by the service object. Consider class
        <literal>GenericApplicationContext</literal> which implements among
        others, interfaces <literal>BeanFactory</literal> (from
        <literal>org.springframework.beans.factory</literal> package) and
        <literal>ResourceLoader</literal>
        (<literal>org.springframework.core.io</literal>).</para>

        <para>
          <mediaobject>
            <imageobject role="fo">
              <imagedata align="center"
                         fileref="src/docbkx/resources/images/visibility.png"
                         format="PNG"/>
            </imageobject>

            <imageobject role="html">
              <imagedata align="center" fileref="images/visibility.png"
                         format="PNG"/>
            </imageobject>

            <caption>
              <para>Class Hierarchy</para>
            </caption>
          </mediaobject>
        </para>

        <para>Depending on your OSGi imports, the exporting bundle can see
        only one of the packages, none or both. Based on these visibility
        settings, the exporter will only export the classes that are 'known'
        to the exporting bundle. For example, if the exporting bundle sees
        <literal>org.springframework.core.io</literal> but not
        <literal>org.springframework.beans.factory</literal>, the service will
        be exported as a <literal>ResourceLoader</literal> but not as a
        <literal>BeanFactory</literal>. In fact, exporting the object as a
        <literal>BeanFactory</literal> will fail since the bundle doesn't see
        this interface and thus doesn't know how to handle its contract.</para>
      </section>
      
      <section id="junit382-serialization">
      	<title>When using Gemini Blueprint integration testing I get an exception about serialVersionUID. What is the problem?</title>
      	
      	<para>
      	This problem occurs on Spring DM versions up to 1.0 - consider upgrading to 1.0.1 or better. If you are stuck with 1.0 see below.
      	When running an integration test, Gemini Blueprint will duplicate the test instance and execute it inside OSGi. To avoid problems
      	like this one, make sure you are using the same libraries (with the same version) as Spring DM when running your test. This
      	particular problem for example is caused by a JUnit 3.8.2 vs 3.8.x serialization compatibility. Make sure that you are using
      	at least JUnit 3.8.2 for the execution of your tests. 
      	</para>
      </section>
      
      <section id="pde-errors">
      	<title>I'm using Eclipse PDE and I started getting some weird exceptions/behaviour. What's the matter?</title>
      	
      	<para>
      	Eclipse PDE uses Equinox OSGi platform underneath which (like other OSGi platforms) caches the bundles between re-runs. When
      	the cache is not properly updated, one can encounter strange behaviour (such as the new services/code being picked up)
      	or errors ranging from class versioning to linkage. Consider doing a complete clean build or, in case of Eclipse, 
      	creating a new workspace or deleting the bundle folder (depends on each project settings but most users should find it at:
      	<code>[workspace_dir]\.metadata\.plugins\org.eclipse.pde.core\OSGi\org.eclipse.osgi\bundles</code>).
      	</para>
      </section>
      
     <section id="upgrade-to-1.1">
      	<title>I'm upgrading to Spring DM 1.1 but now I get some ClassNotFoundExceptions. What has changed?</title>
      	
      	<para>
      	In Spring DM 1.1 M2, the proxy infrastructure has been refined to avoid <emphasis>type leaks</emphasis>, the usage of dynamic imports
      	or exposure of class loader chain delegation. If you encounter class visibility problems during the upgrade then it's likely you have
      	missing imports which were previously resolved as a side effect of Spring DM proxy weaving process. 
      	</para>
     </section>
      
     <section id="proxy-equality">
     	<title>I've noticed that objects imported by Gemini Blueprint are not always equal to the raw target service. Why is that?</title>
     	
     	<para>
     	To deal with dynamics, Gemini Blueprint creates proxies around the imported services. The proxies are classes (generated at runtime), different
     	from the target but able to intercept the calls made to it. Since a proxy is different then its target, comparing objects against it can 
     	yield different results then when the comparison is done against the target. In most scenarios this is not a problem but there might be 
     	corner cases where this contract matters. Since 1.1, Gemini Blueprint importer proxies implement <interfacename>InfrastructureProxy</interfacename> 
     	interface (from Spring framework) which allow access to the raw target.
     	</para>
     </section>
     <section id="static-collections">
     	<title>My Gemini Blueprint collection doesn't change even though the number of OSGi service changes. What's wrong?</title>
     	
     	<para>
     	Make sure the Gemini Blueprint collections are injected into object of compatible types (for example <literal>list</literal> into 
     	<interfacename>java.util.List</interfacename> or <interfacename>java.util.Collection</interfacename>). If the types are not compatible,
     	the container will have to perform 
     	<ulink url="http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion">type conversion</ulink>,
     	transforming the Gemini Blueprint managed collection into a 'normal' one, unaware of the OSGi dynamics.
     	</para>
     </section>
     
     <section id="update-to-1.2">
     	<title>I have upgraded to Gemini Blueprint but my custom extender/web extender configuration doesn't work anymore. What has changed?</title>
     	
     	<para>Since Spring 2.5.6, the symbolic names of the artifacts have changed slightly. Spring DM/Gemini Blueprint aligned its symbolic names as well with the 
     	new patter since Spring DM 1.2.0 M2. Thus the prefix <literal>org.springframework.bundle.osgi</literal> has been changed to 
     	<literal>org.eclipse.gemini.blueprint</literal>; for example Gemini BLueprint extender symbolic name was changed from 
     	<literal>org.springframework.bundle.osgi.extender</literal> to <literal>org.eclipse.gemini.blueprint.extender</literal> 
		(notice the missing <literal>bundle</literal> word).
		To fix this problem, change the reference to the old symbolic name (usually inside the fragments manifests or LDAP filters) to the new one.</para>
     </section>
     <section id="linkage-error">
     	<title>I get a <literal>java.lang.LinkageError: loader constraint violation</literal> if I use Gemini Blueprint. Things work fine with vanilla OSGi. 
     	What's wrong?</title>
     	
     	<para>Most likely the bundle imports do not identify all the transitive packages dependencies (through the <emphasis>uses</emphasis> directive). Packages
     	imported from a bundle, can in turn, depend on other packages from other bundles - these are sometime called transitive or indirect dependencies. If
     	these are not properly identified, the OSGi platform cannot validate the wiring and allows multiple versions of the same class to be available inside the
     	same class space. This problem appears whether Gemini Blueprint is used or not. However, due to the usage of proxies inside Gemini Blueprint (which forces eager class loading
     	for the classes proxies), the class graph is evaluated at runtime causing the problem to occur early. With vanilla OSGi, the loading occurs lazy which means
     	the problem is going to occur at runtime rather then at startup.
     	To fix the problem, add the relevant transitive packages to the list of exported packages, either manually or automatically through tools such as  
     	<ulink url="http://www.springsource.org/bundlor">Bundlor</ulink> or <ulink url="http://www.aqute.biz/Code/Bnd">Bnd</ulink>.
     	For more information on the <literal>uses</literal> directive please see the OSGi spec, 
     	section	3.6.4 or <ulink url="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/">this</ulink> SpringSource blog entry.
     	</para>
     </section>
     
     <section id="blueprint">
     	<title>What can I use Gemini Blueprint with the Blueprint Container spec? What's the relationship between the two? Are the they compatible?
     	Are there any differences?</title>
     	
     	<para>Gemini Blueprint (Spring DM 2.0) is the Reference Implementation for OSGi 4.2 Blueprint Container specification. Simply deploy your Blueprint bundles in a platform
     	where Gemini Blueprint is already activated and you should be done. For more information about Blueprint and Gemini Blueprint, please see the 
     	<emphasis>Blueprint Container</emphasis> chapter in the reference documentation.</para>
     </section>
     
     <section id="kf-2.3-boot-delegation">
     	<title>I'm using Knopflerfish 2.3.x and I have a lot of visibility exception. How can I fix this?</title>
     	
     	<para>Since 2.3.0, Knopflerfish changed the way it does bootpath delegation which causes classes to be loaded from inside and outside OSGi. Set
     	the system property <literal>org.knopflerfish.framework.strictbootclassloading</literal> to <literal>true</literal> before starting up the Knopflerfish
     	platform to prevent this from happening. See Knopflerfish 2.3.x release <ulink url="http://www.knopflerfish.org/release_notes_2.3.html">notes</ulink> for more
     	information.</para>
     </section>
     <section id="pde-cycles">
     	<title>I'm using Gemini Blueprint and Spring jars inside Eclipse PDE but I get an error about cycle dependency errors. What's wrong?</title>
     	
     	<para>Some of the Spring jars (optionally) import each other packages for bootstrapping reasons. While cycles between jars are allowed and
     	supported by the OSGi platform, by default, Eclipse PDE complains about them. Since Eclipse Galileo, it is possible to enable binary cycles
     	in a target platform. allowing the build to compile. For more information, see 
     	<ulink url="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm">this</ulink> 
     	entry from the Eclipse Reference Guide.</para>
     </section>          
    </chapter>
</book>