使用 Lotus Notes 和 Eclipse 管理和运行 Java 程序

Java 和 Lotus Notes/Domino 是理想的开发组合。将它们组合在一起,可以使 Notes/Domino 开发人员充分利用其常用开发环境 Domino Designer 中目前可用的所有 Java 代码和包。

  Eclipse 大概是最好的集成开发环境之一,它提供了非常丰富的特性,其中包括上下文相关操作、视图、富调试程序(rich debugger)和重构。重构可以将 Java 代码重新命名、移动、添加和提取到新的方法中,以减轻清除初始编码尝试的工作量,使其简洁易读,并使其成为您要向其他开发人员显示的代码。对许多开发工作来说,重构是 Eclipse 最好的一项功能。

  有了调试 Lotus Notes/Domino 7 中的 Java 代理的能力,现在就可以协调 Lotus Notes/Domino 和 Eclipse,为 Notes/Domino 应用程序创建设计优良的可调试 Java 代理项目。

  进行任何 Lotus Workplace 开发都需要确实了解 Eclipse 是如何工作的。Lotus Notes/Domino 7 提供了一个现在开始学习 Eclipse 的极好理由,既将它用于 Notes/Domino 的一些操作,增加将来也可以应用于 Lotus Workplace 项目的技能。

  本文讲述了如何安装 Eclipse,如何为 Lotus Notes/Domino 创建项目,以及如何将这个项目导入 Domino Java 代理中,然后调试该代理。本文还提供了调试这些代理的一些技巧和可能遇到的陷阱。

  安装 Eclipse

  WebSphere Studio Application Developer 是基于 Eclipse 的,所以如果安装了 Eclipse,就可以随同本文了解如何使用 WebSphere Studio Application Developer。如果没有安装 Eclipse 或 WebSphere Studio Application Developer,那么您需要先获得这两个应用程序。Eclipse 可以从 Eclipse 基础网站免费下载。WebSphere Studio Application Developer 的试用版也能找到。

  下载 Eclipse 或 WebSphere Studio Application Developer。Eclipse 很容易安装;Eclipse 的 Web 站点上有安装说明。下载了用于 Windows 的 zip 文件之后,需要运行 eclipse.exe 文件。WebSphere Studio Application Developer 比较复杂。请参考相应文档,以获得安装说明。

  注意:下面的步骤讲述的是 Eclipse 3.0。如果您安装了 Eclipse 的其他版本,可能会发现用户界面以及步骤与本文中讲述的有所不同。

  Eclipse 和 Rational ClearCase 源代码控制

  如果要集成 Eclipse 和 Rational ClearCase 源代码控制系统,可以下载并安装 IBM Rational ClearCase SCM adapters for Eclipse 2.11。否则,默认源代码控制系统是 CVS。

  在 Eclipse 中创建新的 Java 项目

  安装了 Eclipse 和所有插件后,现在就可以创建项目,并以此作为 Notes/Domino 工作的开始。必须在一个项目内存储所有 Java 代码。在工作区中可以有多个项目。在计算机中还可以有多个工作区,可以使用 eclipse.exe 的 –data 开关来指向不同的工作区。

  要创建新的 Java 项目,需要打开 Eclipse,选择 File - New - Project。然后在 New Project 对话框中选择 Java Project,最后单击 Next。

  图 1. New Project 对话框



  输入项目名称,然后单击 Finish。创建了项目后,要更改项目属性中的路径,使其指向 Notes.jar 文件。右击 Package Explorer 附签中的项目并选择 Properties。在 Properties 对话框中,选择 Java Build Path,然后选择 Libraries 附签。单击 Add External JARs 按钮,导航到 Notes.jar 文件,以将其添加到类路径中。

  图 2. Properties 对话框



  添加了 JAR 文件之后,可以使用项目中 Notes Java API 定义的类和接口。 Domino Designer on-line help 中有关于 Notes Java API 的文档。

  接着,需要下载 Sun 1.3.1 JRE。或者,如果计算机上安装了 Domino 服务器,可以使用该服务器的 JVM。Notes 客户机和 Domino 服务器应该是匹配的,以确保构建项目所用的 JVM 与从服务器任务或代理服务器任务调用时代理和程序将运行的 JVM 相同。

  Lotus Notes/Domino 的当前版本使用的是 Java 1.3.1,所以必须安装该软件以使用正确的版本来构建项目。(Lotus Notes/Domino 7 使用 JDK 1.4。)虽然许多 Java 代理和程序都可以编译,而且没什么问题,但可能会陷入另一些问题,比如使用一个 JDK 版本构建程序,却在另一个版本上运行。如果安装了 Eclipse 3.0,因为它是基于 Java 1.4.2 的,所以需要删除 JDK System Library 并创建一个新库来指向 JDK 1.3.1 安装。要进行这项操作,需要选中 Libraries 附签的 Properties 对话框中的 JRE System Library,并单击 Remove。

  要添加新库,可以单击 Add Library 按钮。在 Add Library 对话框中,选择 JRE System Library,然后单击 Next。选择 Alternative JRE 选项(如果尚未选择)。然后单击 Installed JREs 按钮。单击 Add 并完成 Add JRE 对话框来添加 JDK 1.3.1。

  图 3. Add JRE 对话框



  保存对项目的更改。

  创建第一个 Java 代理

  Domino Designer 在开始时会自动为您填充第一个 Java 代理。不过,Eclipse 不会这样,所以它需要创建新类,来实现正确的 AgentBase 接口,获取 Domino 会话和 agentcontext 对象。可以使用 Domino Designer 中的代码作为指导。

  图 4. Domino Designer Java 代理



  将骨干 Java 代码从 Domino Designer 直接复制到 Eclipse 项目中的新类中。我们建议您创建新的包,并于其中存储代理。这将有助于组织项目,并且这符合一般 Java 设计原则。要创建新的包,可以选择 File - New - Package。

  图 5. New Java Package 对话框



  我们创建名为 com.ibm.NotesJava.agents 的包,因为是在 IBM 工作,并且这是我们的 Notes Java 项目。我们将在这个包中存储代理。可以看到的其他常见包是 com.sun.*、org.apache.* 和核心 Java 语言函数的 java.lang.*。至于如何组织包有一整套原则,但这不在本文讨论范围内,重要的是不要将代理和代码放在默认包中,因为这个包杂乱且不专业。

  现在已经有了新包,所以可以创建新的 Java 类。要在 Eclipse 中创建新的 Java 类,可以选择 File – New – Class。Eclipse 的效率非常高,所以如果已经选择了包,那么 Eclipse 将填充包名称。可以在这里添加名称和超类了。对于 Notes 代理,超类必须始终是 lotus.domino.AgentBase。在 Domino Designer 中,该操作是自动进行的,但在 Eclipse 中,必须手工完成这项操作。

  图 6. New Java Class 对话框



  在创建类之后,就可以输入剩余的代理代码,从而使其看起来与 Domino Designer 示例中的代理一样。

  图 7. Eclipse 中的 JavaAgent



  构建代理时,将在包目录中创建 JavaAgent.class 文件。现在已经有了类文件,我们可以将其导入 Domino Designer 中的代理中,并在 Eclipse 中管理代码。在 Domino Designer on-line help 中,请参阅“Import Java”主题,以获取更多信息。在将文件导入代理中之后,当调用该代理时,可以运行已经编写的 Java 代码。现在就可以使用 Eclipse 调试程序来调试该代码了。

  调试 Java 代码

  Eclipse 封装了 Java 调试程序,使您能够遍历和更改变量,监视项并在 Java 代码中添加断点。第一步是在调试模式下加载 Lotus Domino 中 JVM。这样可以强迫 JVM 停止,等到附加了调试程序后再继续进行其操作。Lotus Notes/Domino 6 或之后的版本中包含这项功能,要启用该功能,可以添加 Notes.ini 变量 JavaEnableDebug=1,然后重新启动服务器。

  下一阶段是在服务器上运行代理,并等待服务器冻结代理的执行。在冻结代理的执行之后,JVM 将等待调试程序附加到 TCP/IP 端口 9788。

  打开 Eclipse 和项目。选择 Run - Debug 来打开 Debug 对话框,然后选择 Remote Java Application,单击 New 创建新的调试会话。最后,在 Connect 附签中,指定服务器的主机名称,如果服务器在所调试的计算机上,则指定本地主机的名称。

  图 8. Debug 对话框



  对于高级用户,可以按如下所示改变端口号和调试设置:

  JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000

  Suspend=n 没有冻结服务器来等待调试连接,所以可以错过代理的启动。该调试设置允许您将额外参数传送给服务器中的 JVM 调试程序。如果您有自己喜欢的设置,也可以在这里使用。

  最好是代理代码中已经设置了断点。当在调试模式下使用 Eclipse 将代码附加到服务器时,它应该会自动断开,并允许您检查变量,设置其他断点,执行需要使用的其他所有调试任务。

  其他 Eclipse 指针

  现在 Eclipse 中已经有了项目,它提供了 Domino Designer 内大型 Java 项目所没有的许多增强开发和组织任务。Domino Designer 适用于较小的 Java 任务,比如获取或设置多个值或简单的报表。不过,一旦开始将代码分入不同的包、定义接口并将工作委托给其他人,项目管理会变得更复杂。

  Eclipse 包含用于协同工作的内置工具,其中包括 CVS 源代码控制集成。Rational ClearCase 源代码控制插件允许您附加到 ClearCase 中存储的 Eclipse 项目中。它提供了自动或即时的代码检入和检出、简洁的修饰符,从而可以轻松地标识源代码控件中的对象及其状态。

  Eclipse 中另一项非常有用的功能是可以重构项目。例如,可以选择代码的一部分并将其移至它自己的方法中。如果您有一个非常长的方法,想将其分入较小的步骤中,那么可以将这项操作自动化,Eclipse 能够帮助您实现该自动化。下列代码片断是一个重构示例:

Initial function
  public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db;
      
      // I am running this, use the server - or it can assume it is local
      if (session.getUserName().equals("CN=Ian Connor/OU=Westford/O=IBM") == true)
        db = session.getDatabase("support/iris","support/retain.nsf");
      else
        db = session.getDatabase("","support/retain.nsf");
        
      System.out.print(db.getFileName());
    } catch(Exception e) {
      e.printStackTrace();
    }
  }

  可以选择要移至其自己的函数的代码部分,然后选择 Refactor - Extract Method。这将确定需要传送的参数和应该返回的数据。您所需要做的就是选择方法名称。然后可以预览更改,查看要进行的操作。这将有助于您更好地组织代码,使试图了解代码的其他人更容易维护代码。正如所有开发人员都知道的,包含较短函数的、简洁的、组织良好的代码基数(code base)要比非常长的、似乎不会结束的 1000 行函数容易使用得多。

public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db;
      
      db = getRetainDatabase(session);
        
      System.out.print(db.getFileName());
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
  private Database getRetainDatabase(Session session) throws NotesException {
    Database db;
    // I am running this, use the server - or it can assume it is local
    if (session.getUserName().equals("CN=Ian Connor/OU=Westford/O=IBM") == true)
      db = session.getDatabase("support/iris","support/retain.nsf");
    else
      db = session.getDatabase("","support/retain.nsf");
    return db;
  }


  重构是所有开发工作的基础部分。我们总是不愿意立即共享代码的第一个 cut。在使用新的 API 或新的工作方式时更是如此。先是花费大量时间编写了一小部分代码,以测试其如何工作,然后当可以运行该代码时,将停下来适当组织代码,使查看该代码的人能够看懂。

  结束语

  Eclipse 是 Notes 开发人员可以在其当前和将来项目中使用的非常有用的平台。它可以帮助开发人员更好地组织项目,与小组中的其他人共享代码,并更好地利用 Java 设计技术,如接口和代码分隔。随着 Lotus Workplace 和 Lotus Notes/Domino 的集成度越来越高,Java 和 Eclipse 将发挥重要的作用。Notes 开发人员现在可以凭借自己的合并和群件技能进行构建,同时还要准备应付未来的挑战。

  新的产品或工作方式必须具有一些重要功能和优点,才能确保人们愿意采用该产品或方式。对于必须提交编写得很好的、提供优质 Java 代码的应用程序的 Notes 开发人员来说,Eclipse 提供了调试、重构和源代码控制。所有这些在任何重要的开发工作中都是重要的功能,它们将确保与得到的成果相比,您花费时间学习如何使用 Eclipse 进行 Notes 开发是非常值得的。



你可能感兴趣的:(java,eclipse,项目管理,websphere,Lotus)