浏览 2162 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-20
前一段时间由于遇到性能问题,比如数据库的数据量很大,这样的情况下.怎么办呢!有两处方案可以选! 1.EJB3.0. 如果用EJB3.0解决,但是已经试验过,EJB3.0跟tomahawk不兼容,tomahawk里面有很多现成的jsf组件...文件上传,日期选框,html文本编辑器,树形菜单... 2.Spring+hibernate. 如果用spring+hibernate,跟spring+Hiberante集成较好,性能怎么解决呢,很简单,使用缓冲池就行了,dbcp或者c3p0,我目前是选择c3p0,效果非常好. 3.近来也学习了Seam,跟jsf的无缝集成,还更好地支持ajax,jsf的backBean已经放在业务类里了,验证已经放到entity Bean里,这样少写了很多类,因此,系统运行时,构建的对象是最少的,效率当然很高.不过,深入一些学习,发现存在一些难以解决的问题, 1.对国际化的支持,因为它的验证放到entity bean里了,要支持国际化,目前我还没有想到有效的解决办法. 2.对业务层的测试,因为Seam的业务层已经跟jsf混在一起来减少很多类了,测试业务层就离不开了Web容器,测试不如spring+hibernate方便. 3.jsp代码要比tomahawk写得多,tomahawk(myface)的界面用了Tiles之后,代码写得是最少了,facelets写得代码还要比它多. 开发周期和代码的移植性: 经过一段时间的技术选择和测试,我已经得到结论: 开发周期来说,spring+hiberante+tomahawk花的时间是最少的! 代码可移植性,也是它最好的! 看一下我的代码片段: package org.dgut.lab.view.controller; import java.util.ArrayList; import java.util.List; import org.dgut.lab.model.entity.Country; import org.dgut.lab.view.builder.CountryBuilder; import org.dgut.lab.view.util.FacesUtils; /** * * @authors林春宇. 2008年6月毕业于东莞理工学院软件工程专业 QQ:445104284 电子邮箱:sunday502@126.come * Blog: http://oak2008.iteye.com/ */ public class CountryListBean extends BaseController { /** Creates a new instance of CountryController */ public CountryListBean() { this.countryBeans = new ArrayList(); } private int command=0; private int pageNo=1; private long itemCount; private long totalPage; private int batchSize=10; private String name; private List countrys; private List countryBeans; public void init() { List countrys = this.serviceLocator.getCountryService().getCountryAndPage(batchSize,0); setItemCount(serviceLocator.getCountryService().getCountryAllCount()); for (int i = 0; i < countrys.size(); i++) { Country country = (Country) countrys.get(i); CountryBean countryBean = CountryBuilder.createCountryBean(country); countryBean.setServiceLocator(this.serviceLocator); this.getCountryBeans().add(countryBean); } } public String findCountryByName() { command=1; countrys = serviceLocator.getCountryService().getCountryByNameAndPage(name,batchSize,0); setItemCount(serviceLocator.getCountryService().getCountryCountByName(name)); pageNo=1; countryBeans.clear(); for (int i = 0; i < countrys.size(); i++) { Country country = (Country) countrys.get(i); CountryBean countryBean = CountryBuilder.createCountryBean(country); countryBean.setServiceLocator(this.serviceLocator); countryBeans.add(countryBean); } return "country_list"; } public String getAllCountryAndPage() { // FacesUtils.resetManagedBean("countryListBean"); command=0; countryBeans.clear(); List countrys = this.serviceLocator.getCountryService().getCountryAndPage(batchSize,0); setItemCount(serviceLocator.getCountryService().getCountryAllCount()); pageNo=1; for (int i = 0; i < countrys.size(); i++) { Country country = (Country) countrys.get(i); CountryBean countryBean = CountryBuilder.createCountryBean(country); countryBean.setServiceLocator(this.serviceLocator); countryBeans.add(countryBean); } return "country_list"; } public String toPage() { int p = getPageNo(); this.pageNo=p; if(command==0){ countryBeans = serviceLocator.getCountryService().getCountryAndPage(batchSize,(p-1)*batchSize); } else{ countryBeans = serviceLocator.getCountryService().getCountryByNameAndPage(name,batchSize,(p-1)*batchSize); } return "country_list"; } public String next() { int p = getPageNo() + 1; this.pageNo=p; if(command==0){ countryBeans = serviceLocator.getCountryService().getCountryAndPage(batchSize,(p-1)*batchSize); } else{ countryBeans = serviceLocator.getCountryService().getCountryByNameAndPage(name,batchSize,(p-1)*batchSize); } return "country_list"; } public String prev() { int p = getPageNo() - 1; if(p<=0) this.pageNo=1; else{ this.pageNo=p; } if(command==0){ countryBeans = serviceLocator.getCountryService().getCountryAndPage(batchSize,(p-1)*batchSize); }else{ countryBeans = serviceLocator.getCountryService().getCountryByNameAndPage(name,batchSize,(p-1)*batchSize); } return "country_list"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getItemCount() { return this.itemCount; } public int getPageNo() { return pageNo; } public long getTotalPage() { this.totalPage = getItemCount() % 20 == 0 ? getItemCount() / 10 : getItemCount() / 10 + 1; log.info("***ResourceBundle"+this.getMessageString("uT",new String("code"))); return this.totalPage; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public List getCountryBeans() { return countryBeans; } public void setItemCount(long itemCount) { this.itemCount = itemCount; } } 我的这个项目,到现在已经完全进入了编码阶段,理论上,很快会完成的. 由于时间的仓促,这篇文章就写到这里,不足之处,还望多多交流. 我的qq:445104284 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |