子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評(píng)論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

          jBPM開(kāi)發(fā)入門指南(5)

          前篇說(shuō)起要講在JBPM中實(shí)現(xiàn)用戶權(quán)限,但這段時(shí)間比較忙,一直拖著。這里先把jbpm自帶的websale例子放上來(lái),大伙先將就看看。這個(gè)例子我已經(jīng)把它抽取了出去,網(wǎng)頁(yè)部份丟棄了。在看的時(shí)候主要看WebsaleTest.java,看看它的用戶權(quán)限是怎么用的。

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


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


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

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

          評(píng)論

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

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

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          說(shuō)實(shí)在的,這些都沒(méi)有太大用,我看JBPM都能看到這些內(nèi)容,關(guān)鍵是具體跟業(yè)務(wù),具體組織架構(gòu)聯(lián)系在一起時(shí)怎么處理,有些系統(tǒng)是完全基于工作流系統(tǒng)(連表單也是工作流產(chǎn)生),業(yè)務(wù)附屬于工作流,但大的業(yè)務(wù)系統(tǒng)不可能這么作的,工作流應(yīng)該為業(yè)務(wù)服務(wù),這是我的愚見(jiàn),也是我的困惑!
          2006-09-22 11:11 | ivor

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          陳大哥, 問(wèn)個(gè)問(wèn)題,我看了你的這幾篇入門指南之后,照你的步驟運(yùn)行了一下,大致都還算順利.但是每次在調(diào)用JbpmContext.close();方法的時(shí)候,總是會(huì)拋出異常:
          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包的版本不對(duì)嗎?
          2006-09-27 17:49 | xiaoshi

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          另外,我看了下ConnectionJDBC2.java里面的代碼,其中setTypeMap方法如下:
          public void setTypeMap(Map map) throws SQLException {
          checkOpen();
          notImplemented("Connection.setTypeMap(Map)");
          }
          它里面調(diào)用了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");
          }
          看注釋的意思是調(diào)用了一個(gè)還沒(méi)有實(shí)現(xiàn)的方法,為什么會(huì)出現(xiàn)這種情況呢??
          從JbpmContext.close()方法,調(diào)用棧如下:
          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)
          調(diào)用到最后,總會(huì)調(diào)用到ConnectionJDBC2.notImplemented來(lái), 難道是某些包版本不對(duì)?
          2006-09-27 17:56 | xiaoshi

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

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

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

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

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

          return clazz;
          }


          這樣我們自己寫的類放在WEB-INF/lib目錄下,運(yùn)行時(shí)會(huì)由org.apache.catalina.WebappClassLoader 來(lái)加載進(jìn)來(lái),這樣似乎是我們所想要達(dá)到的目的.

          2006-11-26 21:15 | guanqi

          # 關(guān)于weblogic上配置jbpm問(wèn)題  回復(fù)  更多評(píng)論   

          大哥你好,你在weblogic814配置過(guò)jbpm3.1嗎,我怎么配都不行,主要錯(cuò)誤如下,能我一點(diǎn)指導(dǎo)嗎,先謝了。
          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開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          說(shuō)實(shí)在的,這些都沒(méi)有太大用,我看JBPM都能看到這些內(nèi)容,關(guān)鍵是具體跟業(yè)務(wù),具體組織架構(gòu)聯(lián)系在一起時(shí)怎么處理,有些系統(tǒng)是完全基于工作流系統(tǒng)(連表單也是工作流產(chǎn)生),業(yè)務(wù)附屬于工作流,但大的業(yè)務(wù)系統(tǒng)不可能這么作的,工作流應(yīng)該為業(yè)務(wù)服務(wù),這是我的愚見(jiàn),也是我的困惑! 經(jīng)典!!!!!!!!!!!
          2007-01-12 10:30 | odexuce

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          這個(gè)例子我已經(jīng)把它抽取了出去,網(wǎng)頁(yè)部份丟棄了。在看的時(shí)候主要看WebsaleTest.java??????



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

          # re: jBPM開(kāi)發(fā)入門指南(5) [未登錄](méi)  回復(fù)  更多評(píng)論   

          說(shuō)實(shí)在的,這些都沒(méi)有太大用,我看JBPM都能看到這些內(nèi)容,關(guān)鍵是具體跟業(yè)務(wù),具體組織架構(gòu)聯(lián)系在一起時(shí)怎么處理,有些系統(tǒng)是完全基于工作流系統(tǒng)(連表單也是工作流產(chǎn)生),業(yè)務(wù)附屬于工作流,但大的業(yè)務(wù)系統(tǒng)不可能這么作的,工作流應(yīng)該為業(yè)務(wù)服務(wù),這是我的愚見(jiàn),也是我的困惑! 經(jīng)典
          2007-05-24 10:48 | zz

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          說(shuō)實(shí)在的,這些都沒(méi)有太大用,我看JBPM都能看到這些內(nèi)容,關(guān)鍵是具體跟業(yè)務(wù),具體組織架構(gòu)聯(lián)系在一起時(shí)怎么處理,有些系統(tǒng)是完全基于工作流系統(tǒng)(連表單也是工作流產(chǎn)生),業(yè)務(wù)附屬于工作流,但大的業(yè)務(wù)系統(tǒng)不可能這么作的,工作流應(yīng)該為業(yè)務(wù)服務(wù),這是我的愚見(jiàn),也是我的困惑! 經(jīng)典
          確實(shí)沒(méi)啥用。不知道陳剛大哥能不能給個(gè)實(shí)際應(yīng)用的案例,而不是這些demo,太沒(méi)價(jià)值了。
          2007-07-04 15:30 | flash

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          你好陳剛老師。我一直在學(xué)習(xí)jbpm技術(shù)。現(xiàn)在我已經(jīng)能寫一個(gè)簡(jiǎn)單的工作流程了。但是我還是不會(huì)用fork和join怎么使用。你能給我講解下他們的使用么?謝謝。也希望老師能給我些指點(diǎn),接下來(lái)我該怎么學(xué)習(xí)?謝謝!!
          2008-01-27 08:56 | wangyoulin006

          # re: jBPM開(kāi)發(fā)入門指南(5) [未登錄](méi)  回復(fù)  更多評(píng)論   

          關(guān)于這個(gè)例子的介紹文字太少了點(diǎn)吧,環(huán)境也沒(méi)寫。配置起來(lái)還報(bào)錯(cuò),弄了半天。
          而且連跑的是哪個(gè)流程都不知道,leavel1,leavel2,leavel3,試了1不可以
          2008-04-07 15:25 | leon

          # re: jBPM開(kāi)發(fā)入門指南(5) [未登錄](méi)  回復(fù)  更多評(píng)論   

          有沒(méi)有和具體的開(kāi)發(fā)全過(guò)程啊,最好寫一個(gè)jbpm和tomcat開(kāi)發(fā)實(shí)例,包括環(huán)境配置和數(shù)據(jù)庫(kù)配置的,謝謝了!
          2008-08-11 16:38 | sky

          # re: jBPM開(kāi)發(fā)入門指南(5) [未登錄](méi)  回復(fù)  更多評(píng)論   

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

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

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

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          很經(jīng)典,謝謝
          2009-03-23 18:41 | rianpeny

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          李慧芬 同學(xué),用Fork和join節(jié)點(diǎn)呀
          2009-04-14 17:51 | unamed

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          初學(xué),謝謝,敬禮,
          2009-06-26 09:04 | qimiao

          # re: jBPM開(kāi)發(fā)入門指南(5) [未登錄](méi)  回復(fù)  更多評(píng)論   

          結(jié)構(gòu)清析,是個(gè)入門的東東吧。
          2009-06-29 19:14 | x

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          那個(gè)在jpdl.xml文件中,我要請(qǐng)假,前面的空格給去了,運(yùn)行時(shí)就不對(duì),我又給加了空格,但是再運(yùn)行還是不行,最后在Test里把空格給去掉了。
          把這個(gè)走了一遍,花費(fèi)了好一會(huì)兒,我想找個(gè)web開(kāi)發(fā)的例子,沒(méi)有找到。想做個(gè)跟那個(gè)server一樣的例子。在網(wǎng)上大部分都是java的開(kāi)發(fā)包,還是那種我不熟悉的格式。

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

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          你好,我有一個(gè)問(wèn)題,我想用jpbm流程進(jìn)行編排,但是中間的活動(dòng)要用到一些原來(lái)c程序中的發(fā)出的socket消息,我有什么辦法實(shí)現(xiàn)呢
          2011-08-23 15:07 | llcf

          # re: jBPM開(kāi)發(fā)入門指南(5)   回復(fù)  更多評(píng)論   

          @xiaoshi
          驅(qū)動(dòng)問(wèn)題,用MICROSOFT的就沒(méi)有此問(wèn)題
          2011-09-01 17:06 |
          主站蜘蛛池模板: 富源县| 宜宾市| 灵石县| 大港区| 汝城县| 洛浦县| 高清| 凤山市| 博野县| 绥芬河市| 泰州市| 南丰县| 临高县| 龙山县| 泰安市| 四子王旗| 怀宁县| 府谷县| 尉氏县| 都安| 通州市| 云林县| 武夷山市| 乌鲁木齐市| 红原县| 房产| 卢氏县| 云林县| 乌兰浩特市| 台江县| 商南县| 香河县| 蓬莱市| 平昌县| 琼海市| 叙永县| 玉山县| 沂南县| 栖霞市| 建德市| 饶阳县|