<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> 
<!--
  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.
  Architecture
-->
<html lang="en">
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <meta content="ActiveMQ's next generation of messaging" name="description"/>
    <meta content="messaging,stomp,jms,activemq,apollo" name="keywords"/>
    <meta content="Apollo" name="author"/>
    <script src="../scripts/jquery.js"></script>
    <link type="text/css" rel="stylesheet" href="../styles/impact/css/pygmentize.css"/>
    <link type="text/css" rel="stylesheet" href="../styles/impact/css/site.css"/>
    <title></title>
  </head>
  <body>
    <div id="navigation">
      <div class="wrapper">
<ul>
<li><a href="../index.html">Apollo 1.7.1</a></li>
<li><a href="../community/developers.html">Developers</a></li>
<li><a href="../community/index.html">Community</a></li>
<li><a href="../download.html">Download</a></li>
</ul>        <div></div>
      </div>
    </div>
    <div id="content">
      <div class="wrapper">
<h1 id = "Version_Migration_Guide">Version Migration Guide</h1>

<h2 id = "Overview">Overview</h2>

<p>This guide helps you migrate to a new Apollo version and perserve
the message data stored in the previous version of the Apollo broker.
This guide assumes you are only using a single virtual host in your 
configuration.</p>

<h2 id = "Standard_Migration_Steps">Standard Migration Steps</h2>

<p>You should first check to see if a &ldquo;data export/import&rdquo; is required 
by consulting the <a href="#Migration&#95;Notes">Migration Notes</a> section
at the end of this docuemnt.</p>

<ol>
<li><p>Stop your broker instance.</p></li>
<li><p>If a data export/import is required then export your 
broker instance data to an archive file by running:</p>

<pre><code>${broker-path}/bin/apollo-broker store-export /tmp/broker-export.tgz</code></pre>

<p>Then move your old data directory out of the way by running:</p>

<pre><code> mv ${broker-path}/data /tmp/broker-data</code></pre></li>
<li><p>Install your new apollo version.  Since Apollo packages include the version
in thier insallation directroy you should be able to unpack it to same
directory your previous vesion was unpack into.</p></li>
<li><p>Switch yout broker instance to use the new Apollo version by editing
the <code>${broker-path}/bin/apollo-broker</code> script and changing the line 
that sets the <code>APOLLO_HOME=</code> variable.  Set it to the location of
where the new version is installed.</p></li>
<li><p>If a data export/import is required then import your 
broker instance data from the archive by running:</p>

<pre><code>${broker-path}/bin/apollo-broker store-import /tmp/broker-export.tgz</code></pre></li>
<li><p>Start your broker.</p></li>
</ol>

<h2 id = "Migration_Notes">Migration Notes</h2>

<ul>
<li><strong>1.0 &rarr; 1.1</strong> : A data export/import is required if your using a LevelDB store.</li>
</ul>
        <div></div>
      </div>
    </div>
  </body>
</html>
