快速业务通道

类加载器特技:OSGi代码生成 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

类加载器特技:OSGi代码生成

时间:2011-06-11 infoq 译:曹云飞

我们将按照复杂性增加的顺序考察一些类加载的典型问题,开发一小段代码 来解决这些问题中最有趣的一个。即使你不打算马上写一个代码生成框架,这篇 文章也会让你对静态定义依赖的模块运行时(如OSGi系统)的低级操作有比较深 入的了解。

这篇文章还包括一个可以工作的演示项目,该项目不仅包含这里演示的代码 ,还有两个基于ASM的代码生成器可供实践。

类加载地点转换

把一个框架移植到OSGi系统通常需要把框架按照extender模式重构。这个模 式允许框架把所有的类加载工作委托给OSGi框架,与此同时保留对应用代码的生 命周期的控制。转换的目标是使用应用bundle的类加载来代替传统的繁复的类加 载策略。例如我们希望这样替换代码:

ClassLoader appLoader = Thread.currentThread ().getContextClassLoader(); Class appClass = appLoader.loadClass ("com.acme.devices.SinisterEngine"); ... ClassLoader appLoader = ... Class appClass = appLoader.loadClass ("com.acme.devices.SinisterEngine");

替换为:

Bundle appBundle = ... Class appClass = appBundle.loadClass ("com.acme.devices.SinisterEngine");

尽管我们必须做大量的工作以便OSGi为我们加载应用代码,我们至少有一种 优美而正确的方式来完成我们的工作,而且会比以前工作得更好!现在用户可以 通过向OSGi容器安装/卸载bundle而增加/删除应用。用户还可以把他们的应用分 解为多个bundle,在应用之间共享库并利用模块化的其他能力。

由于上下文类加载器是目前框架加载应用代码的标准方式,我们在此对其多 说两句。当前OSGi没有定义设置上下文类加载器的策略。当一个框架依赖于上下 文类加载器时,开发者需要预先知道这点,在每次调用进入那个框架时手工设置 上下文类加载器。由于这样做易于出错而其不方便,所以在OSGi下几乎不使用上 下文类加载器。在定义OSGi容器如何自动管理上下文类加载器方面,目前有些人 正在进行尝试。但在一个官方的标准出现之前,最好把类加载转移到一个具体的 应用bundle。

适配器类加载器

有时候我们转换的代码有外部化的类加载策略。这意味着框架的类和方法接 收明确的ClassLoader 参数,允许我们来决定他们从哪里加载应用代码。在这种 情况下,把系统转换到OSGi就仅仅是让Bundle对象适配ClassLoader API的问题 。这是一个经典的适配器模式的应用。

public class BundleClassLoader extends ClassLoader {   private final Bundle delegate;   public BundleClassLoader(Bundle delegate) {    this.delegate = delegate;   }   @Override   public Class<?> loadClass(String name) throws  ClassNotFoundException {    return delegate.loadClass(name);   } }

类加载器特技:OSGi代码生成(2)

时间:2011-06-11 infoq 译:曹云飞

现在我们可以把这个适配器传给转换的框架代码。随着新bundle的增减,我 们还可以增加bundle跟踪代码来创建新的适配器 —— 例如,我们可以“在外部 ”把一个Java框架适配到OSGi,避免浏览该框架的代码库以及变换每个单独的类 加载场所。下面是将一个框架转换到使用OSGi 类加载的示意性的例子:

... Bundle app = ... BundleClassLoader appLoader = new BundleClassLoader (app); DeviceSimulationFramework simfw = ... simfw.simulate("com.acme.devices.SinisterEngine", appLoader); ...

桥接类加载器

许多有趣的Java框架的客户端代码在运行时做了很多花哨的类处理

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号