快速业务通道

使用Spring框架轻松解决数据访问和配置问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
ring 版本不同则需进行此操作 —— “将会与当前使用的 Spring 发生冲突。这是 J2EE 应用程序的父-子、子-父类加载二分法的一部分。”

问题在于某些情况下,Java™ 2 Platform, Enterprise Edition (J2EE) 或 Java Platform, Enterprise Edition (Java EE) 在最特殊的级别启动,寻找一个类进行实例化(在该情况下系统将使用作为应用程序一部分的类),而在其他情况下,系统使用最常规的级别(此时系统将使用作为服务器一部分的类)。结果是:您可能在应用程序的上下文中创建了一个资源,但当您尝试访问该资源时,服务器将在应用服务器的上下文中进行查找。

“这将使您的应用程序找不到其 Hibernate 或其他一些资源,因为它们是在一个 Spring 容器中创建而在另一个容器中访问的。”

最初,Geronimo 开发人员通过自动隐藏某些通用类解决了此问题,比如 Spring and Apache Commons Logging 类,它经常会导致此问题。但 Liferay 使情况发展到了极点,Liferay 是一种开源 JSR 168 兼容门户(参见 参考资料 中的链接)。Liferay 使用 Spring,它在 .ear 文件中包含了一个 Spring 版本供其中部署的所有子应用程序使用。“我提到它们的原因在于”,Jeff 告诉我说,“我们隐藏的类加载架构在早期导致了一个问题,因为我们自动隐藏了 Spring,所以它们的 Web 应用程序无法看见 Spring 的 EAR 级版本。”

最后,Geronimo 开发人员找到了一个解决方案。“但是,我们拥有一个比大多数其他应用服务器更好的东西。许多人遇到了关于通用日志的问题。当他们在使用通用日志的容器内运行程序(如 JBoss、Tomcat 等),并且在其应用程序中包含了通用日志 JAR【文件】时,将遭遇严重的异常问题。”这些问题与做出初始更改前 Spring 应用程序遇到的问题相同。“它实际上是一个类加载器冲突的问题。我们遇到了一些开放式的问题,表明 Web 应用程序没有正常运行,但实际上它们正常运行了;只需删除通用日志,就像需为 Tomcat 和 JBoss 等删除日志一样。因此我们进行了大量的讨论,并开始硬编码如通用日志等模块类。接着再继续讨论,我们找到了一种更好的声明性方法。因而出现了隐藏类声明。我们能在计划文件中声明隐藏类,您将用之来部署应用程序。”

“它运作得很好”,他继续说道,“因此我们没有遇到许多其他容器所具有的问题。您控制了父-子、子-父委托的类加载器。因此利用 Geronimo 可声明应用程序只 使用其中所包含的 Spring,忽略服务器版本,反之亦然。它的另一个优点是可使用多个版本的 Spring。因此即便服务器使用 2.0 版本而您的遗留应用程序使用的是 1.x 版本,您也可确保不会发生任何冲突,并且应用程序将使用适当的版本。”

为 Apache Geronimo for Spring 添加更多内容

虽然 Spring 可能已迫使团队做出了这些更改,但它们对任何类都有用这一点可能会成为一个问题。但这并不意味着特定于 Spring 的工作有一天不会在 Geronimo 中实现。

“刚刚我在跟 Bruce Snyder 交谈”,Jeff 挂断电话后告诉我说,他接电话时我迅速地吃了点东西。“我们在谈论构建或扩展一个插件,以允许您将 Spring ApplicationContexts 放入 JNDI,从而可在服务器端访问基于 Spring 的对象。我已为一台客户机编写了这样的插件,我认为它应是应用服务器的核心功能。只是要抽时间来办这件事”,他笑着说道。

“在某种程度上我们会这样做”,他说,“为应用程序提供基于服务器的 Spring 对象是个不错的想法。您可以存储希望应用程序可访问的那些特定的 Spring 对象或对象引用。例如,如果您正在使用 Quartz,并需要容器的引用,并

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号