Java动态加载jar包到运行环境

2012年6月5日 没有评论

  在为一个正在运行的系统添加新功能或在软件主体不升级的情况下添加新功能往往是通过插件的方式实现,而插件模式设计上无非就是实现一个统一的接口然后由系统加载调用相应的方法达到插件的安装和卸载。典型的例子就如wordpress中的插件。在Java中特别是J2EE应用中插件开发好后一般都是打包成jar上传到服务器然后安装。那么如何实现把jar加载到运行时中呢?

  其实比较简单使用URLClassLoader即可,一个简单的例子:

File file = new File("c:/x.jar");//java
URL uri = file.toURI().toURL();
System.out.println(uri);
URLClassLoader load = new URLClassLoader(new URL[]{uri});

此时x.jar里的所有class都将被加载到运行环境中,如果要实例化某个类那么只需要使用load.loadClass()方法得到Class再newInstance().

在设计插件包结构时可能还需要一个描述文件,这个描述文件中定义了插件信息包括:插件名称,插件依赖,插件入口类(这个是最主要的);插件入口类就是插件接口的一个实现,在把插件的jar加载到系统中后就可以根据插件描述信息来启动插件。

另外由于ClassLoader存在访问隔离,简单来说就是用上面例子中的代码加载两个jar到系统中那么两个jar中的类是不能相互访问的。因为他们是平级的不存在父子关系。这样在需求上如果存在一个插件依赖另一个插件中的类的情况就不能达到目的。这里访问权限的问题我将在下一篇文章中介绍一种解决方案。

分类: 高级民工 标签:

Java RMI

2012年6月5日 没有评论

  Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。作为早期的分布式解决方案RMI在如今还是有其合适的应用场景的,诸如EJB,JMX都是建立在rmi上的。

  RMI的应用主要包含有Remote,UnicastRemoteObject,Naming等类或者接口实现,一个简单的例子:http://www.cnblogs.com/ninahan0419/archive/2009/06/25/javarmi.html

了解一下RMI也许在以后可以用上。

分类: 高级民工 标签: ,

差点苦逼了

2012年2月9日 1 条评论

今天准备更新一网站,但登陆phpMyadmin时不知道怎么的登陆到博客的了。结果把数据库中的表一删当即发现似乎哪里不多,仔细一看苦逼了。Blog的数据库被删除,而且平时也没有备份。。仔细想了想似乎以前在Dreamhost中有个Restore DB可以恢复数据库。。登陆到Dreamhost的Panel后再Mysql Databases 找到需要恢复的数据库,Restore DB既可恢复了,哈哈。

分类: BLOG建设 标签:

在Flex的Preloader中加载初始化信息

2012年1月6日 1 条评论

  最初的需求是需要在应用初始化的适当时机加载相关的配置信息,以便进行后续的初始化工作。后端是使用BlazeDS,整个系统基于RemoteObject通信。
Flex应用的初始化顺序是,preloader->systemManager->FlexApplication started…
然后才是:
preinitialize
  在所有的初始化之前触发,没有子组件的定义,但是可以引用组件的变量.
initialize
  当所有子组件生成完成后触发,在这个时间点还没有组件被渲染出来.
creationComplete
  组件定义完成并已经在显示列表.
applicationComplete
  所有的组件初始化完成并显示.

preinitialize之后application的初始化已经无法被控制了,所以需要在preinitialize之前进行配置信息的载入Preloader恰好能达到目的,通过重写SparkDownloadProgressBar,并监听FlexEvent.PRELOADER_DOC_FRAME_READY事件可以在application初始化前拦截。
阅读全文…

分类: 高级民工 标签:

一个网站克隆的代码

2012年1月4日 没有评论

  这个玩意是一次朋友站点被恶意复制后作为反击而写的。功能比较简单指定规则后可以对目标网站进行复制。可以把内容采集到本地,可以通过代理访问目标站点,把目标站点内容传送给浏览者。代码运行在php下,通过网址 http://xxx.com/sitec/admin.php 可以进入一个简陋的管理后台,具体使用方式这里就不作详细说明了。
  如果对实现感兴趣请下载源码:Download
  如果有更好的想法以及对如何防御恶意站点复制欢迎在留言。

分类: 源码分享 标签: