<!--
 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.   
-->

<!-- This HTML uses Frames for navigating the manual from TOC easier         --> 
<!-- The BASE TARGET frame is named 'display'. The same moniker appears in   -->
<!-- manual-xhtml-chunk.xsl parameter 'html.base'.                           -->
<!-- That XSL parameter introduces a &lt;base href="display&gt; tag in the   -->
<!-- &lt;head&gt; section of the generated TOC index.html. As I do not know  -->
<!-- how to tweak xsl parameter to introduce a &lt;base target="display"&gt; -->
<!-- a small hack in pom.xml replaces 'base href' token to 'base target'     -->
<!-- in the generated TOC index.html.                                        -->
<HTML>
<HEAD> 
   <BASE TARGET="display">
   </BASE>
</HEAD> 
<FRAMESET COLS="30%,70%">
   <FRAME NAME="navigator" SRC="index.html">
   <FRAME NAME="display"   SRC="openjpa_intro.html">
</FRAMESET>
<NOFRAMES>
   Please click <A HREF="index.html">here</A> for OpenJPA documentation because
   this browser does not support frames.
</NOFRAMES>
</HTML>