1+1=2,0+0=0

          日月累積
          posts - 7, comments - 50, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          SOA的組件實現---EJB+Spring+Hibernate

          Posted on 2007-01-30 23:29 江上一葉舟 閱讀(2156) 評論(1)  編輯  收藏 所屬分類: 軟件藝術

          ????? 最近項目很變態,硬是要把Domino的東西往J2EE上搬,說什么文檔型數據庫無法跨越系統,我覺得如果照目前電信的系統結構來說,就算把Domino上的所有東西,包括process都搬到J2EE上,也無法解決各個系統之間很好協作的問題,Portal和統一認證已經在某種程度上幫了大忙,如果實在很想各個應用系統之間進行數據交互,開發webservice接口就ok了,甚至在系統開始規劃的時候就不應該出現Domino這種東西,現在想起關系型數據庫的好來了,未免累死了開發人員,所以我還是秉持我自己的原則:我們無限制的追求軟件程序的完美,并不是為了那幫傻逼客戶,而是為了讓我們之后的程序員能夠以更少的精力來更輕松的拿這份工資!
          ????? 牢騷完畢來說說目前的J2EE做法。既然涉及到流程,那不免就那兩種,WFMC和BPEL,我們選擇BPEL,原因是IBM支持BPEL,不要問我兩種東西那種更優秀,我會告訴你:你搞清楚了也沒意義,用戶只相信IBM。
          ????? 既然用BPEL,IBM的Websphere Process Server首當其沖,項目組買了幾百萬的軟件和服務就開始開發了,說實話,WPS真的是一個很好的SOA解決方案,但我個人認為絕對不適合中國政府、國企的流程開發,因為他無法很好的解決人工節點的問題,哪怕是引入了human task,于是我們又自己封裝了一層小的流程引擎,當然我所要說的重點不是這個,而是我們在wps中所需要的JCA方式綁定的組件的實現方式:EJB+Spring+Hibernate,做好的EJB包可以以EJB Bind的Java component形式打入wps的assembly里,在bpel process中reference進來就可以了。下面我們主要說說EJB的實現。
          ????? 由于wps有個特點就是在流程實例結束后刪除其自帶數據庫中的所有實例數據,所以我們必須在流程的最后一部將數據記錄在我們自己的業務庫中來,我們開發的EJB就實現了這個功能。
          首先是業務邏輯,業務邏輯分成三個包,ejb、face、pojo,其中ejb是組件的本地接口,face是組件的功能性接口,pojo是具體實現類。
          ??????具體邏輯代碼不貼了,貼一個我寫的例子:
          ??????face中的功能接口:

          1 package ?com.ideal.core.biz.face;
          2
          3 import ?java.rmi.RemoteException;
          4
          5 public ? interface ?SimpleService?
          6 {
          7 ?? public ?String?sayHello(String?message)throws Exception;
          8 }

          9

          ???ejb中本地接口:
          ?1package?com.ideal.core.biz.ejb;
          ?2
          ?3import?javax.ejb.EJBLocalObject;
          ?4import?com.ideal.core.biz.face.SimpleService;
          ?5
          ?6public?interface?SimpleLocal
          ?7????extends?EJBLocalObject,?SimpleService
          ?8{
          ?9????public?String?sayHello(String?message) throws Exception;
          10}

          11
          ? ejb的home接口不貼了,直接貼bean類,我們這里用Stateless的
          ?1package?com.ideal.core.biz.ejb;
          ?2
          ?3import?javax.ejb.SessionBean;
          ?4import?javax.ejb.SessionContext;
          ?5import?javax.ejb.CreateException;
          ?6import?com.ideal.core.biz.face.SimpleService;
          ?7import?org.springframework.ejb.support.AbstractStatelessSessionBean;
          ?8import?java.rmi.RemoteException;
          ?9
          10public?class?SimpleBean
          11????extends?AbstractStatelessSessionBean
          12????implements?SimpleService
          13{
          14????SessionContext?sessionContext;
          15????private?SimpleService?m_simple_service;
          16
          17????public?void?onEjbCreate()?throws?CreateException
          18????{
          19????????m_simple_service?=?(SimpleService)?getBeanFactory().getBean("SimpleService");
          20????}

          21
          22????public?String?sayHello(String?message) throws Exception
          23????{
          ?????????????????String message = "";
          ?????????????????????? try {
          ????????????????message = m_simple_service.sayHello(message);

          ??????? }
          ??????? catch (Exception ex)
          ??????? {
          ??????????? this.sessionContext.setRollbackOnly();
          ??????????? throw new EJBException();
          ??????? }
          24????????return?message;
          25????}

          26}

          27
          pojo:
          ?1package?com.ideal.core.biz.pojo;
          ?2
          ?3import?com.ideal.core.biz.face.SimpleService;
          ?4
          ?5public?class?SimpleServiceImpl?implements?SimpleService
          ?6{
          ?7????IUserInfoDAO?user_dao;
          ?8????public?SimpleServiceImpl()
          ?9????{
          10????}

          11????public?String?sayHello(String?message)??throws?Exception
          12????{
          13????????????Userinfo?user?=?new?Userinfo();
          14????????????user.setName("2");
          15????????????user.setPassword("2");
          16????????????user.setUserid("2");
          17????????????user_dao.saveUser(user);
          18????????????user.setPassword("asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
          19????????????user_dao.saveUser(user);
          20????????return?"hello,"?+?message?+?"!";
          21????}

          22}

          23
          經過測試,容器事務可以正常回滾,前提是spring與hibernate的配置文件配對。
          最終打包發布到Websphere上可以正常運行,做個web客戶端簡單測試一下就ok了。
          放入wps上也運行正常。
          最后說一句:不一定所有的國外產品都適用于我們的現狀。

          評論

          # re: SOA的組件實現---EJB+Spring+Hibernate  回復  更多評論   

          2007-07-03 17:39 by henry
          牛,正是我需要的。
          主站蜘蛛池模板: 文安县| 四子王旗| 晴隆县| 锦州市| 曲靖市| 从江县| 天峻县| 宁德市| 肇庆市| 安西县| 常德市| 萨迦县| 涿鹿县| 龙井市| 大冶市| 邵阳县| 邻水| 纳雍县| 金昌市| 巫溪县| 呼和浩特市| 武汉市| 苍南县| 赤峰市| 福海县| 西和县| 泰宁县| 平遥县| 垫江县| 新乡市| 青龙| 慈利县| 基隆市| 漳州市| 化州市| 广河县| 泽州县| 金华市| 扎囊县| 五峰| 南和县|