# openhandx common **Repository Path**: zhanght_admin/openhandx-common ## Basic Information - **Project Name**: openhandx common - **Description**: OpenHandx-common整理了日常开发中可能经常用到的方法、工具类。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2018-04-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # openhandx common 1. 前言 - OpenHandx-common整理了日常开发中可能经常用到的方法、工具类,也是openhandx系列的基础公共类。其中包括:反多线程、JMS连接池、多数据源的数据库连接池、自定义表达式运算、数据模型、树结构算法、上下文管理、数据压缩接压、数据加密解密、xml解析与生成、udp传输、数据转换等工具类。Common会随着后续项目的开发而不断补充。 - 由于common是最基础的工具包使用简单,大家看javadoc就可以了。本文就几个主要工具类的使用进行介绍。 - 1.04以后版本的对Model查询功能兼容性大大增强,支持sqlserver、oracle、sybase、mySql几个主流数据库。并增加了对WebService连接池的支持。- 1.05以后表达式增加支持字符串运算。 2. 反多线程 - 反多线程又叫逆转多线程,是指多线程逆向操作。将一个多核或超线程的CPU模拟成一个单线程的强大CPU。多线程开发是指将一个单线程程序改成可并发执行的子程序(多线程执行)以提高整个代码效率,但是有多个多线程程序同时执行会是CPU或服务器资源不堪重负,反而降低整个程序的效率甚至系统崩溃。反多线程核心技术也是使用多线程,只是将多线程的资源管理起来合理地并发执行,先发起的程序必定先执行(多线程执行),如果资源允许的情况下其他程序也将并行执行,整个过程开发者不用自己创建线程,就象单线程的程序一样,但是比多单线程快。 3. JMS连接池 - JMS连接池的类路径在open.jms下,可以管理多个服务器的JMS连接,同时也支持多种不同厂商的JMS驱动(jms1.1的规范),开发人员不必了解过多的原来JMS细节就对JMS服务器可以发送和接收消息。 4. 多数据源的数据库连接池 - 数据库连接池的类路径在open.database下,可以管理多数据源的数据库连接池。每个连接池负责分配、管理和释放数据库连接。并且支持空闲超时、连接中断自动重连。 5. openHandx-unreal的WebService连接池 - 由于每个服务器对外提供的连接数存在上限,即使客户端连接关闭,服务器端也不会立刻释放,这就造成频繁向服务器发送WebService请求会造成拒绝连接的情况,使用WebService连接池很好地解决这类情况。 6. 自定义表达式运算 - 自定义表达式运算的类路径在open.calculate下,按照用户自定义计算表达式进行计算,表达式的运算全部是以BigDecimal为基础保证了运算的精度无损失。同时支持加减乘除、括号、逻辑运算、条件判断、正玄函数、余玄函数、绝对值、平方、开方、幂运算、对数、最大值、最小值等函数。除此之外表达式中还支持变量,也允许开发人员为表达式计算开发新的函数。 7. 数据模型 - 数据模型的类路径在open.model下,数据模型的主要功能是保存数据库记录的。虽然现在很多开发使用Pojo对象,面向对象的领域模型出发点是好的,但实际上应用的并不是那么好。贫血模型的只是简单的值对象意义不是很大,充血模型又需要开发者有足够的抽象和设计能力,另外国内项目需求变化太大,不好的领域模型很难适应变化。OpenHandx的数据模型是面向数据的,容易理解,并支持数据的查询、分组、排序等功能。 数据模型分为三种:单条数据存储对象、多条数据存储对象(非持久的、持久的)、复合的数据存储对象 - 7.1 单条数据存储对象 - 单条数据存储对象open.model.RecordVO能动态保存多字段,并且每个字段值能使用不同的方法转化成需要数据类型 - 7.2 多条数据存储对象(非持久的) - 多条数据存储对象open.model.RecordSetVO,实现了IRecordSetVO接口,能动态保存多字段和多条数据,并且还有对RecordSetVO内的数据进行按任意字段排序、分组、统计、分组求和统计、求唯一、查询、索引查询、从数据库加载的功能。这些功能对开发人员来说都是很常用的。她与PersistenceRecordSetVO相比优势在于性能。 - 7.3 多条数据存储对象(持久的) - 多条数据存储对象open.model.PersistenceRecordSetVO,也实现了IRecordSetVO接口除了具有RecordSetVO的绝大部分功能,还能将数据持久到本地服务器硬盘中,这就让PersistenceRecordSetVO能保存海量的数据,数据计算都可以在本地服务器中进行,减少数据库服务器的压力。 - 7.4 复合的数据存储对象 - 复合的数据存储对象open.model.MulripleVO,能保存一个单条数据存储对象和多个多条数据存储对象,目的是为了保存复杂关系的数据。 8. xml解析与生成 - 8.1 xml解析 - xml解析类open.xml.XmlReader能将xml字符或文件读取到Pojo值对象中,开发人员只需要几行代码就能完成工作,而不必了解dom等复杂的xml解析工具类。目前XmlReader能支持java的基本数据类型、List接口、自定义的Pojo及嵌套。XmlReader支持属性方式、描述方式。 - 8.2 xml生成 - xml生成open.xml.XmlWriter是XmlReader逆过程,能将pojo生成xml字符或文件。目前XmlWriter能支持java的基本数据类型、List接口、自定义的Pojo及嵌套。XmlWriter也支持属性方式、描述方式。她的好处是可以是程序在运行时修改xml,从而达到修改配置的目的。 9. Class方法工具类 - Class方法工具类open.tools.classmethod.ClassMethod能获取某个Class的get、set方法,并对这些方法取值和赋值,根据方法名称、参数类型、参数名字获取的方法定义。