JIOPi规范定义了区分版本的标准JIOPi模块库,只需将本应部署在lib目录的Jar包放在JIOPi模块库中,并使用JIOPi风格访问,当在JIOPi模块库中添加一个新的版本时,所有使用JIOPi风格使用该模块库的程序都将自动使用新版本的程序,而无需进行Jar包替换。
下面就以将apache httpclient 4.0.1发布到JIOPi模块库为例,展示如何以分离的模式部署Jar类库程序,并实现类库程序的自动升级。
使用JIOPi模块库除了可以实现类库的自动升级,根据JIOPi对模块隔离运行的设计,在一个系统中可以同时运行一个类库程序的多个版本,这就如同一个Servlet容器运行多个webapp而互不影响是一样的实现原理。
要使用 apache httpclient 4.0.1,你需要在lib下放3个jar:
httpclient-4.0.1.jar
httpcore-4.0.1.jar
commons-logging-1.1.1.jar
如果直接将这三个jar放在lib目录,你的使用代码如下:
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.DefaultHttpClient;
public class HTTPClientTest {
public static void main(String[] args) {
HttpClient httpclient = new DefaultHttpClient();
HttpHead httphead = new HttpHead("http://www.iteye.com/images/logo.gif");
//HttpHead httphead = new HttpHead("http://groups.google.com/groups/img/gicons/discuss.jpg");
try {
HttpResponse response = httpclient.execute(httphead);
StatusLine statusLine = response.getStatusLine();
String status = statusLine.toString();
System.out.println(status);
} catch (IOException e) {
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
}
}
这是标准Java代码风格,
不过当你需要对httpclient的版本进行升级时,你需要替换掉你所有项目的lib目录中对应的jar包
使用JIOPi标准模块库,你则只需替换一个地方即可。
JIOPi标准模块库可以是任何一个可以被容器支持的URL,iBean目前支持http模块库和本地模块库。
下面我们就来看看如何将这3个Jar放入JIOPi模块库并用JIOPi风格进行访问
添加模块库
要在JIOPi中添加一个新的模块库,只需要在jiopi.properties文件中添加两行
jiopi.resourcepool.org-jiopi.path=http://jiopi.vip7.es163.net/ibean/resourcepools/jiopi-ibean.xml
jiopi.resourcepool.org-jiopi.pri=1
其中org-jiopi是模块库的自定义名,只需保证同一配置文件不重名即可
path定义模块库的配置文件地址
pri定义模块库的优先级
运行时JIOPi容器会按优先级顺序从多个标准模块库中搜索符合条件的模块
标准模块库配置文件
下面就要建立你的模块库配置,建议将模块库的配置文件放在模块库根目录
模块库配置文件如下,可以不用更改直接使用
<?xml version="1.0" encoding="UTF-8"?>
<resourcepools xmlns="http://www.jiopi.org/2010/JIOPISchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jiopi.org/2010/JIOPISchema xsd/jiopi-config-resourcepools.xsd ">
<modules url-format="${module}/${module}.xml"/>
</resourcepools>
其中 url-format 指定了当访问一个模块时,模块的配置文件的位置,这里指定的是配置文件目录下的 module/module.xml
即当容器在该模块库搜索 模块 apache.httpclient 模块时,将会尝试获取 apache.httpclient/apache.httpclient.xml文件
创建模块配置文件
1 在模块库根目录创建 文件夹 apache.httpclient
2 在新建的文件夹内创建 apache.httpclient.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module name="modulename" xmlns="http://www.jiopi.org/2010/JIOPISchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jiopi.org/2010/JIOPISchema xsd/jiopi-config-module.xsd ">
<release version="4.0.1.0" base-url="4.0.1.0" reference="apache.httpclient-4.0.1.0.xml"/>
</module>
其中每个版本一个release元素,由于httpclient采取的是3位版本号,而JIOPi模块库的模块需要4位版本号,因此第4为补0
version 指定版本
base-url 指明当前版本所在的文件夹为 4.0.1.0 ,配置文件在该文件夹下,名为 apache.httpclient-4.0.1.0.xml
创建版本配置文件
1 在模块目录创建 4.0.1.0 文件夹
2 将 该模块的3个Jar包放在该文件夹下
3 创建 apache.httpclient-4.0.1.0.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<release version="4.0.1.0" xmlns="http://www.jiopi.org/2010/JIOPISchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jiopi.org/2010/JIOPISchema xsd/jiopi-config-module-release.xsd ">
<resource>httpcore-4.0.1.jar</resource>
<resource>commons-logging-1.1.1.jar</resource>
<resource>httpclient-4.0.1.jar</resource>
</release>
这样便可以使用JIOPi风格访问 apache httpclient 4.0.1了
当有新版本时,如 4.0.2,则修改apache.httpclient.xml文件,增加一条新的 release 元素及配置该release
则所有使用该模块库的JIOPi风格的程序都将自动升级到 4.0.2(在程序重启后生效,不会立刻生效)
此时资源库的目录结构如下:
+apache.httpclient
+4.0.1.0
apache.httpclient-4.0.1.0.xml
commons-logging-1.1.1.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
apache.httpclient.xml
jiopi-ibean.xml
要使用该模块库
模块库
http://jiopi.vip7.es163.net/ibean/resourcepools/jiopi-ibean.xml
已经配置了 apache httpclient 4.0.1你只需在你的应用中部署iBean.jar和放置jiopi.propertiese文件即可书写JIOPi免部署风格的程序使用该类库
代码如下
import org.jiopi.framework.CentralConsole;
import org.jiopi.framework.ModuleConsole;
import org.jiopi.framework.ControlPanel;
import org.jiopi.framework.FrameworkInitializer;
public class HTTPClientTest {
public static void main(String[] args) {
FrameworkInitializer.initialize();
ModuleConsole apacheHttpclient = CentralConsole.accessModuleConsole("apache.httpclient");
ControlPanel httpclient = apacheHttpclient.accessControlPanel("org.apache.http.impl.client.DefaultHttpClient", ControlPanel.class);
ControlPanel httphead = apacheHttpclient.accessControlPanel("org.apache.http.client.methods.HttpHead",ControlPanel.class,"http://www.iteye.com/images/logo.gif");
//ControlPanel httphead = apacheHttpclient.accessControlPanel("org.apache.http.client.methods.HttpHead",ControlPanel.class,"http://groups.google.com/groups/img/gicons/discuss.jpg");
try {
ControlPanel response = httpclient.operate("execute", ControlPanel.class, httphead);
ControlPanel statusLine = response.operate("getStatusLine", ControlPanel.class);
String status = statusLine.operate("toString", String.class);
System.out.println(status);
} catch (Exception e) {
e.printStackTrace();
}
httpclient.operate("getConnectionManager", ControlPanel.class).operate("shutdown",void.class);
}
}
这是一段所见即所得的代码,只要项目内部放了iBean的jar包(默认配置的模块库包含了apache httpclient 4.0.1),则直接复制该段代码即可执行
为了能够获得较好的Java代码风格,应当将使用API和实现分离,以便可以只部署API,并使用IoC框架(如Spring)进行实现对象的依赖注入,JIOPi的API则交由IoC框架来调用,避免程序中出现JIOPi的代码和反射方式调用,提高程序的执行效率和可读性
但是apache httpclient 4.0.1并没有将 调用API和实现类有较为明确的划分(理想情况应当是 API一个jar,实现类一个或多个jar),所以这里无法给出使用API部署风格的调用代码。
理解JIOPi标准模块库
JIOPi标准模块库提供了一种类库Jar分离式部署的方式,以避免项目lib目录的Jar包混乱,在API部署模式下,也可以将JIOPi的API看成一种从容器获取对象的方式,就如同Spring中调用 ApplicationContext的 getBean方法一样,只不过Spring将类名写在了配置文件中,使用id来获取对象,在JIOPi 0.1中,需要写全类名而已,当然,为了统一,你可以将Spring配置中应当配置类名的地方配置成JIOPi的API静态方法调用,从而可以从JIOPi标准模块库中获取对象,而不是从项目的ClassPath中获取对象,从而实现类库的分布式部署和自动升级。
分享到:
相关推荐
易语言模块易语言OGRE类库1.1.rar 易语言模块易语言OGRE类库1.1.rar 易语言模块易语言OGRE类库1.1.rar 易语言模块易语言OGRE类库1.1.rar 易语言模块易语言OGRE类库1.1.rar 易语言模块易语言OGRE类库1.1.rar
E4A的类库通常包括各种内置控件、网络通信、数据库操作、多媒体处理等模块。通过这些类库,开发者无需从零开始编写所有代码,极大地提高了开发效率。 "支持库"是指为了增强或扩展主程序功能而提供的额外代码集合。...
"c#自动升级类库"是针对软件自动化更新的一种技术实现,它允许程序在后台下载并安装最新的版本,无需用户手动操作。这样的类库通常会包含一系列的函数和方法,用于检查新版本、下载更新、安装新文件以及处理可能出现...
易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar
下面我们将深入探讨C++类库的一些核心概念和常用库,以及如何有效地使用它们。 C++类库是预先编写好的函数和对象集合,它们被封装在头文件中,供开发者在自己的项目中调用。使用类库可以极大地提高开发效率,因为...
在.NET框架中,C#类库(Class Library)是一种用于创建可重用代码的项目类型,它可以被其他应用程序引用和使用。本篇文章将详细介绍如何使用Visual Studio(VS)来生成C#类库,并生成DLL文件。 一、创建C#类库项目 ...
在压缩包文件"Include"中,可能包含了这些类库的头文件,它们是实现具体功能的关键,通过#include指令将这些头文件包含到源代码中,就可以使用类库提供的接口和功能了。 总的来说,C++类库是C++编程的重要资源,...
这些类库通常是为了提高开发效率、解决常见问题或者实现特定功能而创建的,可能包括各种实用工具类、数据处理模块、网络通信组件等。在.NET框架下,开发者可以通过封装常用功能,将它们整理成类库,以便在不同的项目...
在提供的文件列表中,`HslCommunication.dll`是一个动态链接库文件,它是Windows操作系统中实现特定功能的模块,包含了实现ModBus TCP通信的函数和数据结构。而`HslCommunication.xml`可能是这个库的文档,其中包含...
NModbus类库是实现Modbus协议的常用工具,本文将对NModbus类库的使用进行总结,涵盖从基本概念到实际应用的各个方面。 1. 导入NModbus类库 首先,需要将NModbus类库导入工程中,并添加引用、命名空间。工程属性...
这是基于.Net Framework 4.0,封装了串口一些操作,如打开串口、关闭串口、串口发送、串口接收等,方便下次需要使用串口功能时,直接在解决方案中添加该类库。可以直接调取使用。 目前完成功能: 1、打开串口 2、...
`libs`目录是E4A项目存放外部依赖库的地方,当E4A编译器检测到该目录下的类库后,会自动将其包含进编译的APK文件中,从而使应用具备类库提供的功能。 类库通常包含一系列的Java源代码文件(`.java`)或编译后的字节...
在这个“PHP实现的验证码类库”中,我们可以学习如何使用PHP创建一个自定义的、高效且安全的验证码生成和验证功能。 验证码类库的核心功能包括以下几个方面: 1. **随机字符生成**:验证码通常由字母、数字或者...
3. **面向对象设计**:C#作为强类型、面向对象的语言,模块库可能采用了类、接口和继承等面向对象的机制,实现代码的复用和模块化。 4. **错误处理**:良好的异常处理机制是保证程序稳定运行的关键,源码中应包含对...
在.NET框架中,C#语言提供了强大的功能来实现动态加载外部库,这包括VC++编译的动态链接库(.dll)以及C#自身编译的类库(.dll)。这个场景下的“动态加载”指的是在程序运行时,而不是在编译时决定要使用的库或者类...
标题中的"C# Modbus 开源类库"是指一个基于C#编程语言的开源库,用于实现Modbus通信协议。Modbus是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单、有效的数据交换。C# Modbus开源类库提供了一个...
本教程聚焦于E4A中的一个关键组件——“自动更新类库”,这是一个能够帮助开发者轻松实现应用内自动更新功能的库。这个类库不仅提升了应用的用户体验,还能确保用户始终使用的是最新、最安全的软件版本。 自动更新...
这些类库可能包括解码、网络传输、设备控制等模块,使得开发者可以方便地调用API来实现视频播放、录像回放、云台控制等功能。 在这个项目中,源码部分非常重要。源码是程序的原始形式,包含了一系列的C#文件,它们...
5. **.elb文件**:这是E4A特有的扩展库文件格式,包含了预编译的代码和资源,可以方便地导入到E4A项目中,让开发者能够快速利用已有的功能模块。 6. **集成与跨平台**:尽管E4A主要使用Java语法,但其可以与.NET...