《Lotus Domino与IBM WebSphere的集成开发.docx》由会员分享,可在线阅读,更多相关《Lotus Domino与IBM WebSphere的集成开发.docx(8页珍藏版)》请在三一办公上搜索。
1、Lotus Domino 与 IBM WebSphere 的集成 开发【IT168技术文档】很多客户已经在其环境中集成了 IBM Lotus Domino和IBM WebSphereo本文介 绍了如何利用Domino和WebSphere各自的相对优势创建应用程序。对于很多人来说,集成是这个新的世纪中应用过滥的一个词,但它到底意味着什 么,又该如何利用它来满足应用程序开发的需要呢? IBM WebSphere技术及其集 成解决方案可以解决业务、组织和技术方面的问题。但要做到这一点,那些参与 解决方案的架构、计划和实现的人员必须在项目的目标和实现这一目标的方法上 取得一致。本文介绍了集成WebSp
2、here和Lotus Domino所涉及的几个问题。我们简要地 介绍了如何实现WebSphere/Domino集成,以及如何最大限度地利用这两种不同 系统的优势。本文假设您是一位精通Domino和/或WebSphere的开发人员。J2EE标准J2EE (Java 2 Enterprise Edition)是用于开发和主管可重用组件的标准平台 的规范。可以用这些组件来提供多层的、基于客户机和服务器的企业应用程序。 J2EE有多种实现,其中包括Sun Microsystems最初提供的参考实现、IBM的 WebSphere Application Server、BEA 的 WebLogic、Mac
3、romedia 的 JRun 和开 放源代码的J2EE兼容服务器JBoss。本文主要讨论WebSphere,但是本文内容 也适用于在上述任何一种J2EE兼容平台上开发的应用程序。(本文的描述同时 也适用于 WebSphere v4 和 v5,虽然 IBM WebSphere v4.0.x 是 J2EE 1.2 兼 容的,但它也包含很多J2EE 1.3特性。)WebSphere采用的方法是把应用程序中所有的执行部分分解到组件中,由这些组 件处理整个应用程序的不同方面。对于Domino开发人员而言,这种分解与 Domino应用程序的开发和设计有着明显的不同。比方说,Domino中没有分离UI 和业
4、务逻辑。可以直接在窗体中进行编码,使用活动(action)或者代理执行需 要的任务(尽管可以断开Domino应用程序与RDBMS或遗留系统的连接,比方说, 使用 Lotus Enterprise Integrator)。让一个 Domino 组件只负责处理 UI, 而另一个组件专门处理业务逻辑几乎是不可能的。J2EE组件WebSphere采用了完全不同的方法。图1展示了 WebSphere从一个J2EE应用 程序中分解出来的4个组件(客户、用户组件、服务器组件和遗留组件)。J2EE标准规范进一步详细规定了组件之间的交互:用户组件与服务器组件的交互其中包括: 登录(Logging) 实例化(In
5、stantiation)终止(Termination)与后端组件的交互:o 发现服务(Finding services)o 注册服务(Registering services)o 访问服务(Accessing services)客户机与服务器组件的交互其中包括:协议(Protocols)这些协议用于后端访问,包括RMI/IIOP (Remote MethodInvocation/Internet Inter-ORB Protocol)和 RMI/JRMP,或者带有不 同类型驱动程序的 JDBC (Java Database Connectivity)。事务(Transactions)不应从客户
6、机启动事务,建议事务对客户机完全透明,所以,应该在EJB (Enterprise JavaBean)中使用事务。安全性(Security)遗留组件与服务器组件的交互其中包括与外部资源的集成: 事务(Transactions)发现、注册和访问服务 Java服务o JDBCo JMS (Java 消息服务,Java Message Service)o JavaMail 等连接器(Connector)体系结构o EIS (Enterprise Information Systems)o JCA (Java Connection Architecture)这在 WebSphere Applicatio
7、n Server Express 中不受支持。在构建J2EE应用程序时,必须要知道如何定义向用户显示页面的基础信息、如 何处理输入、如何实现业务逻辑,以及如何连接到不同的数据源。这种分解是按 照J2EE规范进行的,因此每个J2EE兼容的系统都负责整个解决方案中的一部 分。J2EE体系结构J2EE体系结构是以一个4层模型为基础而建立的,该模型刻划了 J2EE兼容的 企业应用程序的特征。这4个层分别是:应用层(Application)、表示层 (Presentation)、业务逻辑层(Business Logic)和数据层(Data)。应用程序层包括在应用程序客户机容器(Application C
8、lient Container) 中运行的应用程序,后者本身是Java程序。应用程序层也包括applet, 即在Web浏览器中执行的GUI组件。表示层包括servlet。它们与applet类似,但运行在服务器上而不是运 行客户机上。这一层也包括JSP。它们运行在服务器上,以便提供响应。业务逻辑层包括EJB(Enterprise Java Beans),EJB运行在服务器上, 以便管理业务逻辑。数据层包括数据库系统(如DB2或者Oracle),以便保留各种类型的数 据。这4个层共同包含了表示完整的企业应用程序的组件。应用程序的每个组件都 是在容器中运行的。容器本身由J2EE平台提供者提供。容器向
9、组件提供特定的 部署和运行时服务(生命期、安全、事务等)。提供何种服务取决于容器。表示层和业务逻辑层可以位于不同机器上,也可以由不同的J2EE平台供应商提 供。比方说,表示层(Web容器)可以由Tomcat提供,同时,业务逻辑层(EJB 容器)可以运行在WebSphere上。这说明解决方案并不依赖单个平台供应商, 规范要求每一个J2EE兼容系统都必须支持一个表示层和一个业务逻辑层。在现代J2EE体系结构中,关注点主要集中在可伸缩性和高可靠性上。因此,可 以将这4个“传统”层次拆分成其他层,其中包括客户机、Web和中间件等。 分布式的概念也进一步得到了延伸。比如,有可能每个EJB分别位于不同的机
10、 器上。(在这种情况下,可以使用本地访问的会话Bean代替EJB,减少远程访 问的次数,从而提高效率。)此外,数据源也可以保存在不同的机器上。集成 Domino 和 WebSphere如果您熟悉Domino开发,那么您可能知道有很多应用程序都非常适合用Domino开发(比如协作、处理非结构化数据和一般表示),有些则不那么合适 (如事务处理和非常复杂的业务逻辑)。另一方面,WebSphere在复杂的事务处 理、分布式处理和连接器、可伸缩性和高可靠性方面都表现得非常出色。通过集 成Domino和WebSphere,就可以充分利用每种产品的长处,创造出与单个平台 相比能提供更多功能的应用程序。典型的
11、Domino/WebSphere集成环境,如图2所示。ClientAeh/HTTPClientCftentWeb/HHPWeh/HTTPDomino 到 WebSphere 的集成Domino到WebSphere的集成有两种方式:Domino到Web容器和Domino到 EJB容器,下面分别介绍。Domino到Web容器有三种不同的将Domino连接到Web容器的方法。在第一种方法中,Domino充 当的是Web浏览器或客户机。这种方法可以通过套接字实现,套接字非常灵活, 但需要做大量的工作,该方法也可以通过URL或URL Connection类来实现。Domino连接到Web容器的其他两种方
12、法都要用到HTTP编程模型。HTTP是一 种请求-响应式的应用程序协议,必须在请求发送之前设置请求参数。有两种通 过HTTP服务器向servlet发送数据的方法:GET和POST。这两个方法决定了 将数据发送给服务器的方式。对于GET方法,输入值被作为URL的一部分放在QUERY_STRING环境变量中发 送。当使用HTTP GET时,安全性(输入变量作为URL的一部分发送)和可以 发送的数据量(过多的输入数据会使URL变得很长)受到一定的限制。大小限 制没有直接定义,其范围是从255字节到8KB字节。如果超出这个限制,服务 器将发出错误414 (请求URL过长,Request-URI Too
13、 Large)。此外,必须在 请求URL上对数据进行编码。这种编码可能很简单(将单个字符转化成其他字 符,比如空格转化成“ ”),也可能很复杂(将特殊字符转化成三个字符% hex hex等)。比方说,如果采用UTF-8编码方案,字符串“The umlaut ufoo-bar 将被转化成“The+umlaut+A%foo-bar”,因为在UTF-8中,字符u被编码为 两个字节:C3(十六进制)和BC (hex),而字符被编码为一个字节40 (hex)。 可以在LotusScript中使用HTTP GET,也可以通过Java代理使用它。对于POST方法,数据是作为数据流发送的,数据的长度由变量CO
14、NTENT_LENGTH 设置。由于数据不是作为URL的一部分而是作为输入流在HTTP正文中发送的, 因此数据长度不受限制,所以,用POST方法可以发送更多的数据。此外,数据 也不必像在GET方法中那样必须是普通文本。与GET方法不同,数据和编码的 类型由“内容类型”定义,只能通过Java代理使用。发送给WebSphere时, 应该将字段格式化为不可分割的字段(类似GET),发送串行化的Java对象(Beans)。Web设计要点将Domino连接到Web容器时,需要获得身份验证证书。(客户验证数据可以 从服务器或者消息头中提取。)在GET请求中,LotusScript不能设置cookies,
15、但是可以设置用户名/口令信息,将它们作为基本的验证数据发送给Web服务器。 在通信开始之前用户证书(SSO标记)有可能超期(如果采用保存/排队的方式)。如果服务器出故障怎么办呢? LotusScript可以直接调用WebSphere并作出响 应,但是Java代理不能访问UI中的文档。这意味着您必须能够读取数据库中 的文档、请求进行排队、触发问题,并以用户友好的方式查询Java代理的状态。 至少成批处理多个请求的效率更高,也能处理更多的数据! 要记住每个文档都是它自己的HTTP连接/请求/响应,无论代理是否正在处理多 个记录(文档)。在访问一个富文本(rich text) Notes项目之前,您
16、必须先 保存它。Domino设计要点当然,Domino必须运行LotusScript的Web任务。该任务捕获请求并添加惟 一的后缀来获得新的响应。LotusScript和Java代理都支持基本的验证(浏览 器窗口中的登录对话框要求用户输入合法的用户名和口令),但是只有Java代 理支持SSO标记。Domino到EJB容器为了将Domino连接到WebSphere上的EJB容器,必须使用RMI/IIOP通信。 必须使用 InitialContext 通过 JNDI(Java 命名和目录接口,Java Naming and Directory Interface)访问 EHB 主页弓 |用(hom
17、e reference)。Domino R5IBM WebSphere Application Server Enterprise Edition 是支持标准 CORBA 的 惟一版本,Domino R5不具备这个条件,因此,它必须使用中介服务器。中介服 务器是一个“普通的” EJB客户程序,符合WebSphere的所有要求,起着Domino 的代理的作用。Domino R5通过(到Web容器的)HTTP、RMI和套接字与中介 服务器进行通信:图3. Domino 5/WebSphere服务器体系结构interm sdisrtt国1.习Doiftno-RS.0.13 仍财1,1 .S)LJf
18、ms 4irtEfin 登 dale但是这种配置对WebSphere有一些限制。J2EE规范规定servlet不能是RMI 服务器,只能是RMI客户机。此外,EJB不能启动自己的线程,也不能是RMI服 务器。但是,WebSphere允许使用“一般的”服务器。servlet可以是通过控制 台(虽然不能在 WebSphere Application Server Single Server Edition 中) 启动和停止的任何程序。我们建议在每台WebSphere服务器上都运行中介服务 器。从Domino R5到终结服务器的通信可以使用任何协议,不过,对于Java代理, 最好使用RMI。通信也需
19、要有到多服务器的引用,中介服务器应该有到所有EJB 容器的引用。如果必须与防火墙后的服务器对话,则应该使用RMI/IIOP代替 RMI/JRMP。中介服务器应该和WebSphere位于同一节点上。每个EJB应用程序都应该运行 一个副本,可以将该副本定义为WebSphere Apllication Server域中的通用服 务器。允许远程启动和停止中介服务器。Domino 6连接 Domino 6.x 和 WebSphere Application Server 5 时不需要中介服务器:图 4. Domino 6/WebSphere 服务器集成mss1,33这是因为 Domino 6.x 和 W
20、ebSphere Application Server 5 支持 Java 虚拟机 (JVM) 1.3(WebSphere Application Server 5 包含一些 JVM 1.4 特性,但是只有JVM 1.3得到完全支持。)WebSphere 到 Domino从WebSphere连接到Domino的方法有两种:HTTP(类似到WebSphere的Java 代理)和 Java/CORBA。WebSphere 到 Domino HTTP可以使用URL和URL Connection类将WebSphere连接到Domino HTTP。这意 味着WebSphere可以模仿浏览器或者使用Dom
21、ino servlet引擎(而且可以在 响应中传输任何内容的Domino servlet)。另一方面,Domino只能接受提交的 表单。这里必须避免使用按钮或者活动链接,因为很难模仿它们的提交行为。这 些表单必须转发/处理请求到另一个表单/页面/视图,中间的视图中必须选择表 单属性“Treat document content as HTML。然后必须创建一个显示选定文档 的视图,并在表单中添加一个$Return字段,其公式为“ + SubSet(DbName;-1) + ViewName + / + docID + ?OpenDocument。WebSphere 到 Domino 类您可以使
22、用标准Domino类和技术(导入到您的代码“lotus.domino.*中)。 Domino本身将这些类和技术视作独立的Java程序。可以从NotesFactory创 建会话对象(“Static public Session create Session (String host, String user, String passwd) ”),但不要使用 NotesThread。在Notes会话中,需要为每个请求建立单独的会话。您可以使用Web容器,但 它需要自己的同步和限制线程数量的方式EJB是单线程的,线程池中的每个线 程都有自己的连接。(通常,J2EE 1.3不允许线程具有“所有权”,如
23、果需要 该特性,可以使用WebSphere Application Server 5.x中的异步bean来获得 它。)Domino 5和更早的版本不能处理很高速度的CORBA连接,这会造成连 接中断。但是,Domino 6的CORBA实现得到了很大改进。如果希望避免因为内 存不足而造成Domino服务器崩溃,则必须使用Java回收对象。结束语如您所见,有多种不同的连接Lotus Domino和IBM WebSphere的方法,采用 何种方法取决于您要建立的解决方案。因此,将您的应用程序设计成完全满足所 有的需求是绝对有必要的。如果Domino是您的核心体系结构,就让Domino服 务器作为HTTP服务器、应用程序服务器和数据存储。如果Domino是J2EE环 境的一部分,那么就将Domino服务器视作数据存储的一部分,并通过Domino 对象使用它。