<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<chapter id="classloaders"
         xmlns="http://docbook.org/ns/docbook"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd"
         version="5.0" xml:lang="en">
    <title>Class loaders</title>
    <para>
        There are several class loaders involved in ServiceMix:
        <itemizedlist>
            <listitem><para>the container class loader</para></listitem>
            <listitem><para>shared library class loader: the parent is the container class loader</para></listitem>
            <listitem><para>component class loader: parents are container class loader and any referenced shared library class loader</para></listitem>
            <listitem><para>service unit class loader: parent is the component class loader</para></listitem>
        </itemizedlist>
    </para>
    <para>
        The container class loader contains: 
        <itemizedlist>
            <listitem><para>JRE</para></listitem>
            <listitem><para><code>/conf</code></para></listitem>
            <listitem><para><code>/lib/*.jar</code></para></listitem>
            <listitem><para><code>/lib/optional/*.jar</code></para></listitem>
        </itemizedlist>
        ServiceMix uses Classworlds to configure a class loader finding path. You can add your own path into the <code>conf/servicemix.conf</code> file.
    </para>
    <para>
        The components class loaders are defined in the JBI specification and contain the jars referenced in the JBI descriptor (<code>META-INF/jbi.xml</code>).
        These class loaders can use a parent-first (default) or self-first delegation. When a class is loaded, the class loader will first ask its parent(s)
        and work back down the class loader hierarchy, or will first load the class from its referenced jars.
    </para>
    <para>
        The service unit class loader contains:
        <itemizedlist>
            <listitem><para><code>/</code></para></listitem>
            <listitem><para><code>lib/*.jar</code></para></listitem>
            <listitem><para><code>lib/*.zip</code></para></listitem>
        </itemizedlist>
    </para>
    <para>
        XBean based service units can define and extend their own class loaders. This can be done by adding the following
        tag in the main XBean configuration file for the service unit (<code>xbean.xml</code>):
<code>
<![CDATA[
<classpath [inverse="true"]>
  [<nonOverridable>xxx</nonOverridable>]*
  [<hidden>xxx</hidden>]*
  [<location>xxx</location>]*
</classpath>
]]>
</code>
    </para>
    <para>
        The <code>inverse</code> attribute can be set to <code>true</code> to use self-first delegation mode.
    </para>
    <para>
        The <code>nonOverridable</code> tag can be used to specify that classes with a name starting with the specified
        string can not be overridden by this class loader (the class loader will always use the parent classes). 
    </para>
    <para>
        The <code>hidden</code> tag is used to hide specific classes (whose name start with the specified string) defined
        by the parent class loader.
    </para>
    <para>
        The <code>location</code> tag can be used to add jars or directories relative to the service unit root to the class
        loader.
    </para>
    <para>
        You can reference shared libraries and components class loaders using:
<code>
<![CDATA[
<classpath [inverse="true"]>
  [<nonOverridable>xxx</nonOverridable>]*
  [<hidden>xxx</hidden>]*
  [<location>xxx</location>]*
  [<library>xxx</library>]*
  [<component>xxx</component>]*
</classpath>
]]>
</code>
        For example, to reference the "cxf" shared libraries and the "servicemix-wsn2005" component in addition to the jars inside
        the SU, you could write:
<code>
<![CDATA[
<classpath>
  <library>cxf</library>
  <component>servicemix-wsn2005</component>
</classpath>
]]>
</code>
    </para>
    <para>
        You can reference external archives using system properties. For example:
<code>
<![CDATA[
<classpath>
  <location>${servicemix.home}/lib/ext/my.jar</location>
</classpath>
]]>
</code>        
    </para>
    <para>
        You can explore and use regexp inside external archives (zip, jar, war, ear). For example:
<code>
<![CDATA[
<classpath>
  <location>jar:file:/path/to/my.ear!/my.jar</location>
  <location>jar:file:/path/to/my.ear!/other*.jar</location>
</classpath>
]]>
</code>        
    </para>
</chapter>