论坛首页 Java企业应用论坛

使用JIOPi-iBean实现代码所见即所得-交流代码更方便

浏览 2714 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-06-03  

论坛经常会看到交流代码的帖子,然而如果要让帖子上的代码在自己的机器上运行起来,可能不是一件容易的事情,如果没有提供下载包,就得自己新建若干类,然后 复制 粘贴,但其实用到的只是一个接口,如果实现类稍微复杂点,就还可能用到了一些第三方类库,部署起来就更麻烦了。

 

JIOPi提供了 所见即所得 的Java代码风格,即如果代码发布方将其代码编译成Jar包后放在一台服务器上,并配置成JIOPi标准模块库,即可发布 所见即所得 的Java代码,也就是可以直接复制论坛帖子上的 若干行测试代码 到一个测试类中,直接执行即可,而不用关心任何相关程序的下载、部署的问题,让代码交流更方便。

 

我这里就借用 Agrael 前些时候贴出来的一个 ReferenceMap 的实现来说明如何使用JIOPi-iBean来发布 所见即所得的测试代码,原文地址:http://www.iteye.com/topic/671298

源码还是挺多的,不过测试代码其实很短,下面回顾一下:

public static void main(String[] args) throws Exception {
		ReferenceMap<Object, Object> referenceMap = new ReferenceMap<Object, Object>(ReferenceKeyType.WEAK, ReferenceValueType.WEAK);
		Object key = new Object();
		Object value = new Object();
		referenceMap.put(key, value);
		System.out.println(referenceMap.isEmpty()); // 返回 false
		// 由于是弱引用,所以将 key 或者 value 其中某一个 设置为 null 都可触发清除
		key = null; // 将 key 消除强引用
		//value = null; // 或者注释上面一行将该行取消注释,将 value 消除强引用
		System.gc();
		TimeUnit.SECONDS.sleep(5);
		System.out.println(referenceMap.isEmpty()); // 返回true,证明已经被清除,这期间不需要像WeakHashMap一样操作后才清除,并且保证并发安全
	}

虽然 作者提供了 源码下载包,不过由于部分不是很关键的类的依赖,源码不能通过编译,于是我又改了源码,才运行了上述测试程序,前后花了差不多十分钟

 

如果用JIOPi模块库来发布,任何一个人运行这段代码估计要不到1分钟,要做的事情就是将下面的代码复制到一个测试类中,然后点IDE上的运行按钮:

 

import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.jiopi.framework.CentralConsole;
import org.jiopi.framework.FrameworkInitializer;




public class ReferenceMapTest {

	public static void main(String[] args) throws Exception {
		FrameworkInitializer.initialize();
//Map<Object,Object> referenceMap = CentralConsole.accessControlPanel("agrael.collection.referencemap", null, Map.class.getName(), null);
		Map<Object,Object> referenceMap = CentralConsole.accessControlPanel("http://www.jiopi.org/ibean/resourcepools/modules/agrael.collection.referencemap/agrael.collection.referencemap.xml", null, Map.class.getName(), null);
		Object key = new Object();   
        Object value = new Object();   
        referenceMap.put(key, value);   
        System.out.println(referenceMap.isEmpty()); 
        
        key = null;
        System.gc();   
        TimeUnit.SECONDS.sleep(5);   
        System.out.println(referenceMap.isEmpty()); 
	}
}

 其实跟上面那段代码没有太大的不同,只是忽略了实现类的细节,取而代之的是 一个 模块的 URL地址,因为ReferenceMap 是Map的实现类,所以直接用Map类进行调用使用

注释掉的那行代码使用了模块名而非URL,是因为有配置文件进行了模块库的配置

 

当然,如果你现在将这段代码复制到你的Eclipse里面,还是不能执行的,因为你要安装iBean,安装iBean也很简单,只要将附件压缩包中的 iBeanWithJIOPi-0.3.0.0.jar放在lib下,jiopi.properties 放在classpath下即可,当然这是一劳永逸的事情,不用每次都安装

 

当然,不要认为一个几十k的jar能实现这些功能,这只是一个网络安装引导包,真正的程序是会在第一次运行时从网络下载,更多详细配置说明请下载发布程序:http://code.google.com/p/ibean/downloads/list

 

JIOPi 所见即所得 代码支持就介绍到这里,JIOPi目前已经可以很好的支持开发本地模块化Java系统,更多范例我会稍后逐一介绍,多谢大家捧场哈。

   发表时间:2011-02-22  
支持下,过几天会详细了解的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics