应用程序框架 dev2dev:由BEA赞助的Beehive项目显然是一个轻量级 Java组件模型。您能否谈谈关于 Beehive 的情况,以及它在你们的整个策略中的地位? Jim: Beehive是一个应用程序框架,致力于使J2EE 应用程序和基于SOA 的应用程序的开发更容易,它基于我们发布WebLogic Workshop 的经验。它基于 POJO 和用于配置依赖性、服务质量等的元数据提供一个编程模型。元数据以 J2SE 5.0 代码注解和外部 XML文件的形式获得支持。存在一些用于访问 J2EE资源、定义业务和 Web 服务以及基于 MVC模式开发 Web 应用程序的组件。在我们努力提高开发人员生产率、巩固 Java 整体市场的过程中,Beehive 是非常关键的一部分。 dev2dev: Beehive 可以被认为是一个“应用程序框架”。在Spring Framework中提供了一种非常流行的轻量级 Java 方法。Spring(以及其他类似的框架)对于 BEA 有多重要? Jim: 任何能够帮助我们的客户提高生产率的东西都对我们非常重要。我们欢迎并且接纳这些技术,在适当的时候也可以在技术层面上集成或者共享这些技术。 dev2dev: 你们考虑过明确支持这些框架吗? Jim: 就像我原来说过的,WebLogic Server具有很多方面的特性,能够提供基于轻量级 Java 技术的应用程序。许多都是隐含的,然而在某些情况下,最小量的集成工作就能为轻量级 Java 开发人员提供重要的价值。举个例子,当今存在的一些适配器允许 Spring 应用程序使用 WebLogic Server 的分布式事务能力,无需改变任何应用程序代码。我们正在调查许多其他的机会,当然也一直在倾听客户的需求。 dev2dev: 我们已经看到轻量级框架对EJB 3 的一些影响。您认为这会扩展到J2EE的其他方面吗? Jim: 是的。我认为 JSR 175(即Java元数据)对于简化 J2EE 编程模型是一种关键的支持技术。EJB 3.0使用了它,而且它也是 JSR 181(即Web Services 元数据,一个BEA 倡导的规范)的基础。没有理由相信它会就此停止。 轻量级持久性 dev2dev: IoC 容器看起来是轻量级 Java 的中心。另外的一个关键因素是POJO 和轻量级持久性。您能针对这个问题谈谈看法吗? Jim: 同样,共同的主题是简化编程模型。没有比POJO更简单的了。当然,企业开发要求我们有能力应用附加的品质,比如持久性规则、事务语义和 POJO 的安全约束。盛行很广的方式是在元数据中定义这些品质,要么作为代码注解,要么放在外部文件中。 dev2dev: 您是否觉得因为有多种方法用于完成持久性这样的事情而存在一些危险?比如,我们很快将会有EJB 2、EJB 3、JDO、Hibernate,等等。 Jim: 我认为这只是成熟领域的一个实际情况。多年来,J2EE 规范没有完全涵盖这个特定的领域,自然就会导致其他规范的出现。就我所知道的在 JCP中发生的事情,我们似乎正在走向统一。这对于整个行业来说是一件好事。 未来 dev2dev: 您能预见一下轻量级 Java和 BEA 的未来吗? Jim: 我们将会继续活跃于这个领域中,既通过诸如 Apache Beehive、XMLBeans、Eclipse和JCP 之类的渠道推动创新,又吸收诸如 Spring 这样的其他领先技术,并且为了客户的利益而展开协作。 艾伯特.爱因斯坦曾经说过:“一切都应该尽可能地简单,但是不能更简单。”确实如此,简化一门理论的基本假设,使我们可以专注于真正关键的地方,这正是一直以来对科学真理的追求。企业软件开发同样如此。 提供一个将复杂的事物(例如,事务、安全或持久性)对开发者进行隐藏的应用框架是简化企业软件开发的关键。一个设计良好的框架可以提高代码重用率、开发者的生产力及软件的质量。然而,现有J2EE1.4的EJB2.1框架被普遍认为设计差,且过于复杂。不满于EJB2.1的框架结构,Java开发者尝试了各种各样的中间件服务传递方法。最引人注目的是,以下两个框架引起了开发者极大兴趣并得到了大量正面的反馈。他们以未来企业Java应用所选框架的姿态展现。 Spring框架虽然很流行但并不是一个标准的开源框架。它主要由Interface21 Inc开发和控制。Spring框架结构是基于依赖注入(Dependency Injection (DI))的设计模式。它可以独立或在现有的应用服务器上运行,而且大量地使用了xml配置文件 EJB3.0是由Java Community Process (JCP)制订的标准框架,为所有主要的J2EE厂商支持。JBoss已经提供了试用版EJB3.0标准的开源或商业性质实现。EJB3.0充分利用了Java的注释 这两个框架结构都有一个共同核心设计理念:将中间件服务传递给耦合松散的POJOS (Plain Old Java Objects, 简单洁净Java对象)。 这样的框架利用截取执行上下文或在运行时将服务对象注入POJO来把应用服务“缠绕”到POJO。POJO本身并不关心这种“缠绕”,对这种框架结构也没有什么依赖。因此,开发者可专注于业务逻辑和脱离框架的POJO单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。 然而,在拥有同一理念的同时,两个框架结构使用不同的方式来传递POJO服务。许多书籍或文章都将Spring 或EJB3.0和EJB2.1做了比较,但是对Spring 和EJB3.0的比较并没有仔细研究过。在本文中,我将对Srping和EJB3.0框架背后的关键不同处进行考察,并讨论其优缺点。本文的观点也适用于其它更少为人知的框架,因为他们都是对“耦合松散的POJO”的设计。希望这篇文章可以帮助你选择适合你需求的最好框架。 厂商无关性 开发者选择Java平台其中最引人注目的理由之一:厂商无关性。EJB3.0正是一套设计为厂商无关的开放性标准。EJB3.0标准为所有企业Java社团里开源或商业性质厂商所开发和支持。它将开发者与应用服务器实现完全隔离。例如,JBoss的 EJB3.0实现基于Hibernate,Oracle的基于TopLink,但是开发者并不须要学习Hibernate- 或TopLink的具体API来使应用可在Jboss或Oracle上运行。厂商无关性使EJB3.0与现今其它POJO中间件框架区别开来。 但是,正如许多EJB3.0评论家迅速所指出的,在本文撰写时EJB3.0标准还没有到达一个最终版本。大概还有一到两年的时间EJB3.0才能广泛地为所有主要J2EE厂商所支持。即使你的应用服务器本身不支持EJB3.0,你仍然可以通过下载安装”内嵌的”EJB3.0产品来运行EJB3.0的应用。例如,JBoss的内嵌EjB3.0是开源产品且可以在任何J2SE5.0兼容的环境运行(例如, 在任何Java服务器上),此产品正处于软件测试阶段。其它厂商不久也将发布自己的内嵌EJB3.0产品,特别是针对标准中关于数据持久性的部分。 另一方面,Spring一直以来都是非标准的技术,在未来可预知的一段时间内这种情况将持续下去。虽然你可以在任何应用服务器上使用Spring框架,Spring应用会被锁入在Spring本身和你选择整合进Spring的具体服务中。 Spring框架是一个开源项目,但同时它有一个XML格式的配置文件和编程接口。当然任何一个非标准的产品都会有这种“锁入”(lock-in)的情况,并不是Spring特有的。但Spring应用的长期生存能力仍然还得托Spring这个项目的福(或者是Interface21公司,它雇佣了大部分Spring核心开发人员)。除此之外,假如你用到任何一个具体的Spring服务,例如,Spring事务管理器或则Spring MVC,你也会被锁入到这些API里。
Spring的应用对终端用户是不可知的。例如,对数据持久服务,Spring框架兼容不同的DAO和JDBC的模版帮助类,如Hibernate, iBatis, 和 JDO。所以假如你需要为spring应用切换在数据持久化服务(例如从JBDC到Hibernate),你需要修改你的代码以适合新的模版帮助类。
E1B800 R800 PR121/P-LI WMP 3P NST E1B800 R800 PR121/P-LSI WMP 3P NST E1B800 R800 PR121/P-LSIG WMP 3P NST E1B800 R800 PR122/P-LI WMP 3P NST E1B800 R800 PR122/P-LSI WMP 3P NST E1B800 R800 PR122/P-LSIG WMP 3P NST E1B800 R800 PR123/P-LSI WMP 3P NST E1B800 R800 PR123/P-LSIG WMP 3P NST E1B1000 R800 PR121/P-LI WMP 3P NST E1B1000 R800 PR121/P-LSI WMP 3P NST E1B1000 R800 PR121/P-LSIG WMP 3P NST E1B1000 R800 PR122/P-LI WMP 3P NST E1B1000 R800 PR122/P-LSI WMP 3P NST E1B1000 R800 PR122/P-LSIG WMP 3P NST E1B1000 R800 PR123/P-LSI WMP 3P NST E1B1000 R800 PR123/P-LSIG WMP 3P NST E1B1000 R1000 PR121/P-LI WMP 3P NST E1B1000 R1000 PR121/P-LSI WMP 3P NST E1B1000 R1000 PR121/P-LSIG WMP 3P NST E1B1000 R1000 PR122/P-LI WMP 3P NST E1B1000 R1000 PR122/P-LSI WMP 3P NST E1B1000 R1000 PR122/P-LSIG WMP 3P NST E1B1000 R1000 PR123/P-LSI WMP 3P NST E1B1000 R1000 PR123/P-LSIG WMP 3P NST E1B1250 R400 PR121/P-LI WMP 3P NST E1B1250 R400 PR121/P-LSI WMP 3P NST E1B1250 R400 PR121/P-LSIG WMP 3P NST E1B1250 R400 PR122/P-LI WMP 3P NST E1B1250 R400 PR122/P-LSI WMP 3P NST E1B1250 R400 PR122/P-LSIG WMP 3P NST E1B1250 R400 PR123/P-LSI WMP 3P NST E1B1250 R400 PR123/P-LSIG WMP 3P NST E1B1250 R800 PR121/P-LI WMP 3P NST E1B1250 R800 PR121/P-LSI WMP 3P NST E1B1250 R800 PR121/P-LSIG WMP 3P NST E1B1250 R800 PR122/P-LI WMP 3P NST E1B1250 R800 PR122/P-LSI WMP 3P NST E1B1250 R800 PR122/P-LSIG WMP 3P NST E1B1250 R800 PR123/P-LSI WMP 3P NST E1B1250 R800 PR123/P-LSIG WMP 3P NST E1B1250 R1250 PR121/P-LI WMP 3P NST E1B1250 R1250 PR121/P-LSI WMP 3P NST E1B1250 R1250 PR121/P-LSIG WMP 3P NST E1B1250 R1250 PR122/P-LI WMP 3P NST E1B1250 R1250 PR122/P-LSI WMP 3P NST E1B1250 R1250 PR122/P-LSIG WMP 3P NST E1B1250 R1250 PR123/P-LSI WMP 3P NST E1B1250 R1250 PR123/P-LSIG WMP 3P NST E1B1600 R1600 PR121/P-LI WMP 3P NST E1B1600 R1600 PR121/P-LSI WMP 3P NST E1B1600 R1600 PR121/P-LSIG WMP 3P NST E1B1600 R1600 PR122/P-LI WMP 3P NST E1B1600 R1600 PR122/P-LSI WMP 3P NST E1B1600 R1600 PR122/P-LSIG WMP 3P NST E1B1600 R1600 PR123/P-LSI WMP 3P NST E1B1600 R1600 PR123/P-LSIG WMP 3P NST E2B1600 R1600 PR121/P-LI WMP 3P NST E2B1600 R1600 PR121/P-LSI WMP 3P NST E2B1600 R1600 PR121/P-LSIG WMP 3P NST E2B1600 R1600 PR122/P-LI WMP 3P NST E2B1600 R1600 PR122/P-LSI WMP 3P NST E2B1600 R1600 PR122/P-LSIG WMP 3P NST E2B1600 R1600 PR123/P-LSI WMP 3P NST E2B1600 R1600 PR123/P-LSIG WMP 3P NST E2B2000 R1250 PR121/P-LI WMP 3P NST E2B2000 R1250 PR121/P-LSI WMP 3P NST E2B2000 R1250 PR121/P-LSIG WMP 3P NST E2B2000 R1250 PR122/P-LI WMP 3P NST E2B2000 R1250 PR122/P-LSI WMP 3P NST E2B2000 R1250 PR122/P-LSIG WMP 3P NST E2B2000 R1250 PR123/P-LSI WMP 3P NST E2B2000 R1250 PR123/P-LSIG WMP 3P NST E2B2000 R2000 PR121/P-LI WMP 3P NST E2B2000 R2000 PR121/P-LSI WMP 3P NST E2B2000 R2000 PR121/P-LSIG WMP 3P NST E2B2000 R2000 PR122/P-LI WMP 3P NST E2B2000 R2000 PR122/P-LSI WMP 3P NST E2B2000 R2000 PR122/P-LSIG WMP 3P NST E2B2000 R2000 PR123/P-LSI WMP 3P NST E2B2000 R2000 PR123/P-LSIG WMP 3P NST E1N800 R800 PR121/P-LI WMP 3P NST E1N800 R800 PR121/P-LSI WMP 3P NST E1N800 R800 PR121/P-LSIG WMP 3P NST E1N800 R800 PR122/P-LI WMP 3P NST E1N800 R800 PR122/P-LSI WMP 3P NST E1N800 R800 PR122/P-LSIG WMP 3P NST E1N800 R800 PR123/P-LSI WMP 3P NST E1N800 R800 PR123/P-LSIG WMP 3P NST E1N1000 R800 PR121/P-LSIG WMP 3P NST E1N1000 R800 PR122/P-LI WMP 3P NST E1N1000 R800 PR122/P-LSI WMP 3P NST E1N1000 R800 PR122/P-LSIG WMP 3P NST E1N1000 R800 PR123/P-LSI WMP 3P NST E1N1000 R800 PR123/P-LSIG WMP 3P NST E1N1000 R1000 PR121/P-LI WMP 3P NST E1N1000 R1000 PR121/P-LSI WMP 3P NST E1N1000 R1000 PR121/P-LSIG WMP 3P NST E1N1000 R1000 PR122/P-LI WMP 3P NST E1N1000 R1000 PR122/P-LSI WMP 3P NST E1N1000 R1000 PR122/P-LSIG WMP 3P NST E1N1000 R1000 PR123/P-LSI WMP 3P NST E1N1000 R1000 PR123/P-LSIG WMP 3P NST E1N1250 R1250 PR121/P-LI WMP 3P NST E1N1250 R1250 PR121/P-LSI WMP 3P NST E1N1250 R1250 PR121/P-LSIG WMP 3P NST E1N1250 R1250 PR122/P-LI WMP 3P NST E1N1250 R1250 PR122/P-LSI WMP 3P NST E1N1250 R1250 PR122/P-LSIG WMP 3P NST E1N1250 R1250 PR123/P-LSI WMP 3P NST E1N1250 R1250 PR123/P-LSIG WMP 3P NST E1N1600 R1600 PR121/P-LI WMP 3P NST E1N1600 R1600 PR121/P-LSI WMP 3P NST E1N1600 R1600 PR121/P-LSIG WMP 3P NST E1N1600 R1600 PR122/P-LI WMP 3P NST E1N1600 R1600 PR122/P-LSI WMP 3P NST E1N1600 R1600 PR122/P-LSIG WMP 3P NST E1N1600 R1600 PR123/P-LSI WMP 3P NST E1N1600 R1600 PR123/P-LSIG WMP 3P NST E2N1000 R1000 PR121/P-LI WMP 3P NST E2N1000 R1000 PR121/P-LSI WMP 3P NST E2N1000 R1000 PR121/P-LSIG WMP 3P NST E2N1000 R1000 PR122/P-LI WMP 3P NST E2N1000 R1000 PR122/P-LSI WMP 3P NST E2N1000 R1000 PR122/P-LSIG WMP 3P NST E2N1000 R1000 PR123/P-LSI WMP 3P NST E2N1000 R1000 PR123/P-LSIG WMP 3P NST E2N1250 R1000 PR121/P-LI WMP 3P NST E2N1250 R1000 PR121/P-LSI WMP 3P NST E2N1250 R1000 PR121/P-LSIG WMP 3P NST E2N1250 R1000 PR122/P-LI WMP 3P NST E2N1250 R1000 PR122/P-LSI WMP 3P NST E2N1250 R1000 PR122/P-LSIG WMP 3P NST E2N1250 R1000 PR123/P-LSI WMP 3P NST E2N1250 R1000 PR123/P-LSIG WMP 3P NST E2N1250 R1250 PR121/P-LI WMP 3P NST E2N1250 R1250 PR121/P-LSI WMP 3P NST E2N1250 R1250 PR121/P-LSIG WMP 3P NST E2N1250 R1250 PR122/P-LI WMP 3P NST E2N1250 R1250 PR122/P-LSI WMP 3P NST E2N1250 R1250 PR122/P-LSIG WMP 3P NST E2N1250 R1250 PR123/P-LSI WMP 3P NST E2N1250 R1250 PR123/P-LSIG WMP 3P NST E2N1600 R1600 PR121/P-LSI WMP 3P NST E2N1600 R1600 PR121/P-LSIG WMP 3P NST E2N1600 R1600 PR122/P-LI WMP 3P NST E2N1600 R1600 PR122/P-LSI WMP 3P NST E2N1600 R1600 PR122/P-LSIG WMP 3P NST E2N1600 R1600 PR123/P-LSI WMP 3P NST E2N1600 R1600 PR123/P-LSIG WMP 3P NST E2N2000 R1250 PR121/P-LI WMP 3P NST E2N2000 R1250 PR121/P-LSI WMP 3P NST E2N2000 R1250 PR121/P-LSIG WMP 3P NST E2N2000 R1250 PR122/P-LI WMP 3P NST E2N2000 R1250 PR122/P-LSI WMP 3P NST E2N2000 R1250 PR122/P-LSIG WMP 3P NST E2N2000 R1250 PR123/P-LSI WMP 3P NST E2N2000 R1250 PR123/P-LSIG WMP 3P NST E2N2000 R2000 PR121/P-LI WMP 3P NST E2N2000 R2000 PR121/P-LSI WMP 3P NST E2N2000 R2000 PR121/P-LSIG WMP 3P NST E2N2000 R2000 PR122/P-LI WMP 3P NST E2N2000 R2000 PR122/P-LSI WMP 3P NST E2N2000 R2000 PR122/P-LSIG WMP 3P NST E2N2000 R2000 PR123/P-LSI WMP 3P NST E2N2000 R2000 PR123/P-LSIG WMP 3P NST E3N2500 R1600 PR121/P-LI WMP 3P NST E3N2500 R1600 PR121/P-LSI WMP 3P NST E3N2500 R1600 PR121/P-LSIG WMP 3P NST E3N2500 R1600 PR122/P-LI WMP 3P NST E3N2500 R1600 PR122/P-LSI WMP 3P NST E3N2500 R1600 PR122/P-LSIG WMP 3P NST E3N2500 R1600 PR123/P-LSI WMP 3P NST E3N2500 R1600 PR123/P-LSIG WMP 3P NST E3N2500 R2500 PR121/P-LI WMP 3P NST E3N2500 R2500 PR121/P-LSI WMP 3P NST E3N2500 R2500 PR121/P-LSIG WMP 3P NST E3N2500 R2500 PR122/P-LI WMP 3P NST E3N2500 R2500 PR122/P-LSI WMP 3P NST E3N2500 R2500 PR122/P-LSIG WMP 3P NST E3N2500 R2500 PR123/P-LSI WMP 3P NST E3N2500 R2500 PR123/P-LSIG WMP 3P NST E3N3200 R2000 PR121/P-LI WMP 3P NST E3N3200 R2000 PR121/P-LSI WMP 3P NST E3N3200 R2000 PR121/P-LSIG WMP 3P NST E3N3200 R2000 PR122/P-LI WMP 3P NST E3N3200 R2000 PR122/P-LSI WMP 3P NST E3N3200 R2000 PR122/P-LSIG WMP 3P NST E3N3200 R2000 PR123/P-LSI WMP 3P NST E3N3200 R2000 PR123/P-LSIG WMP 3P NST E3N3200 R3200 PR121/P-LI WMP 3P NST E3N3200 R3200 PR121/P-LSI WMP 3P NST E3N3200 R3200 PR121/P-LSIG WMP 3P NST E3N3200 R3200 PR122/P-LI WMP 3P NST E3N3200 R3200 PR122/P-LSI WMP 3P NST E3N3200 R3200 PR122/P-LSIG WMP 3P NST E3N3200 R3200 PR123/P-LSI WMP 3P NST E3N3200 R3200 PR123/P-LSIG WMP 3P NST