<?xml version="1.0"?>
<!--

 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.

-->

<appendix xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Miscellaneous">
  <title>Miscellaneous</title>

  <section role="h2" xml:id="Java-Broker-Miscellaneous-JVM-Verification">
    <title>JVM Installation verification</title>
    <section role="h2" xml:id="Java-Broker-Miscellaneous-JVM-Verification-Windows">
      <title>Verify JVM on Windows</title>
      <para> Firstly confirm that the JAVA_HOME environment variable is set correctly by typing the
        following at the command prompt: </para>
      <programlisting>echo %JAVA_HOME%</programlisting>
      <para> If JAVA_HOME is set you will see something similar to the following: </para>
      <screen>c:"\PROGRA~1"\Java\jdk1.7.0_79\
      </screen>
      <para> Then confirm that a Java installation (1.7 or higher) is available: </para>
      <programlisting>java -version</programlisting>
      <para> If java is available on the path, output similar to the following will be seen: </para>
      <screen>java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)</screen>
    </section>

    <section role="h2" xml:id="Java-Broker-Miscellaneous-JVM-Verification-Unix">
      <title>Verify JVM on Unix</title>
      <para> Firstly confirm that the JAVA_HOME environment variable is set correctly by typing the
        following at the command prompt: </para>
      <programlisting>echo $JAVA_HOME</programlisting>
      <para> If JAVA_HOME is set you will see something similar to the following: </para>
      <screen>/usr/java/jdk1.7.0_80
      </screen>
      <para> Then confirm that a Java installation (1.7 or higher) is available: </para>
      <programlisting>java -version</programlisting>
      <para> If java is available on the path, output similar to the following will be seen: </para>
      <screen>java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)</screen>
    </section>
  </section>
  <section role="h2" xml:id="Java-Broker-Miscellaneous-Installing-External-JDBC-Driver">
    <title>Installing External JDBC Driver</title>
    <para>In order to use a JDBC Virtualhost Node or a JDBC Virtualhost, you must make the
      Database's JDBC 4.0 compatible drivers available on the Broker's classpath. To do this copy
      the driver's JAR file into the <literal>\${QPID_HOME}/lib</literal> folder.</para>
    <programlisting>Unix:
cp <literal>driver</literal>.jar qpid-broker-${project.version}/lib</programlisting>

    <programlisting>Windows:
copy <literal>driver</literal>.jar qpid-broker-${project.version}\lib</programlisting>
  </section>

  <section role="h2" xml:id="Java-Broker-Miscellaneous-Installing-Oracle-BDB-JE">
    <title>Installing Oracle BDB JE</title>
    <para> The Oracle BDB JE is not distributed with Apache Qpid owing to license considerations.. </para>
    <para>If you wish to use a BDB Virtualhost Node, BDB Virtualhost, or BDB HA Virtualhost Node you
      must make the BDB JE's JAR available on the Broker's classpath. </para>
    <para> Download the Oracle BDB JE ${bdb-version} release <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${oracleJeDownloadUrl}">from the Oracle website.</link>
    </para>
    <para> The download has a name in the form je-${bdb-version}.tar.gz. It is
      recommended that you confirm the integrity of the download by verifying the MD5. </para>
    <para>Copy the je-${bdb-version}.jar from within the release into
        <literal>\${QPID_HOME}/lib</literal> folder.</para>

    <programlisting>Unix:
cp je-${bdb-version}.jar qpid-broker-${project.version}/lib</programlisting>

    <programlisting>Windows:
copy je-${bdb-version}.jar qpid-broker-${project.version}\lib</programlisting>

  </section>







</appendix>
