<?xml version="1.0" encoding="UTF-8"?>
<!--
   Licensed 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.
 -->
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

	<properties>
		<title>Apache Derby Configuration</title>
		<author email="sebawagner@apache.org">
			Apache OpenMeetings Documentation Team
		</author>
	</properties>

	<body>
		<section name="Apache Derby Configuration">

			<p>
				OpenMeetings default configuration is to use Apache Derby.
			</p>

			<p>
				It is recommended for production environments and high
				availibility to change to an usual relational database like MySQL,
				Postgres or DB2.
			</p>
			<p>
				For more information about Apache Derby see
				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>
			</p>

			<p>
				There is a sample configuration for Apache Derby that ships with
				every release in:
				<br />
				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
			</p>

			<p>
				If you encounter issues, you can drop the db and then run the web
				based installer again
			</p>

		</section>

	</body>

</document>
