<!--
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.
-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="keywords" content="JPA, OpenJPA, OpenBooks, Sample, Criteria, MetaModel">
<style type="text/css">
body {
background-color:#FFFFFF;
font-family:"Tahoma";
}
h1 {
color:black;
text-align:center;
font-family:"Tahoma";
}
h2 {
color:blue;
text-align:left;
font-family:"Tahoma";
}

p{
font-family:"Tahoma";
}
code{
font-family:"Courier New";
font-size:16px;
}
</style>
</head>

<body>
<h1>OpenBooks: A sample JPA 2.0 Application</h1>
<hr>
  OpenBooks is a sample (and perhaps simple) application to demonstrate some of the new features of 
  version 2.0 of <A HREF="http://jcp.org/en/jsr/detail?id=317">Java Persistence API</A> (JPA) specification, such as
  <br>
  <OL>
  <LI>Creating dynamic Criteria Query from an input form
  <LI>Using compound, derived identity and orphan delete for modeling composite relationship
  <LI>Browsing Persistent Domain Model via MetaModel API
  </LI>
  </OL>
  <br>
  
  OpenBooks runs with <A HREF="http://openjpa.apache.org">OpenJPA</A> as its JPA provider.
  <hr>
<h2>Instructions to download and run OpenBooks Demo</h2>
   OpenBooks comes with 
   <OL>
   <LI>complete source code
   <LI>build scripts to demonstrate how to build a typical OpenJPA application and package it for JSE or JEE 
   environment
   <LI>scripts to run OpenBooks in on your local database installation. 
   </OL>
   <br>
   Follow the simple instructions below to build and run OpenBooks:
   
<OL>
   <LI><A href="#Download">Download OpenBooks distribution</A>.
   <LI><A href="#Configure">Configure build and run environment</A>.
   <LI><A href="#Build">Build OpenBooks from source</A>
   <LI><A href="#Run">Run OpenBooks</A>
</OL>
   <hr>
<h2><A name="Download">Download Instructions</A></h2>
   OpenBooks is distributed under <A HREF="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</A>  
   <br>
   OpenBooks can be checked out from OpenJPA repository.
   <br>
   &nbsp;&nbsp;<code>$ svn co https://svn.apache.org/repos/asf/openjpa/trunk/openjpa-examples/openbooks</code>.
   <br>
   will check out the source code and build scripts of OpenBooks in current directory.
   <br>
   OpenBooks requires following software environment to run:
  <OL>
  <LI> Java Runtime version 6.0 or higher
  <LI> OpenJPA Libraries version 2.0 or higher
  <LI> Ant version 1.6 or higher
  <LI> Any JDBC complaint database supported by OpenJPA. 
       See <A href="http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_dbsetup_dbsupport">OpenJPA documentation</A> for a list of supported databases.
  </OL>
  <hr>
  

<h2><A name="Configure">Configure build and run environment</A></h2>
   OpenBooks builds with Ant. The Ant build script is somewhat involved because OpenBooks can be built and packaged
   either as a JSE (Swing based) application or a JEE Web Application. By default, OpenBooks is built as a 
   JSE application.
   <br>
   Before you run a build, configure the build environment by editing
   <A HREF="build.properties"><code>build.properties</code></A>. 
   Essentially, you need to 
     <OL>
     <LI>point <code>openjpa.lib</code> variable to the local directory where OpenJPA class library(ies) reside.
     Notice that the variable points to a directory and not a <code>*.jar</code> file. All <code>*.jar</code> files
     found under the directory are included in compilation classpath.
     </OL>     
    <br>
    The next  step is to configure runtime environment.  
    <OL>
      <LI>Edit <A HREF="resources/META-INF/persistence.xml"><code>persistence.xml</code></A> located in 
      <code>resources/META-INF</code> directory. 
      Modify the <code>javax.persistence.jdbc.driver</code>
      and <code>javax.persistence.jdbc.url</code> property to suit your local database and its driver.
      <br>
      The example <code>persistence.xml</code> provided is primarily for a JSE environment.
      In JEE environment, you may already have a JTA data source configured and registered in JNDI.
      Of course, then the <code>persistence.xml</code> is to be edited accordingly in 
      <code>&lt;jta-data-source&gt;</code> clause. 
      <LI>In JSE mode, edit <A HREF="run.properties"><code>run.properties</code></A> to specify location of OpenJPA 
      class libraries and JDBC Driver used in runtime classpath.
      <br>
      In JEE mode, OpenJPA library and JDBC drivers are configured in JEE server and hence variables in
      this file are irrelevant.  
    </OL> 
    
    
    Both <code>build.properties</code> and <code>run.properties</code> files are commented in-place on what is to be 
    edited.  
  <hr>
    
<h2><A name="Build">Build OpenBooks from source</A></h2>
    Once you have configured the environment, simply issue 
    <br>
    &nbsp;&nbsp;<code>$ ant</code>
    <br>or<br>
    &nbsp;&nbsp;<code>$ ant -Dbuild.mode=jee</code>
    <br>
    The default target of the ant script will 
    <LI>generate metamodel classes (required for Criteria API)
    <LI>compile the source code
    <LI>enhance the persistence domain model
    <LI>package the application based on the build.mode as a Swing-based application or a Web Application Archive.
    and <LI>copy the deployable artifacts to <code>target/openbooks</code> directory relative to the current directory.    
    <hr>
    
<h2><A name="Run">Run OpenBooks</A></h2> 
    If you have built OpenBooks for JSE, then go to the <code>target/openbooks</code> directory. 
    <br>
    Invoke the Ant script to run OpenBooks<br>
    &nbsp;&nbsp;<code>$ ant -f run.xml</code>
    
 <hr>
    If you have build OpenBooks for JEE, a Web Application Archive <code>openbooks.war</code> will be
    created in <code>target/openbooks</code> directory. You need to deploy <code>openbooks.war</code>
    to a JEE Application Server. Once deployed, you can point a browser to Application Server URL
    <br>
    &nbsp;&nbsp;<code>http://&lt;app server host&gt;:&lt;port&gt;/openbooks/</code>
    <br>
    to access OpenBooks as an web application.
<hr>
    
<h2><A name="Seed">Populate OpenBooks Database</A></h2> 
    OpenBooks checks for existing data at first connection to the database.
    If the database is empty, the schema is defined and populated with initial data.
    However, you can explicitly populate the database in JSE build. 
    Edit <A HREF="load.properties"><code>load.properties</code></A> 
    to specify load parameters such as number of Books etc. OpenBooks uses this data to populate a database 
    with some sample data. This example file has some typical values. If you are satisfied with it, 
    you can leave them as it is. Then invoke the Ant script<br>
    &nbsp;&nbsp;<code>$ ant -f run.xml load</code>
    
</body>
</html>
