当前位置:支点网 >> 资讯
滚动新闻:

利用Hibernate优势加快 SCA 模块实现

作者:张俊青  来源:developerWorks 中国  时间:2008-7-3 11:26:52
SCA(Service Component Architecture)作为服务组件体系结构,将所有的集成构件都描述为具有定义明确的接口的服务组件。SCA 还引入了模块的概念,它将服务组件集中到一起,并提供服务的进一步说明和封装。

 

  清单-22所列的代码体现了Hibernate快速实现JavaBean到数据库持久层转化的能力。这里见不到任何与JDBC相关的操作,只是针对 JavaBean的OO操作,因为Hibernate已经为我们完成了底层的JDBC API调用。

  清单-22:调用Hibernate API持久化JavaBean

  1     Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  2     session.beginTransaction();
  3     StockAccount sa = new StockAccount();
  …     sa.setXXX(…)
  4     session.persist("StockAccount", sa);
  5     session.flush();
  6     session.close();

  如果StockHolder所包含的股东信息在数据库中不存在,则在调用session.persist(“StockAccount”,sa);之前,需要调用以下方法,先将新的StockHolder信息存到数据库中:

  session.persist(“StockHolder”,sh);

  可以用下列方法判断StockHolder所包含的股东信息是否已经存在:

  if(session.load(StockHolder.class, st.getId()) == null)

  2) getStockList方法 – 演绎DB-JavaBean-SDO之路

  该方法的功能是:根据股东代码idNum得到属于该股东的所有证券信息的详细列表,如清单-21所示:

  清单-23: getStockList(String idNum)定义

  public DataObject getStockList(String idNum) {
  DataObject stockListBO = null;
  DataObject stockBO = null;
  ArrayList stockList = new ArrayList();
  if (idNum != null) {
  try {
  stockListBO = boFactory.create("http://StockModule/sdo", "StockList");
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();
  Iterator iter;
  iter = session.createQuery(
  "select sa.stock from StockAccount sa where sa.stockHolder.id = ?")
  .setString(0, idNum).iterate();
  while (iter.hasNext()) {
  Stock stock = (Stock) iter.next();
  stockBO = convertToStockBO(stock);
  stockList.add(stockBO);
  }
  stockListBO.setList("stocks", stockList);
  session.close();
  } catch (Exception e) {
  e.printStackTrace();
  stockListBO = null;
  }
  }
  return stockListBO;
  }

  -boFactory是com.ibm.websphere.bo.BOFactory的一个实例,在StockServiceImpl的initialize方法中进行实例化, BOFactory是Business Object的实例化工厂,用来创建BO的实例。

  7.模块测试

  完成StockService的实现后,使用WID提供的Module Test工具对模块进行测试。在Assembly Diagram中,点击StockService 模块右键菜单中的"Test Component",即可打开如图-19所示的模块测试界面,然后选择对应的操作并填写request入参,再点"continue"按钮运行测试。图-20显示了测试结果。

  图-19:选择被测试方法并且填写request参数

 

  图-20:测试结果

 

  五、总结


  本文结合示例详细探讨了使用Hibernate构建SCA Module持久层的方法,并且在创建示例的过程中,使用了基于模型驱动的设计方法构建SCA Module和Java实现。

  本文在使用Hibernate构建SCA Module的持久层时,结合示例探讨了处理O/R映射的各种情况的方法,包括如何正确定义id的 generator,如何定义many-to-one映射关系,如何定义composite-id,如何使用数据库内置的sequence和identity属性等。

  在用Java对象实现SCA Module时,使用Hibernate构建SCA的持久层可以解耦SCA Module的Java实现和DBMS类型间的关系:通过修改配置 Hibernate的配置文件(hibernate.cfg.xml),即可与不同类型的数据库进行交互,而不用修改Java代码,这一特性可以使得 SCA Module的松耦合特性进一步加强。

[1] [2] [3] [4] [5] 
责任编辑:李伟
【字体: 】【打印此文】【关闭窗口】【论坛
相关信息
相关评论