<% import org.apache.servicemix.documentation.Helper._ %>
<% attributes("title") = "Home" %>
<% attributes("navigation") = false %>
<% attributes("style") = uri("/theme/picker.css") %>
<div id="bookpicker">

<div class="left">
  <a href="quickstart/index.html">
    <h2>Quickstart Guide</h2>
  </a>
</div>

<div class="right">
  <p>If you're new to Apache ServiceMix, this document will guide you in your first steps in Apache ServiceMix.</p>
  <% if (sitegen(engine)) { %>
    <div class="pdf">
      <a href="quickstart/quickstart.pdf" class="pdf">PDF document</a>
    </div>
  <% } %>
</div>

<div class="left">
  <a href="user/index.html">
    <h2>User Guide</h2>
  </a>
</div>

<div class="right">
  <p>Apache ServiceMix contains a lot of different components and it embeds a lot of other Apache projects.  This user guide will help you select and configure the right components when building your own solution.</p>
</div>

<div class="left">
  <a href="activemq/index.html">
    <h2>ActiveMQ Guide</h2>
  </a>
</div>

<div class="right">
  <p>Apache ServiceMix embeds Apache ActiveMQ to provide a JMS message broker that you can interact with from your Camel routes, providing support for message persistence, clustering, failover, ...</p>
</div>

<div class="left">
  <a href="camel/index.html">
    <h2>Camel Guide</h2>
  </a>
</div>

<div class="right">
  <p>Apache Camel is a core component of Apache ServiceMix.  This guide will show you how to build and deploy Camel routes for Apache ServiceMix.</p>
  <% if (sitegen(engine)) { %>
    <div class="pdf">
      <a href="camel/camel-guide.pdf" class="pdf">PDF document</a>
    </div>
  <% } %>
</div>

<div class="left">
  <a href="nmr/index.html">
    <h2>NMR Guide</h2>
  </a>
</div>

<div class="right">
  <p>The NMR is a lightweight mechanism for communicating between Camel routes and CXF endpoints.  It also provides listener interfaces to learn about exchanges and endpoints at runtime.</p>
  <% if (sitegen(engine)) { %>
    <div class="pdf">
      <a href="nmr/nmr-guide.pdf" class="pdf">PDF document</a>
    </div>
  <% } %>
</div>

<div class="left">
  <a href="jbi/index.html">
    <h2>JBI Guide</h2>
  </a>
</div>

<div class="right">
  <p>Information about the JBI (Java Business Integration) support in Apache ServiceMix and a description for all the JBI components.</p>
  <% if (sitegen(engine)) { %>
    <div class="pdf">
      <a href="jbi/jbi-guide.pdf" class="pdf">PDF document</a>
    </div>
  <% } %>
</div>

<div class="left">
  <a href="karaf/index.html">
    <h2>Karaf Manual</h2>
  </a>
</div>

<div class="right">
  <p>Apache ServiceMix uses Apache Karaf as the underlying OSGi server runtime.  This manual will explain the features and functionality provided by Karaf.</p>
</div>

<div class="left">
  <a href="commands/index.html">
    <h2>Command Reference</h2>
  </a>
</div>

<div class="right">
  <p>Help pages for all the available commands in the Apache ServiceMix console.</p>
</div>

<div class="left">
  <a href="commercial.html">
    <h2>Commercial Guides</h2>
  </a>
</div>

<div class="right">
  <p>Documentation from commercial providers and books you can buy.</p>
</div>
</div>

<div class="clearing"></div>