1、毕业设计(论文)外文文献翻译开源框架 Spring 快速开发 J2EE Web 应用:一个案例研究 1摘要:在 Web 应用程序开发的高度竞争的舞台,开发应用程序,准确地说,是很重要的。在经济上,也追求尽可能的高效。提高工作效率的一种方法是减少复杂性。这是程序员开发 Java 2 Platform,Enterprise Edition(J2EE)web 应用程序最近的一次改变。改变的重点是如何创建 j2EE 兼容的软件,而没有使用 Enterprise Java bean(EJB)。最主要的选择是使用 Spring 框架,它提供较少的服务,但它的侵入性比 EJB 少得多。这种转变背后的推动力量
2、是需求更大的生产力并开发和实现出复杂的 web 应用程序领域的软件。在本文中,我们简要描述 Spring 的底层架构和使用一个案例来研究使用 Spring。引言:由于软件的体系结构的基本性质,体系结构的选择通常会比任何其他个人方面(1)更大的影响软件的开发效率。提高工作效率的最佳方法之一是找到最简单的架构,满足客户的需求,同时还提供所需的 J2EE 体系结构的需求。任何 J2EE 应用程序的核心构件是表示层( 用户界面 ,界面层),业务逻辑层(中间层) 和数据访问层(企业信息系统、EIS 层)。这三层需要实现的最低限度必须考虑到 J2EE 能够兼容的,许多系统还包括一个持久层 ,作为业务服务层
3、的一部分。EJB 体系结构:本地 EJB 体系结构如图 1 所示。正如前面提到的,并给出了三层:用户界面层、中间层和 EIS 层。UI 层通常是由一个模型-视图-控制器 (MVC)框架。业务层是“business methods”所提供的接口 ,web 层对象可以直接访问,而不必使用 EJB api。业务对象是本地接口的无状态会话的 bean 类,EJB 容器内运行,并将提供事务管理、线程管理和基于权限安全。所有数据访问将通过实体的 bean 类的“classic”J2EE 体系结构。委托容器管理的永续性对于实体 bean 类来说,被认为是最好的选择。Java 事务 API(JTA)通过 EJ
4、B容器提供了事务协调来访问 EIS 层。轻量级容器体系结构:如图 2 所示,轻量级容器也使用 MVC 框架来实现 web 层。Spring 框架可以用专用的 Web 框架如 Struts 或 WebWork,也可以由轻量级容器管理使业务紧密结合。所有的业务对象是普通 Java 对象 (POJO)内部的轻量级容器运行。轻量级容器提供企业服务,1 作者:John Arthur,Shiva Azadegan出处:CScience Applications International年月:2012.10即通过调用一个 AspectOriented 编程(AOP)拦截器。这种方式可以在执行之前或者之后的
5、行为的时候清楚地编译出另一种业务方法 1。因为轻量级容器依靠 AOP 拦截器,而不需要取决于容器的 API,因此,他们在任何容器是有用的。为得出最好的结果,业务对象应该只访问他们自身的接口。数据访问可以使用 JDBC或一个轻量级的对象/关系(O / R)映射层提供透明的持久性。 EIS 层与本地 EJB EIS 层是相同的。图 1 本地 EJB 架构展示这三个核心构建块(1)Spring 框架:为了实现 Web 应用程序的准确性的目标,在经济和高效上,更重要的目的: 简单性、可测试性和可移植性。更简单的是开发和维护的代码,从长远来看更具有成本效益的项目。EJB 是非常复杂的,需要一个 EJB
6、容器,转化为需要高端应用程序服务器。应用程序服务器的必要性也增加了管理的复杂性使用 EJBs 2。轻量级容器只需要一个 servlet 引擎,这也解决了可移植性的问题。EJB 是专门为 EJB 容器和依赖 EJB 接口而编写的。由于轻量级容器的非侵入性,业务对象设计出一种轻量级容器,使其可以运行在容器中。业务逻辑 EJB 很难测试的,因为实现类依赖 EJB 容器。这不试试在轻量级框架,由于业务对象是 POJO。POJO 的易于单元测试以外的应用程序服务器,甚至可以将 JUnit协助与测试。最终的决定因素是个人;作者第一次学会实现过去的 EJB 架构,一直觉得很疑惑和犹豫。使用 Spring 框
7、架后不到一个星期,它很容易就实现了一些相当复杂的功能,它从来没有能够使用 EJBs,Spring 框架显得更加直观。图 2 EJB 轻量级容器图解- 实现 web 层的 MVC 框架(1)Spring 框架是如何提供必要的基础技术却没有 EJB 的复杂性? 关键是类型的控制反转(IoC)在 Spring 框架实现。控制反转的概念很容易被认为是好莱坞原则:“别给我们打电话,我们会给你打电话” 3。 “别叫我们,我们会给你打电话 ”3。有两种主要类型的 IoC:依赖查找和依赖注入,如下图 3 所示。依赖查找容器为组件提供回调,并查找上下文。因此每个组件使用容器 api 查找资源。EJB 使用 Io
8、C 的依赖查找形式,管理对象是负责自行查找。 “依赖注入的配置的基本原则是:应用程序对象不应负责查找资源或它们所依赖的。相反,一个 IoC 容器应该配置对象,外化资源从应用程序代码中查找到容器中。(1)”容器完全负责依赖查找和不依赖于特殊容器的 API 或接口。查找完整地应用程序代码,容器外的对象很容易使用,不需要特殊的接口。有两种风格的依赖注入:Setter 注入和构造函数注入: 通过 JavaBean 属性 Setter Injectionexpresses 依赖性。 setter 方法被调用的对象是由容器实例化后,在处理任何业务的方法,因此,没有线程有关的属性问题。不再有任何需要异常处理
9、,容器可以处理configuration-time 错误。构造函数注入组件通过构造函数参数表达依赖性。Spring 框架提供了支持 Setter 依赖注入和构造函数依赖注入。有许多 Setter 依赖注入的示范项目。图 3 控制反转的层次结构(1)Spring 可以作为业务逻辑的核心或者说是中间层,J2EE 应用程序。Spring 提供了一个 web 应用程序上下文的概念,一个强大的轻量级 IoC 容器,无缝地适应网络环境。它可以从任何类型的访问 web 层,无论是 Struts,网络系统,Tapestry,JSF,Spring web MVC,或一个自定义解决方案 3。Spring 框架的业
10、务服务层作为示范项目。与 Struts 和 JSF 整合后,Spring 的 web MVC 实现表示层。Spring 的 MVC 被发现比 Struts 或 JSF 更直观。EIS 层是由一个 MySQL 数据库表示。架构上最后一步是决定如何实现数据访问对象和数据持久性。深入研究后,他们发现 Hibernate O / R 映射工具是相对稳定的,强烈支持由 Spring 框架,和 Xdoclet 支持面向属性的编程( 在文本后面会详细解释)。其他使用Hibernate 的好处是,它是非常直观的 ,肤浅的学习曲线以及有自己的 Hibernate 查询语言 5。开发环境:我们研究了大量的工具来辅
11、助开发,使用 Eclipse IDE 是因为它是开源的,且非常适合团队开发,Eclips 还集成了其他三个项目需要使用的工具。自动构建工具 ANT,是开源和广泛支持。它被集成到 Eclipse IDE 和允许构建一致的步骤。因为这个开发环境是有针对性的开发团队,而不是个人发展的开发商,SourceForge 账户注册主机应用程序来开发。对一些版本控制工具进行了研究,包括 SourceSafe,Subversion,CVS。Subversion被发现是一个很好的版本控制工具,但它并没有受到广泛支持,在很长的时间内,它需要一些额外的插件来使用 Eclipse。CVS 是用作控制版本控制工具。虽然没
12、有必要将这个单人项目的持续集成构建器,CruiseControl 是构建在所有项目的制作位置。CruiseControl 允许开发人员几乎立即确定构建问题,因为它是自动的,免费的开发者。使用 Maven 自动生成项目管理网站。最后 ,使用 Tomcat servlet 容器。展示不同的 Spring 框架的功能,基本灵活的,问题跟踪系统的创建。有应用程序称为 AppFuse kickstarts“Spring web 应用程序开发。AppFuse 特性包括容器管理认证(CMA),识别自己, 自注册,密码提示,GZip 压缩。XDoclet AppFuse 也支持 Ant,Spring,Hibe
13、rnate 或 iBATIS,JUnit,Cactus,StrutsTestCase,Canoo WebTest,Struts Menu,Display Tag Library, OSCache, JSTL and Struts (or Spring MVC) 4。Spring 的基础控制反转特性是在 SpringBeanFactoryand ApplicationContext 找到。“BeanFactoryprovides 高级配置机制能够管理 bean 任何性质的,可能使用任何类型的存储设备(3)。 ”ApplicationContext 之上构建 BeanFactoryand 添加其他
14、功能。BeanFactoryprovides 配置框架和基本功能,ApplicationContextadds 增强,他们中的一些人也许更适合 J2EE 和 enterprise-centric。一个完整的超集 BeanFactory ApplicationContextis。下面是一个简单的例子 action-servlet.xml 文件的演示程序,是整个ApplicationContext 的一部分。projectStatuscom.panogenesis.model.ProjectStatusprojectStatusFormprojectStatuses.htmlbean 是一个 id
15、 和绑定到一个类。每个属性需要访问 bean 的定义使用标记。尽管 MessageSource ApplicationContextalso 提供消息传递功能,对资源的访问,通过ApplicationEvent 类 andApplicationListernerinterface 事件传值,并加载多个上下文。自使用 Spring 框架和 EJB 的主要区别在于业务层,这是我们将集中的区域。第一步是创建业务对象使用普通 Java 对象(POJO)。这个问题类的对象将包含基本信息被跟踪的问题。这包括一个独特的标识符,所有者 id,和 id 作者的描述,属于哪个项目,涉及哪些组件,集合相关的历史,等
16、等。由于我们将使用 Hibernate 作为我们为我们的持久层对象/关系映射器,我们可以一举两得。通过使用面向属性的编程,我们可以定义的 Hibernate属性问题直接类问题通过使用 Xdoclet 标记类的源代码。这包括定义协议与其他对象和集合。这些 Xdoclet 标记用于生成. hbm 。为每个类,保存 xml 文件。接着,我们创建数据库连接对象(Dao) 。Spring 是全部的接口,所以我们必须创建一个 Dao 类。由于我们使用 Hibernate,延长 BaseDAOHibernateobject。DAOImpl 对象包含所有从数据源检索数据的代码。现在 DAO 对象已经创建,我们
17、线成 Spring 框架。这是非常简单的,需要做的就是添加 issueDAO applicationContext。xml 并将其绑定到IssueDAOHibernate 对象在以下方式:在 SpringBean 创建一个 issuedaohibernate 类,并命名为 issueDAO, 。目标对象必须映射到 Hibernate 会话工厂。下面是一个示例问题对象的映射。com/panogenesis/model/Issue.hbm.xml. HIBERNATE-DIALECT这个映射允许 Hibernate 对象通过 Hibernate 接口访问问题 ,创建并允许 Spring 访问Ses
18、sionFactory bean。接下来,我们创建实际的业务逻辑对象,或管理对象。这些管理类们用来分离业务服务层与持久层的 DAO 接口。没有引用任何特定持久性策略的管理接口,它允许一个轻松地更改持久化水平到另一个 O / R 映射器或工具如 ObjectRelation 桥(OJB)或本机JDBC。这也是处理声明和 AOP 拦截器的第一个示例演示代码。PROPAGATION_REQUIRED PROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly该 txProxyTemplate 使用 AOP 拦截处理事务,这是一个txproxytemplatei
19、ssuemanager 为目标 issuemanagerimpl 的子类。Spring AOP 的另一个例子是 admin 拦截器处理的方式。它还演示了“access to resources”ApplicationContext 的功能。filenameControllerprojectControllerprojectFormControllerissueResolutionControllercomponentFormControllerprojectVersionFormControlleradmin在上面代码中,ApplicationContext 定义了 url 映射应该只管理角色
20、的用户访问。它通过设置所有的页面来访问管理员的映射属性。拦截器被定义为一个属性和adminInterceptor 已经添加到拦截器的引用列表。然后 adminInterceptor Spring bean 定义的拦截 authorizedRoles 值被设置为 “admin”。使用 AOP 安全性和事务管理的一种方法,Spring 地址所需的功能是无需使用 EJB 的。同时,每一个 Spring 对象,到现在为止,我们已经创建了不依赖于容器的每一个 Spring 对象。因此,它可以很容易地使用 JUnit 单元测试。不同的 EJB 对象反过来限制实行规范的面向对象设计 EJB 组件模型的约束,
21、较少了限制对象增加了面向对象实现更大的能力。结论:总之,轻量级容器 Spring 框架等有着他们的一定优势,在大多数情况下,h 会使用EjB。Spring 框架允许我们自由使用应用程序服务器,具有一定的必要性。这降低了复杂性应用服务器管理和允许更大的可移植性,因为 Spring 只需要一个 servlet 容器。使用 Spring 也增加了潜在的代码重用同样的原因,编写的代码到 EJB API 只会下运行 EJB容器。同时需要 EJB 的 EJB 容器对象测试 EJB 对象的难度大大增加。使用 Spring 框架,容器外部的对象很容易测试,大大节省时间和减少测试的复杂性。最后,Spring 框
22、架的非侵入性的 AOP 由于依赖注入模式。这将应用程序代码的依赖最小化 ,进而提高生产率,最大化代码重用的机会,提高可测试性 1。参考文献: 1 Johnson R, Hoeller J, Expert One-on-One J2EE Development Without EJB. 2004,Indianapolis: Wiley Publishing Inc, online book, chunkid=129744793.2 Raible M. Spring Live. 2004, Colorado: SourceBeat Publishing, online book. 3 Johnson R, Hoeller J, Arendsen A, Spring: java/j2ee application framewokreference documentation version 1.2004: available online4 Raible M. Matt Raibles Appfuse Wiki Site. http:/ Hibernate: Hibernate Reference Manual version 2.1.6, 2004