日期:2009-03-18  浏览次数:20475 次

Jive talkin':开放源码的 Java 论坛软件
Jive 与您的网站相结合 Jay Allen (allenj@us.ibm.com(allenj@us.ibm.com))lockerjock.com 公司总裁2001年2月

Jive 是一个开放源码的 Java 论坛软件,它允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的 JSP 文件(用 Jive 的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的 API, 这些 API 提供诸如及时翻译、内容过滤或者几乎其它所有功能的先进特性。然而除此之外还有很多的自由论坛, Jive 的独到之处是它的全部代码都用 Java 编写并且被一个专注的程序员群体热情的支持着。在这篇文章中,将讨论到如何将 Jive 结合到 lockerjock,一个有关运动题材的网站。
lockerjock.com 是一个有关运动题材的站点,它以每日提问、全球竞赛排行榜、问题统计、民意测验、和有关细节题材为主要特征。随着大量用户开始从站点中得到更多的乐趣,站点需要一个论坛让可以让用户进行交互。我们考虑自己编写一个论坛软件,但是由于开发 lockerjock; 所付出的大量劳动而感到疲劳,并且白手起家编写论坛软件所到来的挑战使我们有些气馁,因此,我们开始寻找一些已有的优秀的论坛软件。
注:可以利用 Jive 的内建 数据库连接池或者使用许多 J2EE 应用程序服务器的内建连接池。
很快我们就决定采用 Jive,正如 lockerjock.com 一样, Jive 采用服务器端 Java,支持我们的数据库(mySQL)和应用服务器(JRun),并采用 JSP 文件表示。我们不仅是只有一个论坛,而是可以有很多个性化的论坛。所有的论坛都能很好的和 lockerjock.com 结合在一起。安装 Jive 和创建 Jive 表一样简单。将 jive.jar 文件拷贝到 classpath 目录下,将论坛和管理 JSP 文件放在站点的合适的位置,并运行 Jive 安装页面。唯一的问题就是我们的 JSP 版本是 0.92,而 Jive 需要 JSP 1.0 或者更高的版本。因此我花了几天时间将 JSP 升级到最新版本。
Jive 是如何工作的?
Jive 由一系列的存在 SQL 数据库中的表以及一系列的类库组成,这些表中存放论坛数据,类库操纵表、JSP 文件,并能显示论坛数据。两套待用的 JSP 文件和 Jive 一起提供;它们的功能相同,显示论坛并允许用户和论坛交互。lockerjock.com 用的一套是 viewForum.JSP,viewMessage.JSP 和 post.JSP。这些 JSP 文件的功能如它们的名字一样。 如果想在发送消息和访问论坛时使用 Jive 验证方案,正好可以使用这些文件。
Example 1: 一个简单的 Jive 应用程序
清单 1 列出的 JSP 文件利用了 Jive 主要对象来显示一个给定论坛中线程的名称。后面会详细的讨论每个对象和方法,但是这里给出的概念对理解 Jive 是如何工作是非常重要的。
l         在开始任何 Jive 操作之前,首先创建一个 Jive 授权令牌,在本例中将创建一个匿名授权令牌。
l         利用授权令牌,创建一个具体的论坛工厂。
l         从论坛工厂创建一个论坛,如果授权令牌的许可和论坛的许可集不匹配,将抛出一个异常,而且用户不能访问论坛。
l         对论坛中的每一个线程迭带,打印出每个线程的名称。
清单 1:打印论坛中每个线程的名字

<%@ page import="java.util.Iterator,com.coolservlets.forum.*" %>
<%
   //JSP to print out the names of all the threads in a forum.
   //Get an anonymous authorization object.
   Authorization auth = AuthorizationFactory.getAnonymousAuthorization();
   ForumFactory factory = ForumFactory.getInstance(auth);
   //Loading a forum object throws an Unauthorized exception if the
   //the permissions set on the forum don't correspond to your access level.
   try {
       //Load the forum named myForum
       Forum forum = factory.getForum("myForum");
       //Get an iterator for all the threads in myForum
       Iterator threads = forum.threads();
       while (threads.hasNext() ) {
           ForumThread thread = (ForumThread)threads.next();
%>
       <%= thread.getName() %>
<%
       }
   }
   catch (UnauthorizedException ue) {
     System.err.println("You do not have permission to read this forum.");
   }
%>

Jive Example 2: 定制 Jive
在 lockerjock 我们已经拥有了一些客户以及自己的客户授权方案,因此,如果不修改 Jive 授权方案,我们就无法使用它。我们需要将 Jive 用户授权方案和我们的用户授权方案融合。在我修改 Jive 代码中的 SQL 使它从我们的用户数据表而不是 Jive 表中查询之前,我觉得如果使用 Jive 用户数据表将会非常简单,并且将来需要很少的维护因此,我决定同时保持两套用户数据表。当一个 lockerjock 用户被创建,我同时创建一个 Jive 用户;当一个用户改变了它的数据,我将更新 Jive 表中的数据。为了将所用到的所有