s2jsf-example-s2hibernateV1.1.0リリース

S2JSFExampleV1.0.3のS2DaoをS2hibernateV1.1.0に差し替えた版です。
次のURLからダウンロードできます。
http://sourceforge.jp/projects/seasar/files/?release_id=15272#15272


このサンプルは、Hibernate2,Hibernate3両方の環境で動作します。
また、両環境の設定ファイル、マッピングファイル、diconファイルがあるので、
examples/jsf/dicon/alldao.diconの次の1行を修正だけで、切り替えることができます。


     == Hibernate2を使う場合==
      


     == Hibernate3を使う場合 ==
      


◆コード、設定ファイルの修正内容
  ■hibernateの設定ファイルを追加
   ・hibernate2用
    /WEB-INF/src/examples/jsf/dto/EmployeeDto.hbm.xml 
    /WEB-INF/src/examples/jsf/dto/DepartmentDto.hbm.xml
    /WEB-INF/src/hibernate.cfg.xml


   ・hibernate3用
    /WEB-INF/src/examples/jsf/dto/EmployeeDto3.hbm.xml 
    /WEB-INF/src/examples/jsf/dto/DepartmentDto3.hbm.xml
    /WEB-INF/src/hibernate3.cfg.xml


  ■diconファイルの差し替え
    /WEB-INF/src/dao.dicon
    /WEB-INF/src/examples/jsf/dicon/alldao.dicon

  ■コードの修正
   ◇examples.jsf.dao.DepartmentDtoDao
    修正前: public String getDname_ARGS = "depno";
    修正後: public String getDname_ARGS = "deptno";

   ◇examples.jsf.dao.EmployeeDtoDao
    ・PROPERTYアノテーションをつける

	
public String searchEmployeeDtoList_PROPERTY = "empno,ename,job,mgr,hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal,deptno";
public List searchEmployeeDtoList(EmployeeSearchDto dto);


   ◇EmployeeDtoDaoImplを追加
    次のメソッドがcountを使っています。
     examples.jsf.dao.EmployeeDtoDao#getSearchCount()

    しかし、HibernateのCriteriaでcountを取るには、修正が必要になってくるので、とりあえず、
     examples.jsf.dao.EmployeeDtoDaoImpl
    というabstractクラスを作って、次の様に上書きしました。

	
public int getSearchCount(EmployeeSearchDto dto) {
return searchEmployeeDtoList(dto).size();
}


    ※examples/jsf/dicon/allhibernatedao.dicon の
      
     を削除して、今作ったEmployeeDtoDaoImplと差し替え
      


    ◇EmployeeDto.javaへコード追加
     == 追加内容 ==

private DepartmentDto departmentDto;

public DepartmentDto getDepartmentDto() {
return departmentDto;
}

public void setDepartmentDto(DepartmentDto departmentDto) {
this.departmentDto = departmentDto ;
this.dname = departmentDto.getDname();
}

S2Hibernate1.0.6とS2Hibernate1.1.0(Hibernate3対応版)をリリースしました。

■1.0.6リリースノート
 ・Seasar V2.2.9にライブラリを更新しました。


 ・S2SessionFactory に次のメソッドを追加。
void setInterceptor(Interceptor);
 ・DTO(Data Transter Object)の値をHQL(HQLアノテーションまたは、NamedQuery)に渡す処理を追加。


 ・検索の自動処理機能でInを使った場合のバグを修正。



■1.1.0リリースノート(Hibernate3対応版)
S2Hibernate1.0.6をベースに、id:koichikさんに作っていただいたS2Hibernate3-V1.0.6b4をマージした形になっています。


・Hibernate3対応になりました。
・Hibernate3対応版はパッケージが org.seasar.hibernate3 になっています。
  (Hibernate2用は、org.seasar.hibernateに残っています。)
  ・org.hibernate.HibernateException が unchecked になったことに伴い,org.seasar.hibernate.HibernateRuntimeException を廃止しました.
  ・org.seasar.hibernate.HibernateRuntimeException の廃止に伴い,例外の変換を責務としていた org.seasar.hibernate.S2Session を廃止しました.
  ・org.seasar.hibernate.S2Session の廃止により,org.seasar.hibernate3.S2SessionFactory は org.hibernate.Session を返すように変更しました.
  ・org.seasar.hibernate3.interceptor.ReadOnlySessionInterceptor は org.hibernate.Session の flushMode を NEVER に設定するだけにしました.そして org.seasar.hibernate3.SessionFactoryImpl#beforeCompletion() では Session#getFlushMode() が NEVER の場合は Session#flush() を呼び出さないようにしました.

Seasar2を使ったシステムが今日カットオーバーしました。

Seasar2, S2Struts ,S2Hibernateを使ったシステムの本番運用が開始されました。


初期トラブルの連絡が来ないか若干不安でしたが、夕方になってもなーんにも連絡が来ませんでした。
カットオーバー今日じゃないんだっけ??と思っていると、

お客様の担当者からのメールが来ました。


 やば!!


あせって、メールを開いてみると
 「無事カットオーバーして、利用開始されています」
という連絡と
 「厳しいスケジュールの中、利用者の変更要望に対応してくれて有難有難うございました」
という様な内容のメールでした。


 よかった、よかった、ほっとしました。


今回の案件では、開発中にお客様からの仕様変更依頼がかなりあって厳しかったのですが、
Seasar2を使って見通しがよいソースになったおかげで、思ったより楽に修正することができました。


ひがさん、Seasar2関係者の方々有難うございます!!

S2hibernate.daoのアノテーションなしのDto対応(HibernteのExampleの様な機能)

HibernateのQBE(Query by Example)では、IDのフィールドを検索条件にすることができませんが、このアノテーションなしのDto対応を使うとIDも含めることができます。
(IDを含めて検索条件に出来ることが良いかどうかは、別として。。。)


  Daoインターフェースで、アノテーションなし指定で、メソッドの引数がDto1つの場合の処理。

  渡されてたDtoのNullでないプロパティを検索条件にして、オブジェクトを検索します。

  (nullでないもを検索条件にするので、プリミティブ型は想定していません。)


ドキュメントの追加ができていないのですが、とりあえず
 EmployeeDaoEmployeeDtoTest.java
 EmployeeDaoSimpleDtoTest.java
 EmployeeDaoSearchDtoTest.java
あたりと関連ファイルを見ていただけると助かります。


・daoの例(EmployeeAutoDao.javaから抜粋)


//〜〜 略 〜〜
public interface EmployeeAutoDao {
public Class BEAN = Employee.class;

//〜〜 中略 〜〜

//dtoを指定して処理する場合
public List getEmployeeByEmployeeDtoAuto( Employee dto );
}


・EmployeeAutoDaoSimpleDtoClientのMainから抜粋


//〜〜 略 〜〜
EmployeeAutoDao dao = (EmployeeAutoDao) container
.getComponent(EmployeeAutoDao.class);/* 手順2 */

Employee emp = new Employee();

emp.setJob( "MANAGER" );
emp.setDeptno( new Integer(20) );

List ret = dao.getEmployeeByEmployeeDtoAuto(emp);

System.out.println("RET:" + ( (Employee)ret.get(0) ).getEname() );/* 手順3 */
//〜〜 略 〜〜

1.0.6b4リリースしました。

 ・Seasar V2.2.7, hsqldb1.7.3.3にライブラリを更新しました。


 ・beforeCompletion(),afterCompletion()での処理
  beforeCompletion() で Session#flush()を呼ぶように修正
  afterCompletion() で Session#clear() してから Session#close() を呼ぶように修正
  (V2.2.5以降に対応)


 ・アノテーションなしのDto対応(HibernteのExampleの様な機能)
  Daoインターフェースで、アノテーションなし指定で、メソッドの引数がDto1つの場合の処理。
  渡されてたDtoのNullでないプロパティを検索条件にして、オブジェクトを検索します。
  (nullでないもを検索条件にするので、プリミティブ型は想定していません。)


ダウンロードはこちらから
http://sourceforge.jp/projects/seasar/files/?release_id=14390#14390