《基于JSF和Hibernate框架的订单管理系统编程优化技术研.doc》由会员分享,可在线阅读,更多相关《基于JSF和Hibernate框架的订单管理系统编程优化技术研.doc(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、摘要:企业在信息化建设中,随着时间的推移,系统运行效率会逐渐降低,性能下降。青上化工订单管理系统在运行中对程序设计进行了优化,恢复了系统运行性能,使业务高效、顺畅的开展。 中国论文网 关键词:JSF;Hibernate;订单管理系统 中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)24-5806-04 The Research and Implementation on Order Management System Programming Optimization Technology Based on JSF and Hi? bernate LIU Sheng
2、(Tianjin City Vocational College, Tianjin 300250,China) Abstract: With the passage of time,Enterprise information construction of the operation efficiency of the system will gradually decrease, decline in performance. Green On Chemical order management system in the operation of the program design i
3、s optimized, restore the op eration performance of the system, make the business efficiency, smooth development. Key words: JSF;Hibernate;order management system 1概述 企业进行信息化管理后,带来了业务量的不断增长,经营效率不断提高。然而,信息化应用系统在发挥重要作用的同时,也存在着一定的危机。随着业务负载剧增,往往会出现响应速度慢,性能下降,甚至系统崩溃,导致企业业务无法开展等问题。 青上化工(中国)投资有限公司(以下简称“青上化工
4、”),总部设在天津。至今已在上海、厦门、广州、株洲等地建起了十余家独资和合资企业,总投资8000万美元。到目前为止,其硫酸钾生产能力已达到45万吨年,事实上,青上已成为亚洲最大和世界第三大硫酸钾生产厂。青上化工订单管理系统的成功运用,大大提高了工作效率。但是,业务负载的不断增大,数据量的不断增多,系统出现了性能下降,直接影响了企业正常业务的开展。 该文依托青上化工订单管理系统,针对目前系统出现的性能下降情况,从编程角度对系统进行优化,恢复与提高原系统的性能,让业务高效、成功地开展。 2 JSF模块优化 Java Server Faces (JSF)是一种用于构建Web应用程序的新标准Java框
5、架。它提供了一种以组件为中心来开发Java Web用户界面的方法,从而简化了开发。 JSF还通过将良好构建的模型-视图-控制器(MVC)设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。由于JSF是通过Java Community Process (JCP)开发的一种Java标准,因此开发工具供应商完全能够为Java Server Faces提供易于使用的、高效的可视化开发环境。 青上化工订单管理系统是采用JSF+Hibernate框架实现的,Web应用用的是JSF架构,其中控制器用Faces Servlet来实现,模型用class+Javabean+Hibernate来实现,视
6、图用JSP来实现,将数据通过Web页面来显示给用户。下面就对系统的按钮点击控制、数据操作数、数据分页显示三部分实现JSF模块优化,以解决响应速度慢等问题。 2.1按钮点击控制 防止客户多次点击操作按钮,避免客户认为系统没有反应,就多次点击查询按钮,多次重复发出请求,对系统造成更多没有必要的负担,影响系统的性能,青上化工订单管理系统对按钮控制进行限制,每次请求没有结束之前,不允许再次点击。整个控制由JavaScript来完成。以客户服务单为例,下面是核心代码,粗体部分是添加的JS控制: 2.2减少数据操作数 JSF标签hx:dataTableEx绑定的value值一般是后台bean的成员变量。按
7、照JSF渲染原理,标签基本的获取值的方式是直接调用get()方法。将数据库操作放在get()里面有弊端,一方面页面渲染的时候就会默认进行数据库操作,给系统造成额外的开销,性能降低。另一方面,数据库操作放在get()方法里面会造成多次数据库操作,从而造成数据库操作被多次执行。青上化工订单管理系统采用的优化方式是,数据库操作不放在hx:dataTableEx绑定变量的get()方法里,使用相关变量控制,以减少数据操作数。下面是核心代码: public class ComplainInfoSearchBean implements Cloneable private boolean tag=fals
8、e;/变量控制,判断是否是第一次点击 private int clickNum=0; /变量控制 List resultList;/ hx:dataTableEx绑定的value值 public clickProcess() /数据库操作 public List get ResultList () if(tag=true&clickNum!=1) clickProcess(); clickNum=0; return resultList; 2.3数据分页显示 当对数据量没有控制时,容易造成内存溢出情况的发生。对数据库查询中,要尽量避免一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存
9、,就可能引起内存溢出,同时一次获取全部数据,速度也较慢。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。下面是青上化工订单管理系统采用数据分页显示的核心代码示例,以解决因一次性加载到内存的数据量过于庞大,使得Java堆空间耗尽的性能瓶颈: public List getDispatchList(SearchDispatchList searchDispatchList) int beginNum;/初始值 int maxNum;/最大查询数 try String procedure =
10、 BM1_DISPATCH_SEARCH; String procedureStatement = call + procedure +(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); CallableStatement cstmt = ht.getConnection().prepareCall( procedureStatement); cstmt.setInt(25, beginNum); cstmt.setInt(26, maxNum); return; 3 Hibernate模块优化 Hibernate作为持久层,与数据
11、库直接打交道,这一块很容易出现内存溢出,造成性能下降,对青上化工订单管理系统hibernate层:主要是连接池、数据批量处理、session处理进行优化,从而提高系统的性能。 3.1连接池 系统采用的连接池是hibernate默认的连接池,hibernate默认连接池有一个问题,不会自动检测数据库连接是否断开,数据库一段时间没有访问就会断开连接,但连接池里的连接却还是存在,下次访问hibernate会继续使用这个连接,导致数据库连接异常。这里将采用c3p0作为系统的连接池,c3p0连接池稳定性尚好,并且性能也可以。下面是c3p0连接池的配置: org.hibernate.connection.
12、C3P0ConnectionProvider 100 20 5000 100 3000 2 false 3.2批量操作 Hibernate在进行批量插入和删除上,性能一直都比较低。在批量数据库操作的时候,绕开hibernate,采用JDBC更好。在青上化工订单管理系统中,批量操作体现在报表打印上,系统报表实现的是采用Crystal Reports技术,在打印之前,均有一个先删除数据库表格中的数据,然后插入新数据的操作,这种批量操作如直接使用hibernate操作性能往往不是很理想。绕开hibernate,直接使用JDBC往往性能要较好。例如发运单报表导出,粗体部分是直接写的SQL语句,通过JD
13、BC来查询: public void insertTalbeServeSpStore(ManageStockingBean manageStockingBean) List tempList = manageStockingBean.getStockingDetailInfo(); String ip=getIP(); for (int i = 0; i session =new ThreadLocal(); public static Session currentSession() throws HibernateException Session s=session.get(); if(
14、s=null) s=sessionFactory.openSession();/打开连接 session.set(s); return s; session的关闭问题是最头疼的事情,如果在DAO层就把session关闭,因为hibernate存在lazy loading,那么在应用层内把关系结合都初始化(违背hibernate设计初衷,对性能有较大影响),否则hibernate就会抛session already closed Exception;如果session不关闭,那么就必定会造成内存泄漏。青上化工订单管理系统采用的是open session in view模式来解决这种矛盾。将ses
15、sion绑定到当前线程,当某个新线程开启时,就自动在数据库连接池中获取连接,在线程结束后就自动释放连接。下面是核心代码: public void doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg2) throws IOException,ServletException /自动获取连接 HiberanteSessionFacory.currentSession(); try arg2.doFilter(arg0,arg1); finally /自动释放连接 HibernateSessionFactory.closeSession(); 4结束语 在软件开发项目中,系统的性能在很大程度是由代码质量来决定的。在项目中,在完成功能开发的同时,更要注重编程质量,要在系统编程方面进行优化,进一步提高系统的性能。 参考文献: 1刘伟.Hibernate开发与实战M.北京:电子工业出版社,2009. 2张海藩.软件工程导论M4版.北京:清华大学出版社,2003. 3约翰.Java EE 5开发指南M.北京:机械工业出版社,2006. 4陈华军.J2EE构建企业级应用解决方案M.北京:人民邮电出版社,2002. 转载请注明来源。原文地址:比价网 bjw
限制150内