<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Copyright 2006 The Apache Software Foundation 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>Webapp Name / Path</title>
		<author email="sebawagner@apache.org">
			OpenMeetings Team
		</author>
	</properties>

	<body>

		<section name="Renaming /openmeetings context">
			<p>
				If you want to have
				<tt>http://yourcorp.com:5080/yourmeetings</tt>
				instead of
				<tt>http://yourcorp.com:5080/openmeetings</tt>
				you need to do the following
			</p>
			<ol>
				<li>stop openmmetings if it is running </li>
				<li>
					go to openmeetings install dir (for ex.
					<tt>/opt/red5</tt>
					)
				</li>
				<li>
					rename
					<tt>/opt/red5/webapps/openmeetings</tt>
					to
					<tt>/opt/red5/webapps/yourmeetings</tt>
					(for ex.
					<tt>mv /opt/red5/webapps/openmeetings
						/opt/red5/webapps/yourmeetings
					</tt>
					)
				</li>
				<li>
					open
					<tt>/opt/red5/webapps/yourmeetings/config.xml</tt>
					using your favorite text editor (for ex.
					<tt>vim /opt/red5/webapps/yourmeetings/config.xml</tt>
					)
				</li>
				<li>
					find and modify
					<tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>
					to be
					<tt>&lt;webAppRootKey&gt;</tt>
					<strong>yourmeetings</strong>
					<tt>&lt;/webAppRootKey&gt;</tt>
				</li>
				<li>
					find and modify
					<tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>
					to be
					<tt>&lt;httpRootKey&gt;</tt>
					<strong>/yourmeetings/</strong>
					<tt>&lt;/httpRootKey&gt;</tt>
				</li>
			</ol>
			That's it
		</section>

		<section name="Changing hard-coded application name in string labels">
			<p>
				To have
				<i>Your Application Name</i>
				instead of
				<i>Openmeetings</i>
				in
				<strong>all</strong>
				text labels you need to do the following
			</p>
			<ol>
				<li>
					ensure
					<strong>
						<tt>$APP_NAME</tt>
					</strong>
					placeholder is used in
					<i>all</i>
					strings you have added and/or modified (all strings bundled into
					Openmeetings already have this placeholder)
				</li>
				<li>login to Openmeetings as user with administrator privileges </li>
				<li>
					go to
					<tt>Administration -&gt; Configuration</tt>
				</li>
				<li>
					find and edit configuration with name
					<strong>
						<tt>application.name</tt>
					</strong>
				</li>
				<li>
					Set its value to be
					<i>
						<tt>Your Application Name</tt>
					</i>
				</li>
				<li>
					<tt>Save</tt>
				</li>
				<li>reload page or relogin </li>
			</ol>
			<p>
			All string will display
			<i>
				<tt>Your Application Name</tt>
			</i>
			in place of
			<i>
				<tt>Openmeetings</tt>
			</i>
			</p>
			<p>
				Please
				<i>NOTE</i>
				there are 3 additional properties in the config.xml file which
				should be modified for
				<strong>TOTAL</strong>
				Openmeetings clean up:
			</p>
			<div class="xmlcode">
				&lt;currentappname&gt;OpenMeetings&lt;/currentappname&gt;
				<br />
				&lt;currentappnameurl&gt;http://incubator.apache.org/openmeetings&lt;/currentappnameurl&gt;
				<br />
				&lt;currentappnamebugurl&gt;https://issues.apache.org/jira/browse/OPENMEETINGS&lt;/currentappnamebugurl&gt;
				<br />
			</div>

		</section>

		<section name="Running multiple Openmeetings instances on the same server">
			<p>
				If you want to run multiple Openmeetings instances on the same server i.e. to have<br/>  
				<tt>http://yourcorp.com:5080/openmeetings1</tt><br/> 
				<tt>http://yourcorp.com:5080/openmeetings2</tt><br/> etc.<br/> you need to do the following:
			</p>
			<ol>
				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 
				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 
				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)
				</li>
				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br/>
					<div class="xmlcode">
					export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"
					</div>
					or <tt>red5.bat</tt>:<br/>
					<div class="xmlcode">
					set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M
					</div>
				</li>
			</ol>
		</section>
	</body>

</document>