Commit 82ce558f authored by Matt Tucker's avatar Matt Tucker Committed by matt

Initial check-in.


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@148 b35dd754-fafc-0310-a699-88a17e54d16e
parent b0facf44
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jive Messenger Database Schema Guide</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<a name="top"></a>
<h1>Jive Messenger Database Schema Guide</h1>
<h2>Introduction</h2>
<p>
This document outlines the data type conventions and tables in the Jive
Messenger 1.1 database
schema. Some information, like column indexes and foreign keys, is
omitted. For this, please
read the individual schema of the database you're interested in.
The <a href="database10-guide.html">Messenger 1.0 schema</a> is
documented separately as well a <a
href="database10_11-upgrade-guide.html">1.0 to 1.1 database upgrade
guide</a> for those that need to know the changes to database schema.
An upgrade script is provided for each database in the <tt>database/upgrade</tt>
directory of the distribution that automatically upgrade Messenger 1.0
databases to 1.1.<br>
</p>
<h2>Data Type Conventions</h2>
<p>
Date column type support varies widely across databases. Therefore,
Jive Messenger
specially encodes dates as VARCHAR values. Each date is a Java long
value which
is 0-padded to 15 characters. The long value is the internal
representation of
Java Date objects, which can be obtained with code such as the
following:
</p>
<pre>long currentDate = new Date().getTime();</pre>
<p>
Boolean values are always represented a numeric values: 0 for false and
1 for
true.
</p>
<h2>Database Tables</h2>
<p>
Below is a description of each of the tables in the Jive Messenger
database schema.
A <span class="primary-key">yellow row</span> denotes a primary key.
</p>
<ul>
<li><a href="#jiveChatbot">jiveChatbot</a></li>
<li><a href="#jiveDomain">jiveDomain</a><br>
</li>
<li><a href="#jiveGroup">jiveGroup</a> </li>
<li><a href="#jiveGroupProp">jiveGroupProp</a> </li>
<li><a href="#jiveGroupUser">jiveGroupUser</a> </li>
<li><a href="#jiveID">jiveID</a></li>
<li><a href="#jiveOffline">jiveOffline</a><br>
</li>
<li><a href="#jivePrivate">jivePrivate</a> </li>
<li><a href="#jiveUser">jiveUser</a></li>
<li><a href="#jiveUserID">jiveUserID</a><br>
</li>
<li><a href="#jiveUserProp">jiveUserProp</a> </li>
<li><a href="#jiveRoster">jiveRoster</a> </li>
<li><a href="#jiveRosterGroups">jiveRosterGroups</a> </li>
<li><a href="#jiveVCard">jiveVCard</a> </li>
</ul>
<br>
<a name="jiveChatbot"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveChatbot (Chatbot addresses)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>chatbotID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Chatbot ID (Primary Key)</td>
</tr>
<tr>
<td>description</td>
<td>VARCHAR</td>
<td>4000</td>
<td>Chatbot Description</td>
</tr>
<tr>
<td>creationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Creation Date</td>
</tr>
<tr>
<td>modificationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Last Modified Date</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveDomain"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveDomain (Messenger account domains)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>domainID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Domain ID (Primary Key)</td>
</tr>
<tr>
<td>name</td>
<td>VARCHAR</td>
<td>255</td>
<td>Domain Name</td>
</tr>
<tr>
<td>description</td>
<td>VARCHAR</td>
<td>4000</td>
<td>Domain Description</td>
</tr>
<tr>
<td>creationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Creation Date</td>
</tr>
<tr>
<td>modificationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Last Modified Date</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveGroup"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveGroup (user Group data)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>groupID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Group ID (Primary Key)</td>
</tr>
<tr>
<td>name</td>
<td>VARCHAR</td>
<td>255</td>
<td>Group Name</td>
</tr>
<tr>
<td>description</td>
<td>VARCHAR</td>
<td>4000</td>
<td>Group Description</td>
</tr>
<tr>
<td>creationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Creation Date</td>
</tr>
<tr>
<td>modificationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Last Modified Date</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveGroupProp"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveGroupProp (name-value associations for a
Group)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>groupID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Group ID</td>
</tr>
<tr class="primary-key">
<td>name</td>
<td>VARCHAR</td>
<td>100</td>
<td>Group Property Name</td>
</tr>
<tr>
<td>propValue</td>
<td>VARCHAR</td>
<td>4000</td>
<td>Group Property Value</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveGroupUser"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveGroupUser (associates Users with Groups)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>groupID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Group ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>administrator</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Adminstrator (Boolean) (Primary Key)</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveID"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveID (used for unique ID sequence generation)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>idType</td>
<td>NUMBER</td>
<td>n/a</td>
<td>ID type (e.g., Group, User, Roster) (Primary Key)</td>
</tr>
<tr>
<td>id</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Next available block of ID&#8217;s (Used for Database-Independent
ID Sequence Generator)</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveOffline"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveOffline (offline message storage)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Change</th>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)<br>
</td>
</tr>
<tr class="primary-key">
<td style="vertical-align: top;">messageID<br>
</td>
<td style="vertical-align: top;">NUMBER<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">ID of stored message (Primary
Key)<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">creationDate<br>
</td>
<td style="vertical-align: top;">VARCHAR<br>
</td>
<td style="vertical-align: top;">15<br>
</td>
<td style="vertical-align: top;">Date message stored<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">size<br>
</td>
<td style="vertical-align: top;">NUMBER<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">Size of message in bytes<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">message<br>
</td>
<td style="vertical-align: top;">TEXT<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">The message text<br>
</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jivePrivate"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jivePrivate (Private data storage)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>name</td>
<td>VARCHAR</td>
<td>100</td>
<td>Name of the private entry (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>namespace</td>
<td>VARCHAR</td>
<td>200</td>
<td>Namespace of the private entry (Primary Key)</td>
</tr>
<tr>
<td>value</td>
<td>TEXT</td>
<td>n/a</td>
<td>Value of the private data</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<br>
<a name="jiveUser"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveUser (User data)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)</td>
</tr>
<tr>
<td>password</td>
<td>VARCHAR</td>
<td>32</td>
<td>Password Data (plain-text or MD5 hash depending on settings)</td>
</tr>
<tr>
<td>name</td>
<td>VARCHAR</td>
<td>100</td>
<td>Name</td>
</tr>
<tr>
<td>nameVisible</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Is Name Visible (Boolean)</td>
</tr>
<tr>
<td>email</td>
<td>VARCHAR</td>
<td>100</td>
<td>Email Address</td>
</tr>
<tr>
<td>emailVisible</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Is Email Visible (Boolean)</td>
</tr>
<tr>
<td>creationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Creation Date</td>
</tr>
<tr>
<td>modificationDate</td>
<td>VARCHAR</td>
<td>15</td>
<td>Last Modified Date</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveUserID"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveUserID (User account IDs - address
reservations)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>username</td>
<td>VARCHAR</td>
<td>30<br>
</td>
<td>User name (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>domainID</td>
<td>NUMBER</td>
<td>n/a<br>
</td>
<td>The domain this account belongs to (Primary Key)</td>
</tr>
<tr>
<td>objectType</td>
<td>NUMBER</td>
<td>n/a<br>
</td>
<td>Address type (0 - user, 1 - chatbot)<br>
</td>
</tr>
<tr>
<td>objectID</td>
<td>NUMBER</td>
<td>n/a<br>
</td>
<td>ID of the corresponding account</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br ="">
<a name="jiveUserProp"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveUserProp (name-value associations for a User)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>name</td>
<td>VARCHAR</td>
<td>100</td>
<td>User Property Name</td>
</tr>
<tr>
<td>propValue</td>
<td>NUMBER</td>
<td>4000</td>
<td>User Property Value</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveRoster"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveRoster (buddy rosters or lists)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>rosterID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>ID of roster (Primary Key)</td>
</tr>
<tr>
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID</td>
</tr>
<tr>
<td style="vertical-align: top;">jid<br>
</td>
<td style="vertical-align: top;">TEXT<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">The address of the roster entry<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">sub<br>
</td>
<td style="vertical-align: top;">NUMBER<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">The subscription status of the
entry<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">ask<br>
</td>
<td style="vertical-align: top;">NUMBER<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">The ask status of the entry<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">recv<br>
</td>
<td style="vertical-align: top;">NUMBER<br>
</td>
<td style="vertical-align: top;">n/a<br>
</td>
<td style="vertical-align: top;">Flag indicating the entry is a
roster request that was received<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">nick<br>
</td>
<td style="vertical-align: top;">VARCHAR<br>
</td>
<td style="vertical-align: top;">255<br>
</td>
<td style="vertical-align: top;">The nickname assigned to this
roster entry<br>
</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveRosterGroups"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveRosterGroups (Groups of buddy entries in a
roster)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>rosterID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Roster ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>rank</td>
<td>NUMBER</td>
<td>n/a</td>
<td>Position of the entry (Primary Key)</td>
</tr>
<tr>
<td>groupName</td>
<td>VARCHAR</td>
<td>255</td>
<td>The user defined name for this roster group</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
<br>
<br>
<br>
<a name="jiveVCard"></a>
<table class="dbtable">
<tbody>
<tr>
<th colspan="4">jiveVCard (vCard contact information)</th>
</tr>
<tr>
<th>Column Name</th>
<th>Type</th>
<th>Length</th>
<th>Description</th>
</tr>
<tr class="primary-key">
<td>userID</td>
<td>NUMBER</td>
<td>n/a</td>
<td>User ID (Primary Key)</td>
</tr>
<tr class="primary-key">
<td>name</td>
<td>VARCHAR</td>
<td>100</td>
<td>Name of the vCard entry (Primary Key)</td>
</tr>
<tr>
<td>propValue</td>
<td>TEXT</td>
<td>n/a</td>
<td>Value of the vCard entry</td>
</tr>
</tbody>
</table>
&nbsp;<a href="#top" class="top">top of page</a>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jive Messenger Database Documentation</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1><a name="introduction">Jive Messenger Database Setup</a></h1>
<p>Jive Messenger stores all data in a back-end database that you must setup and manage.
This document provides setup instructions for all of the currently supported databases.
</p>
<p>
JDBC 2.0 drivers are required for Jive Messenger to communicate with your database. Suggested
drivers for particular databases are noted below where applicable. However,
<em>the JDBC-ODBC bridge will not work with Jive under any circumstances</em>.
</p>
<p>
For a full list of available JDBC drivers, please see:
<a href="http://industry.java.sun.com/products/jdbc/drivers">
http://industry.java.sun.com/products/jdbc/drivers</a>.</p>
<p>
All database schemas can be found in the <tt>database</tt> directory of the
Jive Messenger installation.
</p>
<p>Note that additional databases besides the ones in this list may be supported.
Please check the distribution for a database schema for your database or
consider creating a schema yourself if one isn't provided.
</p>
<p>
Choose your database from the list below for setup details:
</p>
<ul>
<li> <a href="#mysql">MySQL</a>
<li> <a href="#oracle">Oracle</a>
<li> <a href="#sqlserver2000">Microsoft SQLServer</a>
<li> <a href="#postgres">PostgreSQL</a>
<li> <a href="#db2">IBM DB2</a>
<li> <a href="#hsql">HSQL db (Hypersonic)</a>
<!--
<li> <a href="#interbase">Interbase 6</a>
<li> <a href="#cloudscape">Cloudscape</a>
-->
</ul>
<h2><a name="mysql">MySQL</a></h2>
<ul>
<b>JDBC Drivers</b><p>
The JDBC driver for MySQL can be found at:
<p>
<a href="http://www.mysql.com/downloads/api-jdbc.html">
http://www.mysql.com/downloads/api-jdbc.html</a>
<p>
If you still have the older mm.mysql JDBC drivers, you are encouraged to
upgrade to the newest Connector/J drivers (3.0.2 or later).
<p>
In the Jive Messenger web-based setup tool, use the following values:<p><ul>
<li>driver: <tt>org.gjt.mm.mysql.Driver</tt>
<li>server: <tt>jdbc:mysql://[YOUR_HOST]/[DATABASE_NAME]</tt>
</ul><p>
where [YOUR_HOST] and [DATABASE_NAME] are the actual values for you server.
In many cases <tt>localhost</tt> is a suitable value for [YOUR_HOST] when
your database is running on the same server as your webserver.
<p><b>Setup Instructions</b><p>
<ol>
<li>Make sure that you are using MySQL 3.23.2 or later and the
MyISAM table type (default).
<li>Create a database for the Jive tables:<br>
<code>mysqladmin create [databaseName]</code><br>
(note: "databaseName" can be something like 'jivexmpp')
<li>Import the schema file from the <tt>database</tt> directory of the installation folder:<br>
Unix/Linux: <code>cat jive_xmpp_mysql.sql | mysql [databaseName];</code>
<br>
Windows: <code>type jive_xmpp_mysql.sql | mysql [databaseName];</code>
<li>Start the Jive Messenger setup tool, and use the appropriate JDBC connection
settings.
</ol>
<p><b>Character Encoding Issues</b><p>
MySQL does not have proper Unicode support, which makes supporting data
in non-Western languages difficult. However, the MySQL JDBC driver has a workaround
which can be enabled by adding
<tt>&lt;mysql&gt;&lt;useUnicode&gt;true&lt;/useUnicode&gt;&lt;/mysql&gt;</tt>
to the <tt>&lt;database&gt;</tt> section of your <tt>jive_messenger.xml</tt> file.
When using this setting, you should also set the Jive character encoding
to utf-8 in the admin tool.
<p><b>Further Help</b><p>
If you need help setting up MySQL, refer to the
following sites:<p>
<a href="http://www.mysql.com/doc.html">http://www.mysql.com/doc.html</a><br>
<a href="http://www.devshed.com/Server_Side/MySQL">http://www.devshed.com/Server_Side/MySQL</a>
</ul>
<p><h2><a name="oracle">Oracle</a></h2><p><ul>
<b>JDBC Drivers</b><p>
For most users, the best drivers for Oracle are the ones written by Oracle (which
come with the database or can be downloaded from Oracle's website). You
should use the Oracle 9i "thin" drivers (users have reported bugs with the 8i drivers)
that are in the the <tt>classes12.zip</tt> file.
<b>Do not use the <tt>classes11.zip</tt> JDBC driver.</b> Note: you may wish to rename the
<tt>classes12.zip</tt> file to <tt>classes12.jar</tt> or <tt>oracle.jar</tt>
since some application servers will not work correctly with zip files.
<p>
In the Jive Messenger web-based setup tool, use the following values:<p>
<ul>
<li>driver: <tt>oracle.jdbc.driver.OracleDriver</tt>
<li>server: <tt>jdbc:oracle:thin:@[YOUR_HOST]:1521:[DATABASE_NAME]</tt>
</ul><p>
where [YOUR_HOST] and [DATABASE_NAME] are the actual values for you server.
In many cases <code>localhost</code> is a suitable value for [YOUR_HOST] when
your database is running on the same server as your webserver.
<p><b>Setup Instructions</b><p>
First, create a "Jive" user or some other user
that will "own" the Jive tables. This isn't necessary, but doing so
will allow your tables to exist in a seperate tablespace.
<p>
Next import the schema from the <tt>database</tt> directory of the installation
using sqlplus (or your favorite Oracle tool such
as Toad). For sqlplus: copy the "jive_xmpp_oracle.sql" file to the same
directory where sqlplus is installed (should be something like
/Oracle/Ora81/bin/). Next, log into sqlplus and then execute the command:<br>
<code>@ jive_xmpp_oracle</code><br>
That will import the schema file. Your database is now setup.
</ul>
<p><h2><a name="sqlserver2000">SQL Server 2000</a></h2><p>
<ul>
<b>JDBC Drivers</b><p>
Microsoft provides a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en">free JDBC driver</a> that works with Jive Messenger.
After downloading and extracting the drivers, place <tt>msbase.jar</tt>,
<tt>mssqlserver.jar</tt>, and <tt>msutil.jar</tt> in the classpath of your
application server or the <tt>WEB-INF/lib</tt> directory of your Jive Messenger
web application. Use the following values in the Jive Messenger web-based setup tool:<p>
<ul>
<li>driver -- <tt>com.microsoft.jdbc.sqlserver.SQLServerDriver</tt>
<li>server -- <tt>jdbc:microsoft:sqlserver://[HOST_NAME]:[PORT_NUMBER];databasename=[DB_NAME]</tt>
</ul>
<p>
where [HOST_NAME] is the host name or IP address of your database server,
and [PORT_NUMBER] is the port that SQLServer is listening on (normally 1433)
and [DB_NAME] is the name of the database (this parameter is optional).
<p><b>Setup Instructions</b><p>
<ol>
<li>Create a new database using Enterprise Manager if you do not already have
a database you want to use. You may wish to name the database "jivexmpp".
<li>Create a user to access the database if you do not already have one you'd
like to use. Consider making the default database for the user be the
one you created in step 1.
<li>Open the Query Analyser and connect to the server.
<li>Select the database you want to use for Jive Messenger
from the DB drop down (the one you created in step 1 if you're using a new database).
<li>Open the jive_xmpp_sqlserver_2000.sql file.
<li>Press F5 to run the script. The script will run and create the
necessary tables.
<li>Proceed to the Jive Messenger setup tool and use the appropriate JDBC settings
when prompted.
</ol>
</ul>
<p><h2><a name="postgres">PostgreSQL</a></h2><p>
<ul>
<b>JDBC Drivers</b>
<p>
JDBC Drivers for PostgreSQL can be found in various distribution packages
at <a href="http://jdbc.postgresql.org" target="_blank">PostgreSQL's JDBC Home Page</a>.
This installation in particular refers to <code>&quot;pgjdbc2.jar&quot;</code> driver for
accessing PostgreSQL 7.3. Refer to the JDBC documentation at that site
for more information.
<p>
In the Jive Messenger web-based setup tool, use the following values:<p><ul>
<li>driver -- <tt>org.postgresql.Driver</tt>
<li>server -- <tt>jdbc:postgresql://[HOST_NAME]:[PORT_NUMBER]/dbname</tt>
</ul><p>
If left out, host defaults to localhost (not 127.0.0.1) and port to 5432.
<p>
<b>Setup Instructions</b>
<p>
<ol>
<li>Create the database. For example, using the
PostgreSQL <code>&quot;createdb&quot;</code> utility:
<br>
<code>createdb -E UNICODE jivexmpp</code>
<li>Import the schema from the <tt>database</tt> directory of the installation.
Use psql (or your favorite Postgres sql
utility) to import the Jive Messenger database schema:
<br>
<code>psql -d jivexmpp -f jive_xmpp_postgresql.sql</code>
<li>Proceed to Jive Messenger setup and use the appropriate JDBC settings when
prompted.
</ol>
</ul>
<p><h2><a name="db2">IBM DB2 7</a></h2><p><ul>
<b>JDBC Drivers</b>
<p>
Use the JDBC 1.2 compliant driver, db2java.zip (1293KB),
located in the <nobr>"%DB2PATH%\java2"</nobr> directory.
<p>
Values for the config file are:
<ul>
<li>driver: <code>COM.ibm.db2.jdbc.app.DB2Driver</code>
<li>server: <code>jdbc:db2:[DB NAME, e.g. JIVE]</code>
</ul>
If you are using a remote database you need to use the following values for the config file are:
<ul>
<li>driver: <code>COM.ibm.db2.jdbc.net.DB2Driver</code>
<li>server: <code>jdbc:db2:[DB NAME, e.g. JIVE]</code>
</ul>
<p>
<b>Setup Instructions</b>
<p>
You have to create a new database (e.g. JIVE) or use an existing
one. Connect to the database using any valid username allowed to create
tables and indexes. Keep in mind that DB2 UDB applies the user name
as the table schema. Use the same user when you configure Jive with
the administration interface. Commands are as follows:
<p>
<code>DB2 CREATE DB JIVE ALIAS JIVE<br>
DB2 CONNECT TO JIVE USER [DBUSER] USING [DBPASSWORD]</code><br>
(or you can use the Command Center GUI)
<p>
Start the DB2 command window (in Windows), or the user's shell in
Unix and import the schema in the <tt>database</tt> directory of the
installation with:<p>
<code>db2 -tvf jive_xmpp_db2.sql</code>
<p>
Or, use the DB2 Command Center and run the script
through the "Replication Sources" folder in the Database tree.
<p>
The database is now setup.
</ul>
<p><h2><a name="hsql">HSQL 1.7.1 (Hypersonic)</a></h2><p><ul>
<b>Special Note</b>
<p>
Jive Messenger bundles HSQL as its embedded database. If you choose to use the embedded database,
it can be configured via the Jive Messenger installer. If you have a stand-alone installation
of HSQL, follow the instructions below to connect to it.
</p>
<b>JDBC Drivers</b>
<p>
Because HSQL db is embedded in Jive Messenger, there is no need to download the
JDBC driver separately. Values for the config file are:
<ul>
<li>driver: <code>org.hsqldb.jdbcDriver</code>
<li>server: <code>jdbc:hsqldb:[PATH_TO_DB_FILES/DB_NAME]</code>
</ul>
<p>
For example, the server URL might be <tt>jdbc:hsqldb:../database/defaultdb</tt>
<p>
<b>Setup Instructions</b>
<p>
Create a database for the Jive Messenger
tables. This assumes you have HSQL installed in its own
directory and working correctly.
<ol>
<li>
Run the HSQL Database Manager by navigating to the folder where
hsqldb.jar is located and type the following
<ul>
<p>
<code>
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
</code>
<p>
</ul>
then hit enter. You will now see a GUI application. Note, you will not see a hsqldb.jar
in the Jive Messenger distribution - this is referring to the hsqldb.jar from the HSQL
distribution.
<li>
When prompted with the connect window, enter <tt>org.hsqldb.jdbcDriver</tt>
as the Driver, and specify the URL of your database in
the URL field. The default password is already entered.
<li>Now copy and paste the contents of <tt>jive_xmpp_hsql.sql</tt> from
the <tt>database</tt> directory of the installation into the
command window, and hit execute. If no errors are
reported, then your database is setup properly.
<li>Finally, you should change the username and password login for your
database: just open the .script file in your
database folder and change the appropriate values. Make sure that you
don't use a blank password, as Jive Messenger will not accept
one.
</ol>
</ul>
<!--
<p><h2><a name="interbase">Interbase 6.0</a></h2><p><ul>
<font color="red"><b>Warning:</b></font> some users have
experienced problems trying to make Interbase work with Jive. You may
wish to try a different database such as MySQL or Postgres if possible.<p>
<b>JDBC Drivers</b>
<p>
JDBC drivers and other files for Interbase can be downloaded at
<a href="http://www.borland.com/devsupport/interbase/opensource/" target="_blank">
http://www.borland.com/devsupport/interbase/opensource/</a>. The JDBC
JAR file is called interclient.jar, and should be put in the classpath of
your application server.
<p>
Values for the config file are:
<ul>
<li>driver: <code>interbase.interclient.Driver</code>
<li>server: <code>jdbc:interbase://host/fullpath</code>
</ul>
<p>
<b>Setup Instructions</b>
<p>
<ol>
<li>Create a new database by connecting to your Interbase server with
IBConsole then use the Database/Create Database menu option.
<li>Execute the Jive SQL script using Interactive SQL. This can be
started from the Tools/Interactive SQL menu. Within Interactive SQL
load the jive_xmpp_interbase.sql script (Query/Load Script) and execute
it (Query/Execute). The database will now have been constructed.
</ol>
<p>
Notes: It would probably be a good idea to create a new user for Jive or
at least to change the password.
<p>
To use JDBC with interbase you have to have install the Interbase
InterServer which enables the InterClient JDBC driver to access the
database.
</ul>
<p><h2><a name="cloudscape">Cloudscape 3.6.4</a></h2><p><ul>
Note: The following procedure will use the embedded version of Cloudscape,
but a similar process can be used to setup the client/server version. The
downloaded zip file supports both embedded and client/server modes.
<p>
<p>
<b>Setup Instructions</b>
<p>
Cloudscape and the JDBC drivers can be downloaded at
<a href="http://www.informix.com/cloudscape/" target="_blank">
http://www.informix.com/cloudscape/</a>, the zip file is cloudscape364.zip.
After downloading, unzip the file into \cloudscape directory and add the
following JARs to the CLASSPATH of your system, the lib directory of Jive Messenger,
your application server,
or put them in the WEB-INF/lib directory created for the Jive web application.
<p>
For Windows:
<pre>
md \cloudscape
cd \cloudscape
jar xvf cloudscape364.zip
set CLASSPATH=%CLASSPATH%;\cloudscape\lib\cloudscape.jar;\cloudscape\lib\tools.jar
</pre>
<ol>
<li> Change into your Cloudscape directory, i.e. cd \cloudscape
<li> Copy in the file jive_cloudscape_364.sql.
<li> Using the Cloudscape Interactive JDBC scripting tool (ij), create the
database:
<pre>
java COM.cloudscape.tools.ij
ij version 3.6 (c) 1997-2001 Informix Software, Inc.
ij> connect 'jdbc:cloudscape:jiveDB;create=true';
ij> run 'jive_cloudscape_364.sql';
ij> select * from jiveuser;
ij> exit;
</pre>
</ol>
<p>
<b>JDBC Drivers</b>
<p>
Values for the admin tool are:<ul>
<li>driver: <code>COM.cloudscape.JDBCDriver</code>
<li>server: <code>jdbc:cloudscape:/cloudscape/jiveDB</code>
<li>username: <code>APP</code>
<li>password: <code>APP</code>
</ul>
</ul>
-->
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Messenger: Overview - Jive Software</title>
<link type="text/css" rel="stylesheet" href="style.css">
</head>
<body>
<h1>Jive Messenger</h1>
<p> Jive Messenger provides comprehensive group chat and instant
messaging (IM) services to online and intranet user communities using
the XMPP protocol.</p>
<p>As a pure Java application, the server is designed for
extensible and flexible deployment into new or existing infrastructure.
The server contains a pluggable backend data storage and security system and
interfaces for customizing and extending the server.</p>
<p>Jive Software also offers a high-quality Open-Source Java client library
called <a href="http://www.jivesoftware.org/smack"> Smack </a> . The Smack
library makes it easy to write custom clients in Java for communicating
over IM or chat with XMPP servers. In addition, Jive Messenger will
work with any standards compliant XMPP client.</p>
<ul>
<li> <a href="install-guide.html">Installation Guide</a> -
How to manually install the server as standalone application.</li>
<li> <a href="database.html">Database Installation Guide</a> - How
to setup your database for use with Jive Messenger.</li>
<li> <a href="database-guide.html">Database Schema Guide</a> - A
tour of the Jive Messenger database schema for developers and database
administrators.</li>
<li> <a href="ssl-guide.html">SSL Guide</a> - A guide to setting up
Messenger's SSL secure socket support.</li>
<li> <a href="ldap-guide.html">LDAP Guide</a> - A guide to setting
up Jive Messenger to work with LDAP user stores.</li>
</ul>
<p>An active support community for Jive Messenger is available at <a
href="http://www.jivesoftware.org/forums">http://www.jivesoftware.org/forums</a>.</p></body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jive Software Messenger Readme</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Jive Messenger Installation Guide</h1>
<p>Jive Messenger is a powerful instant messaging (IM) and chat
server that implements the XMPP protocol. This document will guide
you through installing Jive Messenger as a standalone
application. For a full list of features and more information, please
visit the Jive Messenger website: <a href="http://www.jivesoftware.org/messenger"
target="_top">http://www.jivesoftware.org/messenger</a></p>
<p>In order to install Jive Messenger, you'll need a server environment
that meets the following requirements: </p>
<ul>
<li>JDK 1.5 or later. You can check your java version by typing "java
-version" at the command line. See <a href="http://java.sun.com">http://java.sun.com</a>
for Java on your platform or download a Jive Messenger installer with
bundled JVM for your operating system.</li>
<li>A supported database with a robust JDBC 2.0 compliant driver.
Supported databases and recommended JDBC drivers are detailed in the
database documentation below. Alternatively, you can use the embedded database.</li>
</ul>
<h2>Installation Overview</h2>
<p>To complete the installation of Jive Messenger, you'll need to
perform each of the following steps: </p>
<ol>
<li><a href="#database">Database</a> - prepare your database for Jive
Messenger. </li>
<li><a href="#config">Setup</a> - Use the built in web based setup
tool to setup and verify the server configuration.</li>
<li><a href="#tools">Admin Tool</a> - use the web-based admin tool to
manage the server.</li>
</ol>
<h2><a name="distribution">Files in the Distribution</a></h2>
<p> The files in your distribution should be as follows (some
sub-directories omitted for brevity): </p>
<pre>jive_messenger/
|- readme.html
|- license.html
|- conf/
|- bin/
|- lib/
|- plugins/
|- admin/
|- resources/
|-database/
|-security/
|- documentation/</pre>
<ul>
<li>The <tt>conf</tt> directory is where Jive Messenger stores
configuration files.</li>
<li>The <tt>bin</tt> directory contains the server executable scripts.
Run startup.bat or startup.ssh. If you used the Jive Messenger installer,
native executables are also provided for your convenience. Below the base
directory are platform specific deployment tools for running Messenger as service, etc.</li>
<li>The <tt>lib</tt> directory contains libraries necessary for
running Jive Messenger.</li>
<li>The <tt>plugins</tt> directory contains server plugins. By
default, Jive Messenger ships with a web-based admin console plugin.</li>
<li>The <tt>resources/database</tt> directory contains SQL schema files to
create new Jive Messenger databases, as well as upgrade scripts for
existing installations. </li>
<li>The <tt>resources/security</tt> directory is where Jive Messenger
maintains keystores to support SSL connection security.</li>
<li>The <tt>documentation</tt> directory contains server
documentation.</li>
</ul><p>
<h2><a name="database">Setting Up the Database</a></h2>
<p> <a>Jive Messenger uses a database to store it's data. To setup
your
database you must load the appropriate database schema. You can find
schemas in the <tt>resources/database</tt> directory of this distribution. View
the </a><a href="database.html">database
setup</a> documentation to learn how to install the schemas and JDBC
drivers.</p>
<p> Complete the database steps outlined in the database setup
documentation before proceeding further.<br>
</p>
<h2><a name="config"></a>Setup the Server</h2>
<p>A web based, "wizard" driven setup and configuration tool is built
into
Jive Messenger. Simply launch Jive Messenger and use a web browser to
connect to the admin console. The default port for the
web-based admin console is 9090. If you are on the same machine as Messenger the
following URL will
usually work: <a href="http://127.0.0.1:9090">http://127.0.0.1:9090</a>.</p>
<p>If you used the Jive Messenger installer, a shortcut for starting the
application is provided. Starting the server using this icon starts a
graphical launcher application. A button
on the launcher allows you to automatically open your web browser to
the correct URL
to finish setting up the server. Large deployments should use the
command line or Windows Service or *nix deployment options described
below to properly configure JVM settings before using. If you didn't
use the installer, you can start Jive Messenger using the startup script
in the <tt>bin</tt> directory.
<p>If you want to manually set up the server, edit the <tt>conf/jive-messenger.xml</tt>
file. To bypass the server's normal setup mode after manually
configuring the server, add
a &lt;setup&gt;true&lt;/setup&gt; element to the XML file to indicate
that the server
has been setup.</p>
<p>
If you wish to use SSL, run the keytool application that ships with the
Sun JDK to add the appropriate server certificates to the keystore
located in the <tt>security</tt> directory. Self-signed certificates
will work fine for testing. We've provided a dummy self-signed
certificate for your server if it is 127.0.0.1 (the localhost).</p>
<!--
<h3>Windows Service</h3>
<p>If you're running Messenger on Windows, you will eventually want to
run Messenger as a standard Windows service.
In order to do this, make sure the <tt>JAVA_HOME</tt> environmental
variable is set to the base directory of your JRE/JDK directory or the <tt>jre</tt>
sub directory of your installation if you
installed a built-in JRE (Control Panel, System, Advanced, click on the
"Enviromental Variables" button). Next, copy all the files
from the <tt>bin/windows</tt> to the <tt>bin</tt> directory. Edit the
<tt>config/wrapper.conf</tt> file to allocate the proper amount of heap
memory
for your deployment. On most systems, Messenger will need about 256MB
of heap memory for each 1000 simultaneous connections (<a href="note1">1</a>).<br>
</p>
<p>Run <tt>install-messengerd.bat</tt> to install Messenger as a
windows service.
Now you can use the Control Panel, Administration Tools, Services
applet to start, stop, and restart Messenger as well as determine if it
starts with the server, what happens on failures, etc. Uninstall the
Messenger windows service by running
<tt>uninstall-messenger.bat</tt>.</p>
<p>You can also run Messenger directly using the included <tt>messengerd.bat</tt>
script using the same
service wrapper code that the Windows service uses. The service wrapper
provides quality of service tools that
ensure high reliability operation of Messenger including detecting hung
or failed processes and automatically
restarting Messenger.</p>
<h3>Solaris/Linux/MacOS X Deployment</h3>
<p>If you are deploying Messenger on these three supported Unix
systems, platform specific startup scripts and helper
applications are provided in the <tt>bin</tt> directory. Copy the
files from the appropriate directory into the <tt>bin</tt>
directory and set the <tt>JIVE_HOME</tt> environmental variable.&nbsp;
Edit the
<tt>config/wrapper.conf</tt> file to allocate the proper amount of heap
memory
for your deployment. On most systems, Messenger will need about 256MB
of heap memory for each 1000 simultaneous connections (<a href="#note1">1</a>).
<br>
</p>
<p>Run
the messengerd.sh shell script to start Messenger (you
may have to set it's executable permission using chmod). The wrapper
scripts and helper applications are fairly standard
daemon scripts supporting the following commands:</p>
<ul>
<li><tt>start</tt> - starts the Messenger daemon process. </li>
<li><tt>stop</tt> - stops the Messenger daemon process. </li>
<li><tt>restart</tt> - restarsts the Messenger daemon process. </li>
<li><tt>console</tt> - starts Messenger in the current shell allowing
the user to watch the Wrapper and Messenger's action on the terminal
and kill the application with CTRL-C. </li>
<li><tt>dump</tt> - sends a <tt>kill -3</tt> signal to the daemon
process causing the JVM to do a full thread dump. </li>
</ul>
<p>The deployment service wrapper increases Messenger's reliability by
running a monitor in a separate process that watches the Messenger JVM.
If the Messenger JVM runs into trouble, the wrapper will detect and
restart Messenger automatically
ensuring that Messenger continues to be available to users.</p>
-->
<h2><a name="tools">Admin Console</a></h2>
<p>After completing the above steps, Messenger will be configured
and you can use the web-based admin console to administer
the server. The URL should be the same as you used to setup the server
unless you changed the port during the setup.<br>
</p>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jive Messenger LDAP Guide</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<a name="top"></a>
<h1>Jive Messenger LDAP Guide</h1>
<h2>Introduction</h2>
<p>
This document details how to configure your Jive Messenger installation to use an external LDAP store when
authenticating users.
</p>
<h2>Background</h2>
<p>
LDAP (Lightweight Directory Access Protocol) has emerged as a dominant standard
for user authentication and for storage of user profile data. It serves as a
powerful tool for large organizations (or those organizations integrating many
applications) to simplify user management issues.
</p>
<p>
By default, Jive Messenger stores all user data in a database and performs
authentication using database lookups. The LDAP module replaces that
functionality and allows Jive Messenger to:
<ul>
<li>
Use a LDAP server to authenticate a user's identity.
</li>
<li>
Load and store user profile information in a LDAP directory.
</li>
</ul>
</p>
<p>
This document will guide you through preparing your LDAP server and provide
details about how to install the LDAP module on Jive Messenger. These
instructions assume that you're a competent LDAP user, and that you're familiar
with Jive Messenger setup issues. The iPlanet Directory Server 5.0 LDAP server
was used for development and testing, but any LDAP compliant server should also
work.
</p>
<h2>Choosing an LDAP storage mode</h2>
<p>Two modes for storing user data in an LDAP directory are supported:
<ol>
<li>
Mixed Mode (LDAP and User Database) -- Username, name and email are stored in
LDAP. All Jive-specific data is stored in the Jive Messenger user database.
This mode requires no changes to your LDAP directory.
</li>
<li>
Pure LDAP Mode -- All user data is stored in LDAP, including Messenger-specific
data. This mode requires you to make changes to your LDAP schema.
</li>
</ol>
The first option is easier to setup and is generally the better solution.
However, the second option is also appropriate in some cases.
</p>
<h2>Configuration</h2>
<p>
In order to configure your server to use LDAP you need complete the following
tasks:
<ol>
<li>
Stop Messenger.
</li>
<li>Edit <tt>MESSENGER_HOME/config/jive-messenger.xml</tt> as described below.
</li>
<li>
Restart Messenger.
</li>
</ol>
</p>
<h3>Configure Messenger</h3>
<p>
Open the Messenger configuration file <tt>MESSENGER_HOME/config/jive-messenger.xml</tt> in your favorite
editor and add or change the following settings:
</p>
<ul>
<li>UserProvider.id.className - com.jivesoftware.xmpp.ldap.LdapUserIDProvider</li>
<li>UserProvider.properties.className</li>
<li>UserProvider.info.className</li>
<li>UserProvider.account.className</li>
<li>UserProvider.roster.className</li>
<li>ldap.host - LDAP server host; e.g. localhost or machine.example.com, etc.</li>
<li>ldap.port - LDAP server port number</li>
<li>ldap.usernameField - The field name that the username lookups will be performed on.</li>
<li>ldap.baseDN - The starting DN that searches for users will performed with. The entire subtree under the base
DN will be searched for user accounts.
</li>
<li>ldap.nameField - The field name that holds the user's name.</li>
<li>ldap.emailField - The field name that holds the user's email address.</li>
<li>ldap.adminDN - A directory administrator's DN. All directory operations will be performed with this account.
For normal usage of the module, the admin should have full administrative controls over the directory.
</li>
<li>ldap.adminPassword - The password for the directory administrator.</li>
<li>ldap.debugEnabled - A value of "true" if debugging should be turned on. When on, trace information about
buffers sent and received by the LDAP provider is written to System.out</li>
<li>ldap.sslEnabled - Enable SSL connections to your LDAP server. If you enable SSL connections, the LDAP server port
number most likely should be changed to 636.
</li>
<li>ldap.mode - "0" for all LDAP mode, "1" for mixed LDAP/Jive DB mode</li>
</ul>
<p>
Below is a sample set up.
</p>
<pre><code>
&lt;jive&gt;
...
&lt;UserProvider&gt;
&lt;id&gt;
&lt;className&gt;org.jivesoftware.messenger.ldap.LdapUserIDProvider&lt;/className&gt;
&lt;/id&gt;
&lt;properties&gt;
&lt;className&gt;org.jivesoftware.messenger.ldap.LdapUserPropertiesProvider&lt;/className&gt;
&lt;/properties&gt;
&lt;info&gt;
&lt;className&gt;org.jivesoftware.messenger.ldap.LdapUserInfoProvider&lt;/className&gt;
&lt;/info&gt;
&lt;account&gt;
&lt;className&gt;org.jivesoftware.messenger.ldap.LdapUserAccountProvider&lt;/className&gt;
&lt;/account&gt;
&lt;UserProvider&gt;
&lt;ldap&gt;
&lt;host&gt;myhost.com&lt;/host&gt;
&lt;port&gt;389&lt;/port&gt;
&lt;usernameField&gt;uid&lt;/usernameField&gt;
&lt;emailField&gt;mail&lt;/emailField&gt;
&lt;baseDN&gt;o=mycompany, c=mycountry&lt;/baseDN&gt;
&lt;nameField&gt;cn&lt;/nameField&gt;
&lt;adminDN&gt;cn=ldap-administrator&lt;/adminDN&gt;
&lt;adminPassword&gt;adm1npwd&lt;/adminPassword&gt;
&lt;debugEnabled&gt;false&lt;/debugEnabled&gt;
&lt;sslEnabled&gt;false&lt;/sslEnabled&gt;
&lt;mode&gt;1&lt;/mode&gt;
&lt;/ldap&gt;
...
&lt;/jive&gt;
</code></pre>
<h2>Configure the LDAP Server (optional)</h2>
<p>
<b>Note:</b> If you use the "mixed mode" of the Jive Messenger LDAP module, no changes to your LDAP directory are
necessary. However, if you use the "pure mode", you'll need to make changes to your directory as detailed below.
Several custom LDAP attributes are used to store things such as the numeric Jive Messenger user ID,
the date the account was created, privacy flags, etc. The first step is to define these attributes in your LDAP
directory.
</p>
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>OID</th>
<th>Multi-valued</th>
<th>Description</th>
</tr>
<tr>
<td>jiveUserID</td>
<td>Integer </td>
<td>1.3.6.1.4.1.10985.389.2 </td>
<td>No </td>
<td>A numeric ID that Jive Messenger uses to identify a user.</td>
</tr>
<tr>
<td>jiveNameVisible </td>
<td>String </td>
<td>1.3.6.1.4.1.10985.389.3 </td>
<td>No </td>
<td>The value is "true" if a user wishes to show their name publicly; "false" otherwise.</td>
</tr>
<tr>
<td>jiveEmailVisible </td>
<td>String </td>
<td>1.3.6.1.4.1.2.10985.389.4 </td>
<td>No </td>
<td>The value is "true" if a user wishes to show their email address publicly; "false" otherwise.</td>
</tr>
<tr>
<td>jiveCDate </td>
<td>String </td>
<td>1.3.6.1.4.1.10985.389.6 </td>
<td>No </td>
<td>The date the user became a Jive Messenger user.</td>
</tr>
<tr>
<td>jiveMDate </td>
<td>String </td>
<td>1.3.6.1.4.1.10985.389.7 </td>
<td>No </td>
<td>The date the user information was last updated.</td>
</tr>
<tr>
<td>jiveProps </td>
<td>String </td>
<td>1.3.6.1.4.1.10985.389.8 </td>
<td>Yes </td>
<td>A collection of extended properties for the user.</td>
</tr>
</table>
<p>Next, you can optionally create a new object class that uses the specified attributes
(or modify an existing object to add the attributes). The Jive Messenger LDAP module does not actually pay attention to
object types, but only looks for the correct attributes. If you do create a new object, the object name should be
"jivePerson" with an OID of 1.3.6.1.4.1.2.10985.389.1.
</p>
<p>
Each of the attributes listed above must be added as an optional attribute since the attributes will not be
created until the user logs into Jive Messenger for the first time.
</p>
<p>
Also, you may wish to create an index on the "jiveUserID" attribute so that lookups on that field are fast.
</p>
</body>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jive Messenger SSL Guide</title>
<link type="text/css" rel="stylesheet" href="style.css">
</head>
<body>
<a name="top"></a>
<h1>Jive Messenger SSL Guide</h1>
<h2>Introduction</h2>
<p>
This document outlines how to configure your SSL setup. Jive
Messenger's SSL support
is built using the standard Java security SSL implementation
(javax.net.ssl.SSLServerSocket).
Java security allows implementations of the JVM flexibility in how
security is implemented.
Unfortunately, the flexibility means there is no definitive mechanism
for configuring SSL security on
all JVMs. You must consult the documentation for your JVM in creating a
valid keystore and truststore
and populating those with the SSL certificates needed for your
deployment. In this document, we will describe how use the standard JDK
1.4 tools to accomplish these tasks.
</p>
<h2>Background</h2>
<p>
A server SSL connection uses two sets of certificates to secure the
connection. The first set is called a "keystore". The keystore contains
the keys and certificates for the server. These security credentials
are used to prove to clients that the server is legitimately operating
on behalf of a particular domain.
If your server will only need to act as one domain, you only need one
key entry and certificate in the keystore.
Keys are stored in the keystore under aliases. Each alias corresponds
to a domain name (e.g. "server.com").
</p>
<p>
The second set of certificates is called the "truststore" and is used
to verify that a client is legitimately
operating on behalf of a particular user. In the vast majority of
cases, the truststore is empty and the server
will not attempt to validate client connections using SSL. Instead, the
XMPP authentication process verifies users
in-band. However, you may wish to require SSL authentication for
certain clients when security is especially
important and the number of clients connection to the server is
relatively small.
</p>
<p>
Certificates attempt to guarantee that a particular party is who they
claim to be.
Certificates are trusted based on who signed the certifcate. If you
only require light security,
are deploying for internal use on trusted networks, etc. you can use
"self-signed" certificates.
Self-signed certificates encrypts the communication channel between
client and server. However
the client must verify the legitimacy of the self-signed certificate
through some other
channel. The most common client reaction to a self-signed certificate
is to ask the user whether
to trust the certificate, or to silently trust the certificate is
legitimate. Unfortunately, blindly accepting self-signed certificates
opens up the system to 'man-in-the-middle' attacks.
</p>
<p>
The advantage of a self-signed certificate is you can create them for
free which is great
when cost is a major concern, or for testing and evaluation. In
addition, you can safely
use a self-signed certificate if you can verify that the certificate
you're using is legitimate. So if
a system administrator creates a self-signed certificate, then
personally installs it on a client's
truststore (so that the certificate is trusted) you can be assured that
the SSL connection will only
work between the client and the correct server.
</p>
<p>
For higher security deployments, you should get your certificate signed
by a certificate authority (CA).
Clients truststores will usually contain the certificates of the major
CA's and can verify that a CA has
signed a certificate. This chain of trust allows clients to trust
certificate from servers they've never
interacted with before. Certificate signing is similar to a public
notary (with equivalent amounts of
verification of identity, record keeping, and costs).
</p>
<h2>Sun JDK 1.4 security tools</h2>
<p>
The Sun JDK (version 1.4.x) ships with all the security tools you need
to configure SSL with Jive
Messenger. The most important is the <tt>keytool</tt> located in the <tt>JAVA_HOME/bin
directory</tt> of the JDK.
Sun JVMs persist keystores and truststores on the filesystem as
encrypted files. The <tt>keytool</tt> is used to
create, read, update, and delete entries in these files. Jive Messenger
ships with a self-signed "dummy" certificate
designed for initial evaluation testing. You will need to adjust the
default configuration for most deployments.
</p>
<p>
In order to configure SSL on your server you need complete the
following tasks:
</p>
<ol>
<li>Decide on your Jive Messenger server's domain.</li>
<li>Create a self-signed SSL server certificate for your server
domain. Note: you may already have one if your Jive Messenger server
domain matches an existing web domain with SSL.
If so, you can skip to step 4.</li>
<li>[Optional] Have a certificate authority (CA) certify the SSL
server certificate.
<ol style="list-style-type: lower-alpha;">
<li>Generate a certificate signing request (CSR).</li>
<li>Submit your CSR to a CA for signing.</li>
</ol>
</li>
<li>Import the server certificate into the keystore. Note: if you are
going to use a self-signed certificate
generated in step 2, the certificate is already imported and you can
skip this step.</li>
<li>Import client certificates into the truststore.</li>
<li>Adjust the Messenger configuration with proper keystore and
truststore settings.</li>
</ol>
<h3>1 Decide on a Server Domain</h3>
<p>
The Messenger server domain should match the host name of the server;
for example, "server.com". Your
user accounts will have addresses with the format "user@server.com"
like email addresses. We'll assume
the domain is "server.com" for the rest of the examples.
</p>
<h3>2 Create a self-signed server certificate</h3>
<p>
In order to create a self-signed server certificate go to the command
line and change directories to the <tt>MESSENGER_HOME/security</tt>
directory. You should see the default
<tt>keystore</tt> and <tt>truststore</tt> files. First, you should
change the default keystore
password:
</p>
<p><tt>keytool -storepasswd -keystore keystore</tt></p>
<p>
keytool will ask for the old password (by default it is <tt>changeit</tt>)
then the new password.
Now we'll create a certificate using the keytool:
</p>
<p><tt>keytool -genkey -keystore keystore -alias server.com</tt></p>
<p>
where you should substitute your server's name for <tt>server.com</tt>.
The keytool will
ask for the store password, then several pieces of information required
for the certificate.
Enter all the information and the keytool will ask you to verify the
information and set
a key password. <b>You must use the same key password as the store
password.</b> By default
you get this by simply hitting 'enter' when prompted for a key
password.
</p>
<h3>3 Obtain a CA signed certificate</h3>
<p>
If you decide to get a CA signed certificate, you must first export the
certificate in the
standard CSR format. You can do this with the keytool:
</p>
<p><tt>keytool -certreq -keystore keystore -alias server.com -file
certificate_file</tt></p>
<p>
Where you should substitute your server's name for <tt>server.com</tt>
and the name of the
certificate file you wish to produce for <tt>certificate_file</tt>.
Submit the generated CSR to the CA and follow their instructions to get
it signed.
</p>
<h3>4 Import server certificates</h3>
<p>
If you had a CA sign your server certificate, or if you have an
existing SSL certificate,
you must import it using the keytool.
</p>
<p><tt>keytool -import -keystore keystore -alias server.com -file
signed_certificate_file</tt></p>
<p>
It is important that the alias not already have an associated key or
you'll receive an error.
</p>
<h3>5 Import client certificates</h3>
<p>
If you require clients to verify themselves using certificates, obtain
their certificates and import them into the truststore file rather than
the keystore. First, you should change the default truststore
password:
</p>
<p><tt>keytool -storepasswd -keystore truststore</tt></p>
<p>
keytool will ask for the old password (by default it is <tt>changeit</tt>)
then the new password.
Now import each certificate using the keytool:
</p>
<p><tt>keytool -import -keystore truststore -alias user_name -file
certificate_file</tt></p>
<h3>6 Configure Messenger</h3>
<p>
Open the Messenger configuration file <tt>MESSENGER_HOME/config/jive-messenger.xml</tt>
in your favorite
editor and change the following settings:
</p>
<ul>
<li>jive.xmpp.socket.ssl.active - set to 'true' to active SSL</li>
<li>jive.xmpp.socket.ssl.port - the port to use for SSL (default is
5223 for XMPP)</li>
<li>jive.xmpp.socket.ssl.storeType - the store type used ("JKS" is
the Sun Java Keystore format used by the JDK keytool).</li>
<li>jive.xmpp.socket.ssl.keystore - The location of the keystore file
relative to the <tt>MESSENGER_HOME</tt> root directory.</li>
<li>jive.xmpp.socket.ssl.keypass - The keystore/key password you
changed in step 2.</li>
<li>jive.xmpp.socket.ssl.truststore - Leave blank to not use a
truststore, otherwise the location of the truststore file relative to
the <tt>MESSENGER_HOME</tt> root directory.</li>
<li>jive.xmpp.socket.ssl.trustpass - The truststore/key password you
changed in step 5.</li>
</ul>
<p>
Below is a sample set up with no truststore.
</p>
<pre><code>
&lt;jive&gt;
&lt;xmpp&gt;
&lt;socket&gt;
&lt;ssl&gt;
&lt;active&gt;true&lt;/active&gt;
&lt;port&gt;5223&lt;/port&gt;
&lt;storeType&gt;JKS&lt;/storeType&gt;
&lt;keystore&gt;security/keystore&lt;/keystore&gt;
&lt;keypass&gt;changeit&lt;/keypass&gt;
&lt;truststore/&gt;
&lt;trustpass/&gt;
&lt;/ssl&gt;
&lt;/socket&gt;
&lt;/xmpp&gt;
&lt;/jive&gt;
</code></pre></body>
</html>
BODY {
font-size : 100%;
background-color : #fff;
}
BODY, TD, TH {
font-family : tahoma, arial, helvetica;
font-size : 0.8em;
}
PRE, TT, CODE {
font-family : courier new, monospaced;
font-size : 1.0em;
}
A:hover {
text-decoration : none;
}
LI {
padding-bottom : 4px;
}
H1 {
font-size : 1.4em;
font-weight : bold;
width : 100%;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
H2 {
font-size : 12px;
font-weight : bold;
}
H3 {
font-size : 12px;
font-weight : bold;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
.subheader {
font-weight : bold;
}
.footer {
font-size : 0.8em;
color : #999;
text-align : center;
width : 100%;
border-top : 1px #ccc solid;
padding-top : 2px;
}
.code {
border : 1px #ccc solid;
padding : 0em 1.0em 0em 1.0em;
margin : 4px 0px 4px 0px;
}
.nav, .nav A {
font-family : verdana;
font-size : 0.85em;
color : #600;
text-decoration : none;
font-weight : bold;
}
.note {
font-family : verdana;
font-size : 0.85em;
color : #600;
text-decoration : none;
font-weight : bold;
}
.nav {
width : 100%;
border-bottom : 1px #ccc solid;
padding : 3px 3px 5px 1px;
}
.nav A:hover {
text-decoration : underline;
}.question {
font-weight: 600;
}
.answer {
font-weight: 300;
}
.toc {
right: 5px;
}
TABLE.dbtable {
border : 1px #ccc solid;
width : 600px;
}
TR, TH {
border-bottom : 1px #ccc solid;
}
TH, TD {
padding-right : 15px;
}
TH {
text-align : left;
white-space : nowrap;
background-color : #eee;
}
.primary-key {
background-color : #ffc;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment