高校云平台3.1

来源:互联网 发布:马踏棋盘贪心算法c 编辑:程序博客网 时间:2024/05/16 10:44

       高校云平台3.1,历时18天,主力开发19人,辅助开发10余人,于7月19日成功结项.

       3.1是在3.0的基础上,修改底层,加上AOP切入日志和权限,容器,多线程,jar包减肥(定制jboss的modules),推行easyui的war包减肥(抽取公共的web.xml),将hibernate的级联关系改为主键关联,系统之间传递数据map,excel导入导出,前台容器,云效果(注册建库建表登录),并且最终部署在linux系统上,测试使用真实数据。

       云效果,权限加上注册功能,能在注册的同时,为新注册的用户,生成一个库,库中会新建一套所有的表.目前建库和建表都是通过写sql语句,或者执行sql脚本.但是需要的大概40s的时间,需要优化.

 

       将底层从原来的JPA改为了EclipseLink,实现多租户,所有用到的方法都要加上库名参数,若参数是实体类型,要求给实体的属性dataBaseName赋上值,普通的参数,则需要添加一个String dataBaseName的参数.底层也做出控制,若是dataBaseName没有值,则默认给一个值。但是这个做法,造成项目完成之后一些漏洞。如部分方法中,没有给dataBaseName赋上值,底层给他默认了一个值,所以测试的时候也不会报错.而若是一直在默认的库上操作还好,若切换到其他用户的库如B库,则数据读取或存储就会到默认的库中读取或存储,而不是在B库.这样用户的数据的隔离性没有做好.

      但是我们实现了多租户的功能,就是用户登录的时候,获取他所在的库名,放到session中,然后我们在controller层获取到库名,根据库名去访问不同的表,拿不同的数据.

 

       AOP切入日志和权限,目前切入日志是成功的,但权限还未切入,由于时间的原因,3.1使用了shiro实现的cas单点登录,但是没有做到界面上的权限控制.而切入的日志,由于部署在基础项目中,造成基础系统大量的写操作,基础压力太大,经常崩.所以后期验收时,日志已经去掉,去掉只需要将easyui中web.xml,去掉一个spring-aop.xml的读取即可.目前需要解决这个问题.

       容器,我们在1.0,2.0,3.0已经使用了容器,Web容器,Spring容器,Ejb容器,都是容器.所以,没有再特意用上我们之前写的容器例子.

        jar包减肥,通过定制一个jar包非常全的modules,来达到jar包减肥的目的.但是实际上,jar包并没有完全减肥,目前大家的jar包大概还有20M左右,而真正减肥的jar包大概在1M左右,若真的有些特殊的jar包,大小也应该在5M左右.原因是有一部分的jar没有写成<scope>为provided.所以即使自己这里没有用过这个jar,但是因为依赖的jar包中有这个jar,所以会下载下来.

        easyui的war包减肥,将easyui的内容一份为二,一部分通过hfs发布出来,包括图片,样式和js.一部分通过伺服,down到本地,包括jsp页面和web.xml.从而,抽取出公共的web.xml,并且减少easyui的war包大小,从1.7M减为15K.

        hibernate的级联关系改为主键关联,之前用hibernate的级联关系,如基础级联关系太多,导致查询学生,会将基础的所有信息都级联出来,效率非常低.后来优化成new map(),查什么就写什么,这样只会发出一条sql语句,效率提高很多.但是,后来我们选用坤哥提供的主外键的关联方式,如Student和Class有关联关系,则在Student实体中,放一个属性classId,类型是String.并且写一个private的Class实体,这样生成表时做对应,但是实际上我们是靠sql脚本建的库,应该不需要这样的对应.

 

        系统间传递数据,用map,而不是之前的传递实体.传递实体的做法,若实体稳定这么做是没问题的,但是一旦实体不稳定,而我有用到了你的实体,则会造成比较大的影响.如Student,原来的属性为stuNo和stuName,后来改成studentNo和studentName.我若直接用你的student实体,则student.stuNo,就要改代码,改为student.studentName.所以为了减少这种影响,要求系统间的,传递map数据。接口双方约定map数据的key都是什么,必须给的key有哪几个,以后不管怎么变化,约定不变,key不变,则系统没有影响。

       而由于之前没有做好接口的约定,后面有没有做好接口收集时的详细说明,导致接口耽误了很长的时间.并且我认为从一开始就应该开始设计接口,并且有专门的人员负责收集,处理接口的问题,并且不应该写假数据,则应该直接在数据库中导入真实的数据,然后给他们写接口.


       excel导入导出,学敏改良版,采用xml配置.部署在基础,采用远程调用execlUtil,不过因为persistence.xml的原因,只认一份api,所以只能在一个系统中使用.所以3.1最终没有用上.

       前台容器,在部分同学的页面已经加上这个效果.只需要在样式上加一点东西,就能实现在不同的地方右击,出现不同的效果.由于后期需要调优,并且为了验收,所以没有大力推广,只在一部分人页面上实验可用.

       系统完成之后,发布在linux的服务上.为基础,考评,权限,新生各部署一台服务器,安装jdk,jboss,maven;然后配置hosts和去掉selinux,关闭防火墙,让linux和windows,以及linux的远程调用可以调通.然后部署2台测试机,配置一样.还有一台部署jenkins,一台部署svn,一台部署mysql.linux采用的都是图形化界面,遇到的问题较少,若是采用纯命令行,应该会遇到很多问题,锻炼也更多.

       测试使用真实的数据,发现之前设计的功能有一些问题,如我的功能是分配班级,但是我分配班级的命名不是很好,比真实数据的差一些,并且因为有真实数据,发现原来classCode也是有规律的,但是这是功能我之前没做,后来只好急急忙忙做个.

       以上就是我能想起来的3.1的功能了,3.1在这么短的时间内完成了这么多的功能.也让大家明白,没有什么问题,什么困难是我们克服不了的.

0 0
原创粉丝点击