随着以 Linux、Apache 和其他项目为代表的 开放源代码运动的出现,IT 领域出现了很大变化。在过去的几年中,一些有影响的组织(联盟、工作组和委员会)设计了 IT 系统的标准。这些工业标准(统称为 开放标准)是为了降低集成来自不同厂商的产品所带来的挑战。
开放源代码运动最近从主流 IT 公司得到了大量的支持,其中包括 IBM、Sun、Oracle、Computer Associates 和 Novell。这使得开放源代码运动从学院和少数人的选择走向主流。(作者的儿子甚至有他自己的 Linux 桌面!)
本系列文章包括三部分,考察了 Domino 6 如何实现各种不同的开放标准,以及如何使用开放源代码完善和扩展 Domino 6 的功能。第 1 部分中,我们讨论 Domino 6 实现的开放标准,并介绍将在后面的文章中讨论的几个重要的开放源代码项目。第 2 部分和第 3 部分将讨论如何使用一些已有的开放源代码项目扩展 Domino 6 的功能。这些文章将包括可以工作的示例代码和软件包。
本文假设您是一位熟练的 Notes 应用程序开发人员。
一些开放标准体制定了标准、规范和 RFC(请求注释)。本文中涉及到的一些重要标准体包括:
- The Internet Engineering Task Force(Internet 工程任务组,IETF)
- World Wide Web consortium(万维网联盟,W3C)
- Java Community Process(Java 社区进程,JCP)
- Organization for the Advancement of Structured Information Standards(结构化信息标准推进组织,OASIS)
- Object Management Group(对象管理组,OMG)
- Ecma
与 Domino 6 有关的开放标准可以分成两大类:Internet 协议、应用程序和数据协议。
我们首先分析与 Internet 有关的协议。下面是本系列文章中将讨论的一些重要协议和相应的 RFC:
| 名称 | RFC |
| Hypertext Transfer Protocol(超文本传输协议,HTTP/1.0) | 1945 |
| Hypertext Transfer Protocol(超文本传输协议,HTTP/1.1) | 2616 |
| Session Initiation Protocol(会话发起协议,SIP) | 3261 |
| Session Initiation Protocol(SIP)--Specific Event Notification | 3265 |
| Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile(Internet X.509 公共密约基础设施证书和证书撤销列表子协议) | 3280 |
| Definition of the inetOrgPerson LDAP Object Class(inetOrgPerson LDAP 对象类定义) | 2798 |
| Lightweight Directory Access Protocol version 3(轻型目录访问协议,LDAP v3) | 3673 |
| LDAP Data Interchange Format(LDAP 数据交换格式,LDIF) | 2849 |
| POP3 Extension Mechanism(POP3 扩展机制) | 2449 |
| Internet Message Action Protocol(Internet 消息动作协议,IMAP4) | 3348 |
| Simple Mail Transfer Protocol(简单邮件传输协议,SMTP) | 2821 |
| Internet Inter-Orb Protocol (IIOP) | CORBA/IIOP |
Domino 在 R5 中支持上述多数协议。Domino 6 在其核心服务器上实现了这些标准,并通过这些标准协议公开本机功能。这使得 Domino 成为一种健壮的 Web 服务器,在向传统的 Domino NSF(Notes 存储设备)数据格式提供一幅 Web “面孔”的同时实现了 HTTP RFC。对于应用程序访问,Domino 在其 DIIOP(作为插入的服务器任务)中支持 IIOP,使 Java 能够远程访问传统的 Domino 数据格式。同时,Domino 服务器仍然可以访问 Domino 数据。此外,Domino 服务器上也有 LDAP 服务器的实现(作为插入的服务器任务),通过 LDAP 公开传统的 Domino Directory 数据。Domino 还提供了所有与邮件相关的 RFC 的实现,支持使用 POP3 和 IMAP 客户机访问邮件文件、使用 SMTP 发送和接收邮件,也支持 MIME。
Domino 可以作为 X.509 Certificate Authority(证书权威,CA)。在 Domino 6 中原有的 Notes 证书和标准的 X.509 证书结合在一起。除了作为 CA 外,Domino 在服务器和客户端完全支持 Secure Socket Layer(安全套接字层,SSL)
Lotus Instant Messaging(即时消息,原来的 Sametime)现在也支持 Session Initiation Protocol(会话发起协议,SIP),在已有的通信方法上增加了一种传输机制。在 Lotus Instant Messaging 3.x 中,作为连接两个不同 Lotus Instant Messaging 体、或者连接一个 Lotus Instant Messaging 体和一个支持 SIP 的非 Lotus 体的一种方式引入了 SIP。随着语音 IP(VoIP)和多媒体/实时协议的融合,SIP 逐渐被业界接受,现在已成为在 Internet 上建立基于信号的、类似电话的会话的事实标准。Lotus Instant Messaging 以后的版本将对 SIP 和相关标准提供更多的核心支持。
看一看与 OSI 模型的数据/应用程序层有关的标准,我们会看到在这个舞台上控制着各种技术标准的一些角色。其中包括:
- Extensible Markup Language(可扩展标记语言,XML)和 Document Object Model(文档对象模型,DOM)
- XML Schema(XML 模式)
- XML Schema Language Transformation(XML 模式语言转换,XSLT)
- Simple Object Access Protocol(简单对象访问协议,SOAP)
- Web Services Definition Layer(Web 服务定义层)
- Universal Description, Discovery, and Integration of Web Services(Web 服务统一描述、发现和集成,UDDI)
- Scalable Vector Graphics(可缩放向量图形,SVG)
- Security Assertion Markup Language(安全断言标记语言,SAML)
- Unified Modeling Language(统一建模语言,UML)
- RDF Site Summary, Rich Site Summary, Really Simple Syndication(RDF 站点提要,丰富站点提要,真正简单的连锁,RSS) 1.0和 2.0
我们将会看到,如何利用这些标准和 Domino 6 解决您所遇到的实际问题。
从一定意义上讲,开放源代码和开放标准已经变成了同义词。但是还有一些区别。许多开放源代码项目和一个或多个开放标准有关。多数情况下,开放源代码项目提供了开放标准体所建议的规范或标准的参考实现。比如,Apache 的 Jakarta 项目提供了 J2EE Servlet 和 JSP 规范的参考实现,SendMail 实现了 SMTP RFC,OpenLDAP 实现了 LDAP RFC,OpenSAML 实现了 SAML 规范。
开放源代码的一个挑战是最近几年出现了许多新的项目。这使得跟踪和评估不断变化和增长的开放源代码软件非常困难。另外一个挑战是一些开放源代码项目是主动维护的,另一些则由志愿者偶尔更新一次,还有一些由于数年没有活动而消亡了。
本文中将分析最近一段时间得到广泛认可和成功的开放源代码项目,重点是与 Domino 6 有关的那些项目。我们把开放标准和开放源代码项目分成不同的类别:
- 应用程序开发
- 用户界面/数据表示
- 应用程序到应用程序
- 安全
下面几小节依次讨论这些类别。
我们开始对开放源代码产品的探索,首先简要介绍一些设计用于帮助应用程序开发的项目。下一篇文章中,我们将看到 Domino 开发人员可以如何利用这些标准和项目。
Eclipse
好的开发人员都需要一个集成开发环境(IDE),在选择的平台上和他喜欢的语言中进行开发、单元测试和调试。Domino 开发人员中最流行的语言有 Lotus Formula 语言、LotusScript 和 Java。Domino 的设计者为这些语言提供了一个很好的 IDE。但是,如果需要开发
Struts应用程序、C# 应用程序或者动态语言应用程序(当然更好,如 Python 或 Groovy),每种语言都需要单独的 IDE。
称为 Eclipse的开放源代码框架为希望涉足上述任何一种非 Domino 专用语言的开发人员提供了单一的 IDE。Eclipse 最初是一个 Java 开发项目,但是因为它是一个框架,为您所选择的平台或语言提供了插件开发。因为它是基于 Java 的,可以在所有主要桌面(Windows、Linux 和 Macintosh)都能运行。比如,作者曾经建立了一个 Eclipse IDE 用于编译 C、C++、C#、Java 和 Python,并使用 UML 2 建模。这种方式提供了高端的 Web 开发、J2EE 应用程序开发、XML 编辑和单元测试。所有这些都运行在单一的 Linux 工作站上。(如何启动 Eclipse IDE 请参阅上面的侧栏。)
.NET
随着 Microsoft 引入 .NET,传统的 Visual Basic/Active Server Pages/组件对象模型(COM)/Microsoft Transaction Server(微软事务服务器,MTS)应用程序都迁移到了 Visual Basic.NET、C# 和新的 .NET 框架。有一个名为
Mono的开放源代码项目,它提供了 Linux 上 C# 编译器的实现。我们将在下一篇文章中进一步讨论 Mono。
Python
自从 90 年代初引入以来,Python 已经成为一种强大的编程语言。Python 的强大在于它的灵活性和简约性。由于 Win32 Python 中对 COM 的支持,Windows 上的 Notes/Domino 编程除了 Visual Basic 之外还可以选择使用 Python。
Java
作为一种编程语言和应用程序框架,Java 的使用在近五年来得到了很大发展。有很多开放源代码项目帮助您涉足已有的刚出现的 Java 技术。
JCP(Java Community Process)是一个开放标准体,它为各种 Java API 提供规范和参考实现。比如,JSR 168 是建立 portlet 的 Java API 规范,JSR 180 是用于 J2ME 的 SIP API,等等。后面的文章中将讨论基于 Apache 的 Java 项目。
对于数据的存储、访问和表示,Domino 一直是一个很好的平台。另外,IBM/Lotus 敞开胸怀拥抱了 XML 及相关技术。Domino 6 本身支持 XML 函数和解析调用。XML 自身是 W3C 建议的开放标准。您可以通过
XML 规范了解详细的细节。转换 XML 数据的相关技术(如 XSLT/XPATH/XPointer)也都是标准化的。最初的 XML 解析器是 IBM/Lotus 用 C/C++ 编写的,贡献给了 Apache Software Foundation(Apache 软件基金,ASF)。
Cocoon
Apache Jakarta 的一个重要项目称为
Cocoon,其目标是用最少的编码传递基于 XML 的发布框架(使用 XML 和 XSLT)。它允许您生成 PDF 文件、XLS 电子表格或者动态网页,而不需要实际打开一个 IDE 编译任何代码。Cocoon 是一个 J2EE 应用程序,可以放在任何 J2EE Web 容器中(如 Tomcat 或 WebSphere)。下一篇文章中将更详细地分析 Cocoon。
GUI 工具箱
为了向 Unix 桌面提供丰富的客户机,您需要 GUI 工具箱使用所选择的语言建立复杂的用户界面。Java SWING 提供了一个基于 Java 的 GUI 环境。GTK+(
GIMP Toolkit)是为 Unix 和 Linux 平台提供的另一个库。
GNU使用 GTK+ 建立其 GNOME 桌面。对于 GTK+ 也可以使用 C# 绑定(在 GTK# 中)。还有另一种流行的 GUI 工具箱,称为
wxWidgets,也建立在 GTK+ 上。它提供了本机 C++ 绑定,以便在 Windows、Unix、Macintosh 和 Linux 上建立 GUI 应用成。wxWindows 还有一个带有 Python 绑定的变体,称为
wxPython。
SVG
Scalable Vector Graphics(可缩放向量图形,SVG)是来自 W3C 的一种基于 XML 的图形标准,为原有的网页增加了互操作性和丰富性。SVG 目前浏览器需要一个插件才能查看 SVG 图形。但是有一些开放源代码实现可以把 SVG 文件转换为 PNG 或者 JPG 文件格式。
RSS
Rich Site Summary(丰富站点摘要,RSS)是一种基于 XML 的连锁标准,随着“blog”的风行而迅速普及。Blog(
Web logging的缩写,Web 日志)是用户或者实体在 Web 上维护的在线杂志或者日记。blog 的概念最初由用户社区推动(最初在“技术爱好者”的世界中,现在已经成为主流)。多数媒体公司,甚至 2004 年的美国总统候选人都有自己的 RSS 提要。一些大学如哈佛也提供 blog 作为一种通信媒介。Blog 之所以越来越重要,是因为它从您知道并信任的来源提供当前的信息。
Web 上的多数 blog 都提供 RSS 提要,使用 RSS 聚集器和查看程序可以有效地查看提要。第二个侧栏介绍了如何安装一种开放源代码 RSS 阅读器。通过 developerWorks 文章“ Content feeds with RSS 2.0”可以进一步了解 RSS。
随着分布式计算的普及,应用程序到应用程序的通信成为一个重要的问题。在尽可能光滑地通信和互操作方面取得了很大进步。在走向定义和实现分布式应用程序间互相通信的开放标准方面,OMG 的 IIOP 是第一步。随着新的 Enterprise Java Bean (EJB) 规范的发布,现在通过
Common Secure Interoperability(通用安全互操作性,CSI)在 CORBA/IIOP 和 EJB 之间有了新的、安全的互操作性。
最近 Web Service 的发展迈出了实现应用程序集成的很重要的下一步。尽管和厂商专门的实现集成还存在挑战,Web Service 提供了一种可定义的方式,在不同平台、不同运行时框架上的应用程序之间通信。因此,Web Service 现在被看作是所有分布式系统集成问题的万能药。
本系列的下一篇文章中,我们将看到如何利用 Web Service 和 IIOP 提供 Domino 6 和其他分布式系统间的应用程序-应用程序通信。
安全是一个非常广泛的领域,涉及到很多主题。本文主要讨论支持可能与 Domino 6 共同使用的那些重要标准和项目的安全。本系列文章中我们讨论的三个主要方面是:目录、Web Service 安全和单点登录。
目录
OpenLDAP 提供了 LDAP RFC 的参考实现。本系列文章的第 2 部分中,我们将描述如何在 Linux 上安装和配置 OpenLDAP Server,然后在协同的 Domino 环境中运行它。
Web Service 安全
Web Service 有多种与安全有关的规范。可以找到这类规范的
完整清单。我们将讨论的一种技术是 SAML(Security Assertion Markup Language,安全断言标记语言)。这是 OASIS 维护的一个规范。SAML 定义了一种在分布式环境中传递验证、授权和属性数据标准格式。SAML 的适用范围不仅限于 Web Service,但是对本文而言,我们认为 SAML 可以解决一些 Web Service 安全问题。
OpenSAML提供了 SAML 规范的 Java 和 C/C++ 实现。
单点登录
SAML 常常被吹捧提供了一种单点登录(SSO)机制。随着企业门户的普及,SSO 成为一个热门话题。SSO 也是关于 Web Service 的讨论中的一个焦点。
Shibboleth是一个开放源代码项目,在学员之间提供联邦制的身份确认和访问控制。Shibboleth 利用 OpenSAML 实现其功能。
Kerberos是另一个开放项目(由 MIT 首创),目标是提供网络验证。Microsoft 在其 Windows 2000 Server 中利用了 Kerberos 技术。IBM 和 Microsoft 联合制定了用 Kerberos 提供 Web Service 安全的 规范。
本文简要介绍了适合 Domino 6 的各种不同的开放源代码项目和开放标准。下一篇文章中,我们将介绍如何利用一些开放源代码项目(包括 Cocoon、Mono、Axis、wxPython )和开放标准(如 LDAP、RSS、XML 和 Web Service)解决 Domino 环境中的实际问题。
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
-
开放源代码主页
很好地概述了开放源代码运动的由来。
-
World Wide Web consortium (W3C)网站提供了很好的开放标准信息资源
- 通过 developerWorks 文章“
Content feeds with RSS 2.0”可以进一步了解 RSS。