这次的项目是电信宽带支撑系统的一个子项目,这次项目我们要了解电信运营商的计算上网的时长来计算产生的总费用,将其存入数据库中。
首先是项目所需要的4个jar包,分别是
dom4j-1.6.1.jar #使用dom4j的方式来解析XML的jar包
log4j-1.2.15.jar #一个功能强大的日志组件jar包
ojdbc14.jar #oracle数据库的驱动jar包
woss_interface.jar #项目系统接口jar包
采集模块
准备好jar包接下来客户端实现对原始数据文件的采集,采集原始计费radwtmp文件,并整理成BIDR数据清单,我们需要两个map集合, map1集合用来存放上线信息,这是一个不完整的BIDR对象,map2存放完整的BIDR对象,将它存放到一个list集合当中。
具体实现:读取文件,将文件的信息用“ [|] ”进行分割存放在数组当中,
在数组第三项用来判断用户上线还是下线,利用7上8下原则,如果为7则为上线用户的信息,接下来判断map1中是否存入相同的登陆ip地址,因为相同的登陆ip地址会有多个用户登录,map1的key用来存放登陆ip,value用来存放此ip的用户个数,判断如果map1中存在相同的登陆ip则value值加一,否则map2的key用来存放登陆ip,value存放AAA服务器的名字,NAS服务器名字,登陆ip,上线时间的不完全bidr对象。如果数组第三项为8则为下线用户信息,解析这条数据,判断map1中是否存在相同的登陆ip,此时判断value等于一时取出此时的上线时间和下线时间计算出上线时长并把下线时间和计算出来的上线时长放到map2中,再把map2存放在一个list集合中返回这个list集合。
保存数据模块
将 BIDR类 数据清单插入数据表 t_detail_x,今天是本月的第几天,就插入到对应的表中。首先我们要连接数据库,将返回的集合放进一个list集合当中,遍历这个list集合,获取当前时间是几号,写下sql语句insert into T_DETAIL_"+format+" values(?,?,?,?,?,?),处理结果集,将6个属性插入到数据库,关闭资源。
发送功能模块
创建 Socket 对象,连接的服务器的地址和端口号,连接建立后,通过输出流向服务器端发送数据,关闭资源。在main函数里面将采集系统客户端采集形成的 BIDR数据清单 发送给服务器端。
接收功能功能模块
创建 ServerSocket 对象,绑定监听端口,通过 accept() 方法监听客户端请求,连接建立后,准备对象流,接收数据,将读到的信息返回一个Collection集合。在main函数里面接收从客户端传来的数据,并调用入库模块保存数据功能。
备份模块
在网络或数据库发生异常的情况下,将本次采集或接收到的 BIDR数据清单写入到备份文件中,其中需要两个方法,一个是加载备份文件功能,Object load (String filename,boolean flag) 其中fileName:备份文件名flag:判断是否读完后删除备份文件。目的是:取出上次备份的对象。二是写入备份文件功能,void store(String fileName,Object obj,Boolean flag)其中fileName:备份文件的名字,obj:准备备份的对象,append:是否追加。目的是将准备备份的对象写到备份文件中。此时我们要在保存数据模块中添加判断是否存在备份文件,如果存在则调用load方法加载备份文件,然后将数据插入数据库,新建一个list集合用来存放已经插入的信息,在配置文件中存放出现错误的信息到最后的信息记录。
日志功能模块
将系统运行过程信息记入日志文件,以备查验。借助第三方工具包:Log4J,可以在输出语句的时候调用Logger的方法分别为debug,error,fatal,info,warn根据不同的输出打印出不同的日志信息。
配置功能模块
将配置信息放到 conf.xml文件 中,用来实例化其它模块,降低模块之间的耦合性。 利用反射机制来实例化对象,实现Configuration的接口解析xml文件,提取出信息在其他类中实现init方法将配置文件的信息传入其他类中,利用setConfiguration方法实现实例化类。