<?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>

	<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 again and delete the
				file /webapps/openmeetings/conf/install.xml and then run the web
				based installer again
			</p>

		</section>

	</body>

</document>
