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

<DERBY_HOME>/demo/README.txt:

Information about demos included in this distribution of Apache Derby
=====================================================================

This directory (<DERBY_HOME>/demo/) contains example programs and
databases demonstrating different aspects of the Apache Derby
database system, as well as templates for custom configuration.

Please refer to "readme" or "example" files in the respective
subdirectories for more information about each demo.

You will find the following "demo" directories in some distributions
of Apache Derby:

demo/databases
 - contains pre-built databases or other binary resources that are
   used by demo programs or mentioned in Apache Derby documentation.

demo/programs
 - contains demo applications written in Java. Go here if you want
   to see examples of how to use Derby in various contexts.
 - Recommended starting point:
    - Open demo/programs/readme.html in a web browser.

demo/templates
 - contains template files you can use to configure or tune Derby.


-- -- --

Apache Derby web site: http://db.apache.org/derby/
