开发人员:Java
使用 Eclipse、Spring 和 Oracle WebLogic Server 构建 Java 应用程序
有了 Oracle Enterprise Pack for Eclipse,我们可以更轻松地开发 Spring Framework 和/或 Oracle WebLogic Server 应用程序。下面将对此进行具体介绍。
作者:Dustin Marx
2010 年 2 月发表
Oracle Enterprise Pack for Eclipse (OEPE) 是一组经认证的插件,可以轻松地与核心 Eclipse IDE 集成,从而为使用 Spring Framework 和 Oracle WebLogic Server 开发和部署企业 Java 应用程序提供额外的支持。本文将简要介绍这一支持。
安装 Oracle Enterprise Pack for Eclipse
可以单独下载 Oracle Enterprise Pack for Eclipse 11g 并通过常规的插件机制将其添加到现有的 Eclipse 安装中。最好的选择是完整的 Eclipse 版本,附带了已配置的 OEPE。安装了单独下载的插件或包含已配置的 OEPE 的完整版本的 Eclipse 之后,可以通过在 Help 菜单中选择 About Eclipse Platform 选项来验证这些插件的可用性。
图 1
五个圆角方形按钮中的每一个都代表一个已安装插件特性。本文最感兴趣的两个特性是最右边两个按钮所代表的特性。Spring IDE 特性按钮是最右边的特性按钮,它左边的按钮代表的是 OEPE 插件。
结合使用 Spring Framework 和 Oracle Enterprise Pack for Eclipse
Spring Framework 凭借自身所具备的许多优点,被广泛用于生成企业 Java 应用程序。但是,通过使用 Oracle Enterprise Pack for Eclipse 中所包括的 Spring IDE,可使 Spring Framework 的使用在某些方面得以改进。
对于那些刚开始使用 Spring Framework 的开发人员,他们学习这个框架时面临的挑战之一就是对基于 XML 的 Spring 配置文件的理解和使用。OEPE 中所包括的 Spring IDE 功能提供了几个特性,便于更直观地使用 Spring XML。这些特性包括:Spring XML 配置文件的“Design”视图、Spring 元素和属性的自动完成功能,以及能够检测到 Spring 上下文文件中的任何不合规条目并发出通知。
使用 OEPE,可以创建一个新 Eclipse 项目作为 Spring 项目。下面的两幅图分别显示了如何在新项目向导中选择 Spring 项目以及创建 Spring 项目时如何为其添加特定的详细信息。下面的两个屏幕截图分别显示了如何在新项目向导中选择 Spring 项目以及创建 Spring 项目时如何为其添加特定的详细信息。
图 2
图 3
Spring Framework 提供了各种各样的功能,这意味着配置 Spring 时有多种选择。了解并记住 Spring 配置文件中各种 XML 元素、属性和命名空间之间的关系可能很困难。
下图显示了如何选择创建新 Spring bean 定义的向导。
图 4
选定了“Spring Bean Definition”向导之后,创建向导中有两个步骤,分别用于指定 Spring 上下文文件的名称和选择适用的 Spring Framework 的基于 XSD 的模式。下面的两个屏幕截图分别显示了这两个步骤。
图 5
图 6
上图显示了 Spring 支持的多种 XSD 命名空间。Spring 上下文文件中通常用于声明 Spring bean 的命名空间(“beans”命名空间)如本屏幕截图所示的已预先选定。“context”、“util”和“p”也是 Spring 应用程序中常用的命名空间。
假定选择了这些选项并使用上面几个屏幕截图中显示的其他设置,则生成的 Spring 上下文文件如下图中 Eclipse 的 Source 选项卡的屏幕截图中所示的那样。
图 7
使用 Spring Bean Definition 向导可以正确生成 Spring 上下文配置文件,并且不会出现输入错误。如上面的屏幕截图所示,配置文件中包括了在向导中选择的命名空间,还提供了合适的模式位置。
由上图可知,Spring IDE 还提供了 Design 选项卡。使用该选项卡可以按一组双列行(而不是原始 XML)来查看 Spring XML 配置文件。Design 视图一个极为有用的特性是能够从一个有效的可能性列表中选择 Spring 配置文件适用的属性、子元素和其他部分。
下图演示了 Spring IDE 显示出可用于 Spring 配置文件根“bean”元素的子元素。在 Design 视图中右键单击元素名称即可列出所有可选内容。
图 8
提供“beans”元素可能的子元素是非常有用的。如果没有这个功能,开发人员必须记住或查找可能使用的子元素,并且还要确保输入这些条目时不出错。上图还显示了一个用于添加属性的选项。使用该机制向 Spring 配置元素添加属性可获得与使用该方法添加子元素同样的好处。
有时,直接在 XML 源文件中编辑 Spring 配置文件可能比在 Design 视图中编辑更方便。在源文件中编辑时,Spring IDE 的另一个好处就是可以自动完成 Spring 上下文元素和属性。这种自动完成功能在只显示可用选项方面提供了与 Design 视图同样的好处。
下面的屏幕截图演示了我以打开的“<”开始输入一个新元素时系统提供的建议的子元素。提供了几个有效的选择以及当前选定的选项(“bean”元素),同时还提供了该选项的说明(来自定义的 XML 模式)来帮助开发人员确定该选项是否合适。提供 Spring 的 XSD 说明意味着开发人员可以持续停留在 IDE 中,而无需在 IDE 和相关的 XML 模式文件间来回切换。
图 9
使用 Design 视图提供的下拉选项和 Source 视图提供的自动完成下拉选项,可以更轻松地生成正确的 Spring 上下文文件。但是,Spring IDE 为改善配置体验而提供的好处还不止如此。如果在 Spring 配置文件中指定了一个无法识别的值,则会在 Java 代码中用红色高亮显示来标记不正确的语法。下面的屏幕截图演示了“bean”子元素的拼写存在错误(“been”)。
图 10
OEPE 提供的 Spring 支持包括对 Spring 2.5 特性的支持。例如,在 Spring Bean Definition 向导中包括的可选命名空间之一是 JMS 命名空间,它是在 Spring 2.5 中首次使用的。下面的屏幕截图显示,除了无版本限定的默认命名空间外,2.5 命名空间是 JMS 可选择包括的唯一版本。除 2.5 版本外的其他命名空间有 2.0 或更早版本。
图 11
由于 XML 模式定义 (XSD) 对可用元素和属性以及它们之间的关系进行了限制,因此,目前为止所涉及的很多 Spring IDE 特性都十分可能。
在下面的幕截图中,Spring IDE 报告了与我的 Spring 上下文文件有关的两个错误和一个警告。在保存期间会验证 Spring 配置文件。
图 12
第一个错误报告的内容是“No setter found for the property 'another' in class 'dustin.examples.MainApplication'.”这表明指定的类未包含一个用于接收字符串的名为 setAnother(String) 的方法。由于该错误上面一行没有报错,我们可以有把握地假设已经针对该类实现了一个名为 setCalculator(SimpleCalculator) 的方法。
在 Spring 配置文件中,一条警告显示“Referenced bean 'calculatorBeen' not found”,这表示不存在已定义的 ID 为“calculatorBeen”的 bean。修复“calculatorBean”的拼写后,下次保存文件时将不再出现这个警告,因为文件中现在有了定义的“calculatorBean”bean。对这类问题进行报警而不是报错是有道理的,因为该文件中未定义的 bean 有可能在类路径中的其他上下文配置文件中进行了设置。实际上,Spring Framework 2.5 文档中指出:Spring 开发团队在文件之间没有明确的联系时,通常更喜欢使用为应用程序上下文构造器提供多个 Spring 上下文配置文件的方法。
IDE 基于可用的 Java 类对 Spring 配置进行验证具有非常大的好处。Spring Framework 的相关性注入带来了极大的部署灵活性,但代价是需要在运行时检查相关性,而非在编译时检查相关性。之前讨论的 Spring IDE 支持可以使开发人员在继续享受部署灵活性的同时,无需实际运行应用程序即可识别断开的或缺少的相关项。
Spring Explorer 对于查看项目中所有特定于 Spring 的结构很有帮助。下面的屏幕截图演示了 Spring Explorer。可以单击其中显示的任何元素将主窗口焦点转到所选元素的源代码。
图 13
Spring Beans Search 工具是为使用 Spring Framework 的开发提供的另一个有用特性。尝试对与 Spring 上下文配置文件中的相关性或其他项有关的问题进行调试时,Spring Beans Search 工具只搜索 Spring 上下文文件。这个工具的另一个优点是它提供了多种查找所需配置信息的方法。如下面的屏幕截图所示,可以按 bean 的名称、支持 bean 的 Java 类、包含的属性名称以及针对子 bean 和引用的 bean 进行搜索。当使用包含大量配置文件的大型企业应用程序时,该搜索工具尤为有用。
图 14
Oracle Enterprise Pack for Eclipse 包含 Spring Framework 2.5.6 程序包。这样可以轻松地使用 Sping 2.5 的新特性,如增加了 JMS 命名空间、更方便的基于批注的 JMX、更方便地基于批注进行自动连接、更方便地基于批注检测组件以及更方便地进行 JDBC 访问。
Spring Framework 的一个非常有用的特征是对各种技术的适应性,这些技术能够就同一常规功能的实现达成共识。有关这点的典型示例是 Spring 对数据访问对象 (DAO) 的支持。Spring Framework 针对特定的基础数据访问技术提供了抽象的 DAO 类。开发人员可以对这些 Spring 提供的类进行扩展,从而使这种特殊类型的数据访问能够轻松地访问适用的 Spring 功能。这一 DAO 方法的好处在于可以使某种数据访问技术的特有特征独立于实现的 DAO 类。
尽管 Spring Framework 提供的 DAO 基类使开发人员摆脱了与使用特定技术访问数据的有关的多种功能的负担,但开发人员仍然必须对这些提供的抽象类进行扩展。Oracle Enterprise Pack for Eclipse 通过提供自动生成这些基于 Spring 的 DAO 类的机制来解决这个问题。
必须在支持 Spring Facet 的项目中运行“Generate Spring ORM Classes”特性。如果您的项目已经配置为支持 Facet,您可以在 Project Explorer 窗口中右键单击项目名称,选择 Properties,再选择 Project Facets,然后单击 Spring Facet 旁边的复选框对 Spring Facet 进行设置。注意,Spring Facet 需要使用其他 facet,因此,如果您的项目中尚未配置这些 facet,您需要先配置它们。下图显示了包含使用 Spring facet 的要求的 facet 配置窗口。
图 15
正如上面的屏幕截图所演示的,使用 Spring facet 需要 J2SE 5 或更新版本的 Java facet 以及其他 facet。在本示例中,使用“Utility Module”facet。
应用了 Java 6 facet 和 Utility Module facet 后,可以选择 Spring facet。下面的屏幕截图演示了单击 Spring facet 的结果。
图 16
上个屏幕截图显示仍然需要额外的配置。这是通过一个打了“X”的红圆圈图标以及带下划线的文本链接 Further configuration required… 指示的。另外,此时 Apply 按钮也被禁用。
为了启用 Apply 按钮,可以单击 Further configuration required...,然后选择适当的 Spring Framework 库。下面的屏幕截图中显示了用于选择适当 Spring Framework 库的向导屏幕。对于 Spring 3.0,为了便于添加到项目,SpringIDE 绑定了 spring 库。通过 facet 配置屏幕可以直接下载老版本的 Spring。
图 17
配置完 Spring Framework 库之后,单击 Apply 按钮应用更改,完成项目的 facet 配置。
图 18
为了演示如何生成 ORM 类,本示例使用 Java Persistence API (JPA) 作为 ORM 实现。可以通过添加其他 facet 轻松地启用 JPA 技术。下面的屏幕截图显示了这一操作。
图 19
在本示例中,从 Oracle 数据库表生成 JPA 实体类,这些表是用以下 SQL 创建的:
create table address
(
id number(19) primary key,
street varchar2(255),
city varchar2(255)
);
create table person
(
id number(19) primary key,
name varchar2(255),
address_id number(19) references address(id)
);
在 Oracle SQL Developer 中查看的结果数据库表如下:
图 20
数据库表已经就位并且 JPA facet 已配置,现在可以轻松地生成 JPA 实体类了。使用向导从数据库表创建这些实体类需要执行以下步骤:在 Project Explorer 中右键单击项目名称,然后依次选择 New →Other →JPA →Custom Entities。该向导窗口如下面的屏幕截图所示。
图 21
选择了 JPA Custom Entities 向导后,将显示该向导窗口,其中提示您选择要生成实体时所基于的表。
图 22
选择了适当的表后,单击 Next 将显示设置或修改关联的窗口,如下面的屏幕截图所示。
图 23
单击 Next 按钮后,即完成了对数据库表及其关联的设置。在接下来的向导屏幕中可以设置与生成实体类相关的选项。
图 24
正如该向导屏幕顶部的警告所提示的,最好不要对将从数据库表生成的实体使用默认的或未命名的程序包。也就是说,应对生成的实体类将加入的程序包进行声明。下面的屏幕截图中显示了对生成的实体类的目标程序包的这一规定。
图 25
如上面的屏幕截图所示,生成的实体类将放在名为 otn.examples 的程序包中。选定了程序包及其他常规实体特性集后,接下来将支持实体类的个性化。下一个向导屏幕显示在下图中。
图 26
在上面的屏幕截图中,设置了 Address 实体类的配置。但是,该向导屏幕只支持在列级针对要生成的每个类设置配置。单击该屏幕中的 Finish 将根据指定的数据库表实际生成实体类。下图显示了 Project Explorer 窗口中生成的这些实体类。
图 27
该 JPA 实体类使用基于字段的批注,因为这是我在生成过程中指定的。可以在本文的示例代码下载中找到这两个生成的类的源代码。
将项目配置为使用 Spring Facet 后,在 Project Explorer 窗口中单击项目名称将显示 Generate Spring ORM Classes 选项(位于 New >Other 下面)。下面的屏幕截图演示了对该选项的选择。
图 28
选择了 Generate Spring ORM Classes 选项后,将显示向导的第一个屏幕,如下图所示。
图 29
单击带有绿色 + 号的按钮将显示如下图所示的向导屏幕。
图 30
可以在这个窗口中指定有关要生成的 ORM DAO 类的几个关键信息。可以使用顶部的 Service Name 域的输入对服务、DAO 接口和 DAO 类进行自动命名(尽管在需要时也可手动修改这些内容)。选定了 Persistent Unit 后,将显示针对该实体类的有效选择。在本例中,这些将是使用之前演示的生成的 JPA Custom Entity 生成的类。
Exception Class 是异常的类型,将包括在服务接口和服务类的方法的 throws 子句中。该向导屏幕中还显示了该服务及其 DAO 接口和类的程序包。下图显示了专门针对我们的示例进行了部分填充的该向导屏幕。
图 31
定义了要生成的 ORM 服务和 DAO 对象的初始信息后,该向导的下个屏幕将提示您选择实现策略。默认情况下使用纯 JPA,但本示例中我选择另一个策略:使用 Spring 的 JpaTemplate 和 JpaDaoSupport 类。
图 32
单击 Finish 按钮,将根据提供的实体类生成 ORM 类和接口。新生成的类显示在 Project Explorer 窗口中,如下图所示。
图 33
如上面的 Project Wizard 视图所示,我将生成的 ORM 服务和 DAO 类及接口放在 otn.examples.services 程序包中。由生成的 DAO 实现的类名称 (PeopleJPADao) 中包含的 JPA 内容可以证明,它是特定于 ORM 实现的。它还直接扩展了 Spring 的 JpaDaoSupport 类,后者是 Spring 为方便使用它的 JpaTemplate 类而提供的 helper 类。
除了特定于 JPA 的 DAO 类之外,向导还为该 DAO 类生成了一个接口,该 DAO 类不是特定于 ORM 实现的,并且生成的服务类及其接口也是独立于 ORM 实现选择的。示例代码下载中提供了分别针对 IPeopleService.java、PeopleSpringService.java、IPeopleDao.java 和 PeopleDao.java 生成的源代码。
Spring Framework 提供的 JpaDaoSupport 可以简化开发人员在其代码中应用 JpaTemplate。但是,正如刚刚所演示的那样,OEPE 提供的功能远超过 JpaDaoSupport,它可以自动生成支持实体类上的基本 CRUD(创建/读取/更新/删除)的类和接口。生成的类和接口还巧妙地将特定于 ORM 的实现的细节与更常见的服务类分开,甚至可以与 DAO 的接口分开。
以下类图描述了通过 OEPE Spring ORM 生成向导生成的类和接口以及它们与 Spring 提供的 JpaDaoSupport 的关系。查看该类图时,要记住 JpaDaoSupport 的作用是让 Spring 的 JpaTemplate 更易于使用。
图 34
在这个类图中,Spring 提供的 JpaDaoSupport 是带有绿色背景的标题栏。它可以由使用 OEPE 的 Spring 提供,也可以由不使用 OEPE 的 Spring 提供。上面显示的所有其他类和接口通常需要开发人员手动编写,但是 OEPE 根据“Generate Spring ORM Classes”向导中提供的很少几个特征就自动创建了它们。
Spring Framework 广受欢迎的一个原因是它简化了企业 Java。OEPE 对 Spring Framework 的支持使得 Spring Framework 可以更轻松地应用于企业应用程序。有些情况下,开发人员需要完全兼容 Java EE 的应用服务器的某些特性。OEPE 在将应用程序部署到 Oracle WebLogic Server 方面提供了与向 Spring 容器部署应用程序同样的优势。OEPE 甚至还支持更轻松地集成 Spring Framework 和 Oracle WebLogic Server。
结合使用 Oracle WebLogic Server 和 Oracle Enterprise Pack for Eclipse
Oracle Enterprise Pack for Eclipse 提供了几个特性,可以更轻松地使用 Oracle WebLogic Server 并在其上部署应用程序。这些特性包括对特定于 WebLogic 的描述文件(weblogic.xml 和 weblogic-application.xml)的设计支持、对 Oracle WebLogic Server 的快速交换特性的支持、对 WebLogic Server 的共享库特性的支持,以及对多个 Oracle WebLogic Server 版本的支持。
将 WebLogic Server 实例与 Eclipse 相关联
为了利用 OEPE 的 Oracle WebLogic Server 特性,有必要将一个或多个 Oracle WebLogic Server 实例与 IDE 相关联。如下图所示,依次选择 New →Other →Server 可实现此目的。
图 35
双击 Server 项或选择 Server 后再单击 Next 按钮,该向导将显示一个您可以定义的服务器列表。下个屏幕截图演示了这个列表。
图 36
上面的屏幕截图在“BEA Systems, Inc.”分组下列出了 Oracle WebLogic Server 的几个版本。向导将根据您在此处选定的版本检查与 IDE 相关联的 Oracle WebLogic Server 实例,因此,您不能在此处选择了“BEA WebLogic Server v10.0”,而实际中希望与 IDE 一起使用 WebLogic Server 10.3 或 11g。您应该查找“Oracle”下面的分组,从该组中选择适当的 Oracle WebLogic Server 版本。下个屏幕截图演示了这个过程。
图 37
从该屏幕截图可以看到,Oracle 中提供了多个 Java EE 服务器实现,包括 OC4J (Oracle Containers for Java EE) 的多个版本和 Oracle WebLogic Server 的两个较新版本(10g R3 和 11g R1)。
“Server name”域的“at localhost”部分指示这将是 Oracle WebLogic Server 的本地实例。OEPE 还提供了远程部署和调试工具,以便基于远程 Oracle WebLogic Server 实例进行开发。在该向导窗口最上边的域中指定要用的主机,同样在该窗口域中选择希望使用的 Oracle WebLogic Server 版本。
上图的向导窗口中还包括其他内容。有一个名为 Download additional server adapters 的链接。这是使用 Library Provider Framework 的示例。在本示例中,允许 Eclipse 用户下载对将来会关联到 Eclipse 的其他服务器的支持。例如,该功能可用于下载 Eclipse 就绪的支持文件,以便将来出现新版本的 Oracle WebLogic Server 时使用。
创建一个 Web 项目
现在,有了与 IDE 相关联的 Oracle WebLogic Server 实例,我们可以将该服务器实例用于任何依赖于 Java EE 服务器的 Eclipse 项目。生成 Web 应用程序项目最简单的方法就是在 Project Navigator 中单击右键,然后选择 New →Project。接着,在 Project 向导窗口中的 Web 文件夹下选择 Dynamic Web Project。下个屏幕截图演示了这个过程。
图 38
选择 Dynamic Web Project 后,该 Dynamic Web Project 创建向导中的第一个屏幕如下图所示。
图 39
我以前创建的 Oracle WebLogic Server 11g R1 实例在此处显示为我的“Target Runtime”。选项 2.5 指的是 Servlet 2.5 规范。在本示例中,选择“Default Configuration for Oracle WebLogic Server 11gR1”facet 预设值将为 Web 应用程序开发添加一些基本的 facet。此处还提供了一些其他选项,包括自动化 JSF 和 Web 服务支持的选项。
单击 Next 将打开 Dynamic Web Project 创建向导中的 Web Module 配置屏幕。
图 40
默认上下文根只是项目的名称。在上面显示的示例中,我将上下文从“SimpleWebProject”更改为“simpleWeb”。上面的示例对 Web 项目的内容目录和源代码目录均使用了默认设置。最后,选中 Generate deployment descriptor 选项将创建所需的 web.xml 部署描述文件和可选的 weblogic.xml 部署描述文件。
单击 Finish 将创建如下面的屏幕所示的项目以及附加的项目资源和配置文件:
图 41
在 Project Explorer 的这个屏幕截图中,可以看到已经按照我们在项目创建向导中所要求的生成了 web.xml 和 weblogic.xml 描述文件。
创建企业应用程序项目
无需使用企业应用程序项目(EAR 项目)就可以将动态 Web 应用程序部署到 Oracle WebLogic Server 上。然而,当需要企业应用程序项目时,即可通过在 Project Explorer 窗口中单击右键并选择 New →Enterprise Application Project 轻松地创建。显示的向导如下面的屏幕截图所示。
图 42
如上面的屏幕图所示,我们可以再次选择之前定义的 Oracle WebLogic Server 11gR1 实例作为“Target Runtime”,并且可以指定 Java EE 规范的版本(“EAR version”)为 5.0。我们还将再次使用 Default Configuration for Oracle WebLogic Server 11gR1。
单击“New EAR Application Project”向导页面上的 Next 按钮,将进入一个向导页面,我可以在该页面中选择这个企业应用程序项目应包含的 Java EE 模块。EAR 项目本意并非作为一个包含自己的源代码和构件的实际项目,而是作为一个容纳其他 Java EE 项目的容器项目。在本示例中,因为之前我已经生成了四个其他适用项目,因此,将这四个项目列为该 EAR 项目中可能包含的项目。下图显示了这一情况。
图 43
如上面的屏幕图所示,我选择将之前创建的动态 Web 项目包含在这个 EAR 项目中。我还指定了希望包括的 EJB 项目。我选中了一起生成部署描述文件的选项。单击 Finish 按钮后,该向导将完成,并生成如下面屏幕截图所示的企业应用程序项目。
图 44
在该图中,我们可以看到新创建的 EAR 项目包含两个生成的描述文件:Java EE 标准 application.xml 和特定于 WebLogic Server 扩展的 weblogic-application.xml。
编辑 Java EE 和 Oracle WebLogic Server 扩展描述文件
正如 OEPE 下载中包含 Spring IDE 简化了 Spring Framework 配置一样,OEPE 也为使用 Oracle WebLogic Server 扩展的应用程序提供了更简单的配置。Java EE 规范允许符合规范的服务器通过特定于服务器的配置文件提供扩展。在 Oracle WebLogic Server 环境中,Web 应用程序的配置文件名为 weblogic.xml。同样,企业应用程序 (EAR) 的 Oracle WebLogic Server 扩展的配置文件名为 weblogic-application.xml。OEPE 为这两种特定文件提供了编辑器,可以更加轻松地创建和维护这些特定于 Oracle WebLogic Server 的描述文件。
为了编辑标准的 Java EE 描述文件 web.xml 和 application.xml,Eclipse 和 OEPE 提供了与前面演示的用于编辑 Spring 配置文件的视图相同的基于表的“Design”视图。该视图非常有用,因为它允许开发人员从下拉列表中选择 XML 文件的子元素和其他部分。其效果与 Spring 配置工作相同,可以减少输入错误,还可以避免使用不受支持的 XML 元素或属性。下图显示了编辑 web.xml 文件的示例。
图 45
使用这个特性,不仅可以快速找到可用的有效选项,而且还可以很大程度地减少元素标记及其属性名称的输入错误。也为标准 application.xml 文件提供了类似于上边显示的对 web.xml 文件的支持。
用于编辑标准 Java EE 部署描述文件的编辑器是非常有帮助的,而用于编辑 Oracle WebLogic Server 扩展部署描述文件的编辑器更加具有开发人员友好性。这些编辑器的“Descriptor”选项卡比前边演示的编辑器的“Design”选项卡中使用的基于表的方法更加方便有效。
创建 SimpleWebProject 时,我们指定 Target Runtime 为 WebLogic 11gR1。在独立于服务器的 web.xml 文件中,这一特定信息片段有时不具体指定。但是在特定于 WebLogic 的 weblogic.xml 文件中,它是用于描述服务器版本信息的。下面给出的代码清单显示了使用 Dynamic Web Project 向导生成的原始 weblogic.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
http://www.bea.com/ns/weblogic/weblogic-web-app
http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-
app.xsd">
<wls:weblogic-version>10.3.1</wls:weblogic-version>
<wls:context-root>simpleWeb</wls:context-root>
</wls:weblogic-web-app>
项目创建向导非常有用,因为它将所有必需的命名空间规范添加到该文件的根元素中,将这个描述文件与指定的 Oracle WebLogic Server 版本相关联,并且提供 Web 应用程序的上下文。但是,该描述文件中还有许多可以指定的其他选项。与编辑 Spring 配置文件一样,该编辑器可以使用 Source 选项卡中的 XML 元素自动完成功能来选择允许的 XML 元素。下面的屏幕截图演示了针对 weblogic.xml 文件的这一过程。
图 46
在上边的示例中,输入开始的“<”符号将弹出一个窗口,演示了可用的元素。在本示例中,我们选择 wls:fast-swap 元素。尽管该方法肯定比需要记住元素名称并确保其正确输入的方法更好,但 Descriptor 选项卡通过指定 FastSwap 选项提供了更简便的方法。
下面的屏幕截图演示了 WebLogic Web Application Deployment Descriptor 的“Descriptor”选项卡是如何实现用户友好的。在本示例中,指定了 FastSwap 元素。
图 47
返回 Source 选项卡后,我看到通过复选框指定的 FastSwap 信息和两个简单的文本字段现在已经添加到 weblogic.xml 源代码中。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<wls:weblogic-version>10.3.1</wls:weblogic-version>
<wls:context-root>simpleWeb</wls:context-root>
<wls:fast-swap>
<wls:enabled>true</wls:enabled>
<wls:refresh-interval>5</wls:refresh-interval>
<wls:redefinition-task-limit>5</wls:redefinition-task-limit>
</wls:fast-swap>
</wls:weblogic-web-app>
下面显示了 Enterprise Application Project 创建向导生成的 weblogic-application.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<!-- server-version: 10.3.1 -->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
</wls:weblogic-application>
与 weblogic.xml 文件一样,可以在 Source 视图中直接编辑这个文件,也可以使用元素和属性自动完成功能简化直接源代码编辑。更好的是,OEPE 为 weblogic-application.xml 提供的编辑器提供了特定于 WebLogic 文件的“Descriptor”视图,与为 weblogic.xml 提供的“Descriptor”视图类似。下面的屏幕截图演示了如何使用该工具轻松地添加描述。还要注意,我选择了 Enable Spring extension 复选框。
图 48
使用 Descriptor 视图编辑 weblogic-application.xml 文件后,修改后的源代码如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<!-- server-version: 10.3.1 -->
<!-- description: This is an example of using Oracle Enterprise
Pack for Eclipse and its handy weblogic-application.xml editor. -->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:component-factory-class-name>org.springframework.jee.interfaces.SpringComp
onentFactory</wls:component-factory-class-name>
</wls:weblogic-application>
现在,weblogic-application.xml 文件包括了我们在 Descriptor 视图中指定的条目,但是,通过 Descriptor 视图添加这些条目确实比在源代码中直接添加更简单。
因为我在 weblogic-application.xml 编辑器的“General”部分中选择了 Enable Spring extension 复选框,因此 OEPE 将 wls:component-factory-class-name 元素添加到该描述文件中,并且这个添加的带有对 org.springframework.jee.interfaces.SpringComponentFactory 的引用。该选项可以使 Oracle WebLogic Server 将 Spring Framework 用于相关性注入 (DI) 和面向方面编程 (AOP) 特性,这些特性都超出了 Java EE 规范所支持的范围。引用的 SpringComponentFactory 类作为名为 Pitchfork 的 Spring Framework 项目的一部分提供,该项目实现 JSR 250(“Common Annotations for the Java Platform”)。weblogic.xml 描述文件编辑器同样能够指定在 web 应用程序中使用这个 Spring Framework 扩展。
指定共享库
对共享库的支持是 OEPE 为了便于使用而针对 Oracle WebLogic Server 提供的又一特性。共享库概念允许 Oracle WebLogic Server 上部署的多个应用程序利用相同的库。通过 weblogic-application.xml 描述文件指定在企业应用程序项目中使用共享库。如前边所演示的,可以通过 weblogic-application.xml 文件编辑器的 Descriptor 视图轻松地编辑该文件。下面的屏幕截图显示了用于指定共享库的编辑器的 Descriptor 视图。
图 49
Descriptor 视图右上角的一句话说明了可以使用该设置来指定应用程序之间共享的库。单击该说明下面的链接 ( Add shared library references...),将显示如下屏幕。
图 50
在上面的示例中,可以选择其作为部署的应用程序间共享的库包括:JavaServer Faces (JSF)、多个版本的 MyFaces 和多个版本的 JavaServer Pages Standard Tag Library (JSTL)。如果需要选择上边列出的库之外的库作为共享库,可以使用 Manage WebLogic Shared Libraries... 链接来浏览其他可共享的库。该屏幕如下所示。
图 51
可以使用 Add... 按钮添加其他库,之后可以将添加的库指定为 Oracle WebLogic Server 上部署的多个应用程序的共享库了。
当某个库选定为共享库后,它将显示在 weblogic-application.xml 描述文件编辑器的 Descriptor 视图中,如下面的屏幕截图所示。
图 52
在上边刚刚显示的示例中,选择了 JSTL 1.2 库作为共享库。这一选择的实际源代码如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<!-- server-version: 10.3.1 -->
<!-- description: This is an example of using Oracle Enterprise
Pack for Eclipse and its handy weblogic-application.xml editor. -->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:library-ref>
<wls:library-name>jstl</wls:library-name>
<wls:specification-version>1.2</wls:specification-version>
<wls:exact-match>true</wls:exact-match>
</wls:library-ref>
<wls:component-factory-class-name>org.springframework.jee.interfaces.SpringCom
ponentFactory</wls:component-factory-class-name>
</wls:weblogic-application>
library-ref 元素及其子元素向 Oracle WebLogic Server 指定将使用 JSTL 1.2 库作为共享库。通过这种方式使用共享库的好处在于,无需将库包含在服务器上部署的每个单独的 WAR 或 EAR 文件中。
快速交换
在前面使用 weblogic.xml 文件指定特定于 Oracle WebLogic Server 的扩展的示例中,我指定了 FastSwap 作为示例。这个特性非常有用,可以使开发人员在无需重新部署整个应用程序的情况下,就可以用已部署应用程序(扩展名为 JAR、WAR 或 EAR)中某个允许的变更来“交换”一个类定义。尽管快速交换并不编译这个新类,但 Eclipse 具有在保存该文件时进行编译的能力。如果不在保存时自动编译,并且也不使用快速交换,那么完成整个 Java EE 的重新部署过程将是一件十分沮丧的事情,尤其是当变化很小时。可以理解的是,因为 Oracle WebLogic Server 只在开发模式中支持快速交换,因此,通过 OEPE 在 Eclipse 中使用和指定快速交换是一个很好的方法。
总结
Spring Framework 和 Oracle WebLogic Server 是企业 Java 领域中最著名和使用最广泛的两个产品。有了 Oracle Enterprise Pack for Eclipse,我们可以更轻松地开发 Spring Framework 和/或 Oracle WebLogic Server 应用程序。OEPE 及其包含的 Spring IDE 可以减少开发人员在研究和记忆特定于 Spring 和特定于 Oracle WebLogic Server 的配置细节上所花费的精力。OEPE 及其包含的 Spring IDE 还可极大地提高编译时配置的正确性,从而大大减少了行时必须发现的错误。
其他资源
Dustin Marx 是 Raytheon Co. 的首席软件工程师和架构师。
|