esp-isys平台开发java实时应用系统
ESP-iSYS平台开发JAVA实时应用系统
——JRtdbc 实时数据库与JAVA的桥梁
——ESP-iSYS系列技术小品文(2)
实时数据库系统作为现代信息系统的核心,是企业级应用的实时数据中枢,通过该系统,上层应用系统(如 ERP 系统),可以获得良好的实时统计数据和实时统计信息的支撑。随着SUPCON实时数据库在现代企业信息化建设当中得到了越来越广泛的应用,不但对WINDOWS平台上主流编程语言提供了良好的支持,而且在ESP-iSYS4.0版本中为Java语言的开发提供了JRtdbc接口库,该接口在Jdk1.5平台上开发,其良好的面向对象设计与实现带来了每秒访问磁盘数据50000点以上的高性能,最大化的满足了工业实时应用性能需求,在符合Java纯面向对象的编程风格的同时,又打破了Java语言低效的束缚,以JRtdbc为桥梁,应用Java语言可以方便快速的开出各种优秀的实时应用。通过阅读本文,读者不仅能用JRtdbc进行java实时应用的开发,而且能够充分体会到JRtdbc提供的简单快速开发的优越性。
一 系统结构
整个JRtdbc的对象层次结构:
系统总体结构图 -1
如上UML图,实时数据库当中的对象体系被明确的映射到了JRtdbc中,隐藏了实时数据库的一些艰涩的概念??
IConnectionPool getPool(int poolLength,int timeout) ;??其中工厂方法?用于构建默认参数配置的连接池实例,工厂方法?允许用户自定义连接池配置,参数定义为连接池连接上限,如果池中未达到上限,有新连接请求,直接新建连接放入池中返回,如已达上限,则偿试重登录其他用户空闲连接,无空闲连接存在则进入阻塞状态直到有连接释放,从而保证了系统不会无限制地增加并发连接连接池中的连接空闲达到一个给定的毫秒数后就自动释放连接,从而进一步节省实时数据库连接资源。host:192.168.0.171:5051;user=xxxxxx;password=xxxxxx;
其中各字段具体含义如下:
字段含义host为实时数据库所在计算机的IP和端口,其中,前xxx.xxx.xxx.xxx指一个4段式IP地址,“:”后为实时数据库的端口地址user用户名,有效内容为大小写英文字母、下划线password密码,有效内容为大小写英文字母、数字、下划线、连字符如果建立连接成功,则返回一个有效的IConnection对象实例,如果在连接建立过程中存在异常情况,则抛出IOException类型的异常。
位号与位号组
位号是存储在实时数据库当中的数据点,对应底层控制系统的数据源,通过JRtdbc曝露给用户的只是一个简单的ITag对象,调用其方法即可对位号/位号组进行操作,工业现场的控制设备,在提供数值的同时,也提供了对数值质量的判断,所以,实时数据库中的数据是有质量码的,通过质量码,可以确定读回的值是否可信、可用。在通常的应用中,验证质量码是缺省的,当出现错误质量码的时候,位号读取方法会抛出BadValueException异常,除了质量码跟数值,位号值还包括了采集数据值的时间戳,因此把数值,质量码,时间戳封装进了一个TagValue,作为一个位号值。位号组则是以一组位号为单位的TagGroup实例,联合读取各位号的实时值或历史值,以二维表的形式返回,以位号组中各位号名为列,支持以列名或者列索引获取组内某位号的每行数据。通过位号工厂即可获取位号与位号组对象,ITagFactory提供如下工厂方法:
名称功能getTag(String name)获取位号实例。getTagGroup(String[] names)获取位号组实例。getTagGroup(String regex)获取位号组实例。
读位号实时值
通过位号工厂ITagFactory的getTag(tagNameStr)方法来获得实际的位号实例。该方法将根据位号的具体属性,返回虚位号或实位号的实体,而JRtdbc使用者并不需要关系其细节。具体的方法如下:
ITag t = conn.getTagFactory().getTag( tagName ) ;通过ITag实例,可以完成读取实时值的操作。虽然每个位号均有其原生的数据类型,但ESP-iSYS在读取时做了安全的类型转换,也就是说,对于一个int类型的位号,仍然可以采用readFloat或readString方法,来获得浮点值或字符串值。ITag接口提供了针对不同数据类型的方法,如下:
方法功能readBoolean读取boolean类型的值readDouble读取double类型的值readFloat读取float类型的值readInt读