子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
          數據加載中……

          jBPM開發入門指南(5)

          前篇說起要講在JBPM中實現用戶權限,但這段時間比較忙,一直拖著。這里先把jbpm自帶的websale例子放上來,大伙先將就看看。這個例子我已經把它抽取了出去,網頁部份丟棄了。在看的時候主要看WebsaleTest.java,看看它的用戶權限是怎么用的。

          幾個重點:
          (1) jBPM沒有角色的概念!!! 很多人把ActorID理解成角色,那是相當錯誤的。jBPM只有參與者的概念,也就是ActorID,它可以是用戶ID,也可以是角色ID,也可以什么都不是。你要自己去把用戶角色等東東和ActorID映射起來。不過一般我們把ActorID設置成角色,但jbpm websale卻是設置成用戶的。
          (2)用戶信息的入口是JbpmContext,里面有一個setActorID方法。你用戶登錄時候,把一些用戶信息set進去。
          (3)泳道概念:你去看看UML中的帶泳道的活動圖,那就是象一個游泳池里的泳道一樣。


          安裝提示:
          ?<classpathentry kind="con" path="JBPM/jBPM 3.1.2"/>
          .classpath的這一句很可能和你電腦的設置不符,這是jbpm插件的一個設置,指向jbpm的HOME目錄,以便找到jbpm的jar包。你按照你電腦上的設置相應修改一下這一行。


          websale的eclipse項目ZIP包:http://www.aygfsteel.com/Files/chengang/chen-jbpm_websale.zip

          posted on 2006-09-16 19:09 陳剛 閱讀(33686) 評論(22)  編輯  收藏 所屬分類: jBPM

          評論

          # re: jBPM開發入門指南(5)   回復  更多評論   

          哈哈。。看看哈~~
          2006-09-18 09:06 | ktm

          # re: jBPM開發入門指南(5)   回復  更多評論   

          說實在的,這些都沒有太大用,我看JBPM都能看到這些內容,關鍵是具體跟業務,具體組織架構聯系在一起時怎么處理,有些系統是完全基于工作流系統(連表單也是工作流產生),業務附屬于工作流,但大的業務系統不可能這么作的,工作流應該為業務服務,這是我的愚見,也是我的困惑!
          2006-09-22 11:11 | ivor

          # re: jBPM開發入門指南(5)   回復  更多評論   

          陳大哥, 問個問題,我看了你的這幾篇入門指南之后,照你的步驟運行了一下,大致都還算順利.但是每次在調用JbpmContext.close();方法的時候,總是會拋出異常:
          NewPooledConnection : A Throwable occurred while trying to reset the typeMap property of our Connection to Collections.EMPTY_MAP!
          java.sql.SQLException: The Connection.setTypeMap(Map) method is not implemented.
          at net.sourceforge.jtds.jdbc.ConnectionJDBC2.notImplemented(ConnectionJDBC2.java:1519)
          at net.sourceforge.jtds.jdbc.ConnectionJDBC2.setTypeMap(ConnectionJDBC2.java:2123)
          是什么原因呢,是jtds包的版本不對嗎?
          2006-09-27 17:49 | xiaoshi

          # re: jBPM開發入門指南(5)   回復  更多評論   

          另外,我看了下ConnectionJDBC2.java里面的代碼,其中setTypeMap方法如下:
          public void setTypeMap(Map map) throws SQLException {
          checkOpen();
          notImplemented("Connection.setTypeMap(Map)");
          }
          它里面調用了notImplemented方法,而notImplemented方法是這樣的:
          /**
          * Reports that user tried to call a method which has not been implemented.
          *
          * @param method the method name to report in the error message
          * @throws SQLException always, with the not implemented message
          */
          static void notImplemented(String method) throws SQLException {
          throw new SQLException(
          Messages.get("error.generic.notimp", method), "HYC00");
          }
          看注釋的意思是調用了一個還沒有實現的方法,為什么會出現這種情況呢??
          從JbpmContext.close()方法,調用棧如下:
          at net.sourceforge.jtds.jdbc.ConnectionJDBC2.notImplemented(ConnectionJDBC2.java:1519)
          at net.sourceforge.jtds.jdbc.ConnectionJDBC2.setTypeMap(ConnectionJDBC2.java:2123)
          at com.mchange.v2.c3p0.impl.NewPooledConnection.reset(NewPooledConnection.java:290)
          at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:247)
          at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1148)
          at org.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:42)
          at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:343)
          at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:298)
          at org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:187)
          at org.hibernate.jdbc.JDBCContext.afterTransactionCompletion(JDBCContext.java:213)
          at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:119)
          at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:162)
          at org.jbpm.svc.Services.close(Services.java:211)
          at org.jbpm.JbpmContext.close(JbpmContext.java:139)
          調用到最后,總會調用到ConnectionJDBC2.notImplemented來, 難道是某些包版本不對?
          2006-09-27 17:56 | xiaoshi

          # re: jBPM開發入門指南(5)   回復  更多評論   

          流程中如果有action和assignment,其所對應的class會使用jbpm的ProcessClassLoader來加載,根據上一篇提到的,如果在class A 中引用了 class B, 則B會使用加載class A的加載器來加載B,而不是Thread.currentThread().getContextClassLoader()來加載.這樣,如果在action的class中使用我們自己的類,則這些類還是會使用jbpm的ProcessClassLoader來加載,而不是Thread.currentThread().getContextClassLoader(),這樣如果沒有把這些類和jbpm的流程定義一起部署,運行時很有可能會找不到這些類,特別是,如果我們自己的代碼里面如果又引用了其他的資源,比如spring,hibernate之類的,如果把這些連同jbpm流程定義一起部署,感覺有些不爽.比如說,在web應用開發中,一般會把我們自己開發的jar放到WEB-INF/lib目錄下,這樣運行時會由org.apache.catalina.WebappClassLoader 來加載.但是如果按照jbpm的弄法,由它來加載我們所寫的類,則它不會從WEB-INF/lib去加載類,這似乎不是我們所想要的.

          所以我最后考慮了一下,將其ProcessClassLoader的findClass方法改寫了,不知會不會引起什么bug,望有高人指點一二,代碼如下:

          public Class findClass(String name) throws ClassNotFoundException {
          Class clazz = null;

          ClassLoader classLoader = Thread.currentThread()
          .getContextClassLoader();
          clazz = classLoader.loadClass(name);

          return clazz;
          }


          這樣我們自己寫的類放在WEB-INF/lib目錄下,運行時會由org.apache.catalina.WebappClassLoader 來加載進來,這樣似乎是我們所想要達到的目的.

          2006-11-26 21:15 | guanqi

          # 關于weblogic上配置jbpm問題  回復  更多評論   

          大哥你好,你在weblogic814配置過jbpm3.1嗎,我怎么配都不行,主要錯誤如下,能我一點指導嗎,先謝了。
          org.hibernate.HibernateException: Errors in named queries: GraphSession.findAllProcessDefinitionVersions, SchedulerSession.findTimersByName, MessagingSession.resumeMessagesForToken, GraphSession.selectLogsForTokens, GraphSession.findTokensForProcessInstance, TaskMgmtSession.findTaskInstancesByIds, MessagingSession.findMessages, SchedulerSession.findSuspendedTimers, LoggingSession.findLogsByToken, MessagingSession.suspendMessagesForToken, TaskMgmtSession.findTaskInstancesByActorId, SchedulerSession.resumeTimersForToken, TaskMgmtSession.findPooledTaskInstancesByActorId, TaskMgmtSession.findTaskInstancesByTokenId, SchedulerSession.suspendTimersForToken, GraphSession.findAllProcessInstancesForADefinition, GraphSession.findProcessDefinitionByNameAndVersion, MessagingSession.findErrorMessages, SchedulerSession.deleteTimersForProcessInstance, TaskMgmtSession.findPooledTaskInstancesByActorIds, SchedulerSession.findFailedTimers, GraphSession.findLatestProcessDefinitionQuery, SchedulerSession.findTimersByDueDate, TaskMgmtSession.findTaskInstancesByActorIds, GraphSession.findAllProcessDefinitions
          at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:338)
          at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1154)
          at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:90)
          at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:74)
          at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:79)
          at org.jbpm.persistence.db.DbPersistenceService.getGraphSession(DbPersistenceService.java:216)
          at org.jbpm.JbpmContext.getGraphSession(JbpmContext.java:427)

          2006-12-28 14:26 | poplar

          # re: jBPM開發入門指南(5)   回復  更多評論   

          說實在的,這些都沒有太大用,我看JBPM都能看到這些內容,關鍵是具體跟業務,具體組織架構聯系在一起時怎么處理,有些系統是完全基于工作流系統(連表單也是工作流產生),業務附屬于工作流,但大的業務系統不可能這么作的,工作流應該為業務服務,這是我的愚見,也是我的困惑! 經典!!!!!!!!!!!
          2007-01-12 10:30 | odexuce

          # re: jBPM開發入門指南(5)   回復  更多評論   

          這個例子我已經把它抽取了出去,網頁部份丟棄了。在看的時候主要看WebsaleTest.java??????



          好像人家源代碼包里 本來就有這個 單元測試 不用你去 抽取吧?????
          2007-03-20 13:55 | Silence

          # re: jBPM開發入門指南(5) [未登錄]  回復  更多評論   

          說實在的,這些都沒有太大用,我看JBPM都能看到這些內容,關鍵是具體跟業務,具體組織架構聯系在一起時怎么處理,有些系統是完全基于工作流系統(連表單也是工作流產生),業務附屬于工作流,但大的業務系統不可能這么作的,工作流應該為業務服務,這是我的愚見,也是我的困惑! 經典
          2007-05-24 10:48 | zz

          # re: jBPM開發入門指南(5)   回復  更多評論   

          說實在的,這些都沒有太大用,我看JBPM都能看到這些內容,關鍵是具體跟業務,具體組織架構聯系在一起時怎么處理,有些系統是完全基于工作流系統(連表單也是工作流產生),業務附屬于工作流,但大的業務系統不可能這么作的,工作流應該為業務服務,這是我的愚見,也是我的困惑! 經典
          確實沒啥用。不知道陳剛大哥能不能給個實際應用的案例,而不是這些demo,太沒價值了。
          2007-07-04 15:30 | flash

          # re: jBPM開發入門指南(5)   回復  更多評論   

          你好陳剛老師。我一直在學習jbpm技術。現在我已經能寫一個簡單的工作流程了。但是我還是不會用fork和join怎么使用。你能給我講解下他們的使用么?謝謝。也希望老師能給我些指點,接下來我該怎么學習?謝謝!!
          2008-01-27 08:56 | wangyoulin006

          # re: jBPM開發入門指南(5) [未登錄]  回復  更多評論   

          關于這個例子的介紹文字太少了點吧,環境也沒寫。配置起來還報錯,弄了半天。
          而且連跑的是哪個流程都不知道,leavel1,leavel2,leavel3,試了1不可以
          2008-04-07 15:25 | leon

          # re: jBPM開發入門指南(5) [未登錄]  回復  更多評論   

          有沒有和具體的開發全過程啊,最好寫一個jbpm和tomcat開發實例,包括環境配置和數據庫配置的,謝謝了!
          2008-08-11 16:38 | sky

          # re: jBPM開發入門指南(5) [未登錄]  回復  更多評論   

          JBPM與Ibatis結合么樣弄啊?
          2009-01-11 18:26 | Simple

          # re: jBPM開發入門指南(5)   回復  更多評論   

          您好,我遇到一個問題,不知道您能不能幫助我一下,呵呵
          一個主流程下有多個子流程,至少5個,而每個子流程都是一樣的流程定義,就是有多個部門分別去執行子流程,最后再匯總到主流程,這樣的結構應該怎么定義流程呢?而每個子流程又是很大的,總不能將這些一模一樣的子流程都定義在主流程中把?有沒有那種類似會簽的結構?哎,很困擾我啊,這個星期必須搞定,剛參加工作壓力挺大的
          2009-03-11 12:48 | 李慧芬

          # re: jBPM開發入門指南(5)   回復  更多評論   

          很經典,謝謝
          2009-03-23 18:41 | rianpeny

          # re: jBPM開發入門指南(5)   回復  更多評論   

          李慧芬 同學,用Fork和join節點呀
          2009-04-14 17:51 | unamed

          # re: jBPM開發入門指南(5)   回復  更多評論   

          初學,謝謝,敬禮,
          2009-06-26 09:04 | qimiao

          # re: jBPM開發入門指南(5) [未登錄]  回復  更多評論   

          結構清析,是個入門的東東吧。
          2009-06-29 19:14 | x

          # re: jBPM開發入門指南(5)   回復  更多評論   

          那個在jpdl.xml文件中,我要請假,前面的空格給去了,運行時就不對,我又給加了空格,但是再運行還是不行,最后在Test里把空格給去掉了。
          把這個走了一遍,花費了好一會兒,我想找個web開發的例子,沒有找到。想做個跟那個server一樣的例子。在網上大部分都是java的開發包,還是那種我不熟悉的格式。

          把那個ehcache.1.1.jar包給換成ehcache1.2.3.jar包就沒出錯了。終于連上
          mysql了。你做沒沒做web的例子,給傳個?
          2009-08-15 17:34 | zw

          # re: jBPM開發入門指南(5)   回復  更多評論   

          你好,我有一個問題,我想用jpbm流程進行編排,但是中間的活動要用到一些原來c程序中的發出的socket消息,我有什么辦法實現呢
          2011-08-23 15:07 | llcf

          # re: jBPM開發入門指南(5)   回復  更多評論   

          @xiaoshi
          驅動問題,用MICROSOFT的就沒有此問題
          2011-09-01 17:06 |
          主站蜘蛛池模板: 大同县| 玛沁县| 延川县| 平泉县| 宜宾县| 红安县| 福海县| 克山县| 宾阳县| 出国| 上蔡县| 九龙县| 雷山县| 五常市| 神农架林区| 广西| 衡水市| 大庆市| 兰溪市| 呼伦贝尔市| 佛冈县| 全椒县| 文成县| 突泉县| 瑞丽市| 竹山县| 隆尧县| 灵武市| 平度市| 阿尔山市| 米林县| 焦作市| 巴楚县| 汉川市| 高阳县| 孙吴县| 永城市| 广安市| 化隆| 宁晋县| 平遥县|