完美的组合tomahawk+spring2.0+hibernate3.2

相对于struts1.2 mvc,spring mvc,struts2.0 mvc!我已经决定了用jsf.
前一段时间由于遇到性能问题,比如数据库的数据量很大,这样的情况下.怎么办呢!有两处方案可以选!
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值