锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合婷婷久久,久久丫精品国产亚洲av,亚洲av专区无码观看精品天堂 http://www.tkk7.com/killvin/category/8035.htmlzh-cn Tue, 27 Feb 2007 08:46:46 GMT Tue, 27 Feb 2007 08:46:46 GMT 60 OSWorkflow娣卞叆鍒嗘瀽 錛?閲嶆柊瀹氫箟Configuration鎺ュ彛 http://www.tkk7.com/killvin/archive/2006/03/02/33314.htmlkillvin killvin Thu, 02 Mar 2006 13:04:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33314.html 鍦∣SWorkflow涓渶璁╀漢鎭肩伀鐨勫氨鏄畠鐨勬帴鍙e畾涔夛紒鎴戜細(xì)灝辮繖浜涙帴鍙g殑娣蜂貢灞曞紑涓緋誨垪鐨勫垎鏋愶紝浠婂ぉ鍏堣璇碈onfiguration鎺ュ彛
鍋剁戶鎵夸簡(jiǎn)瀹冪殑Configuration鎺ュ彛
import com.company.engine.workflow.store.IWorkFlowStore; import com.opensymphony.workflow.StoreException; import com.opensymphony.workflow.config.Configuration; import com.opensymphony.workflow.spi.WorkflowStore;
public interface IConfiguration extends Configuration { /** * @deprecated getIWorkflowStore() */ WorkflowStore getWorkflowStore() throws StoreException; /** * return WorkFlowStore which implements the interface of IWorkFlowStore * @return * @throws StoreException */ IWorkFlowStore getIWorkflowStore() throws StoreException; }
浣犲彲鑳藉鎬垜涓轟綍瑕佺戶鎵垮畠鐨勬帴鍙o紙鑲畾鏄疊ad smell錛夛紝鍘熷洜濡備笅錛?/P>
IWorkFlowStore 鎺ュ彛瀹氫箟
import com.opensymphony.workflow.StoreException; import com.opensymphony.workflow.spi.Step; import com.opensymphony.workflow.spi.WorkflowEntry; import com.opensymphony.workflow.spi.WorkflowStore;
public interface IWorkFlowStore extends WorkflowStore { public Step createCurrentStep(WorkflowEntry _entry , Step _step) throws StoreException;
}
WorkflowStore 鎺ュ彛瀹氫箟
/** * Persists a step with the given parameters. * * @param entryId The workflow instance id. * @param stepId the ID of the workflow step associated with this new * Step (not to be confused with the step primary key) * @param owner the owner of the step * @param startDate the start date of the step * @param status the status of the step * @param previousIds the previous step IDs * @return a representation of the workflow step persisted */ public Step createCurrentStep(long entryId, int stepId, String owner, Date startDate, Date dueDate, String status, long[] previousIds) throws StoreException;
鐪嬪埌浜?jiǎn)鍚уQ?/P>
鍏跺疄鎴戝彧鏄笇鏈涘湪createCurrentStep鏃舵寜鐓O鐨勬柟娉曟墽琛岋紝鑰屼笉鏄紶閫掗偅浜?Bad Smell"鐨勫弬鏁幫紝鑰孫SWorkflow涓殑WorkflowStore鏄渶瑕丆onfiguration鏉ヨ幏鍙栫殑錛屾鏃朵負(fù)浜?jiǎn)澧炲姞涓涓湅浼煎悎鐞嗙殑鏂規(guī)硶錛岄渶瑕佸垎鍒戶鎵緾onfiguration涓嶹orkflowStore錛涜繖榪樻病鏈夊畬錛屼綘闇瑕佸疄鐜頒竴涓狢onfiguration瀹炵幇錛侊紒
import com.company.engine.workflow.store.IWorkFlowStore; import com.opensymphony.workflow.StoreException; import com.opensymphony.workflow.config.DefaultConfiguration; import com.opensymphony.workflow.spi.WorkflowStore;
public class DefaultIConfiguration extends DefaultConfiguration implements IConfiguration { public static DefaultIConfiguration INSTANCE = new DefaultIConfiguration(); private transient IWorkFlowStore store = null;
/** * @deprecated getIWorkflowStore() */ public WorkflowStore getWorkflowStore() throws StoreException { return null; }
public IWorkFlowStore getIWorkflowStore() throws StoreException { if (store == null) { String clazz = getPersistence();
try { store = (IWorkFlowStore) Class.forName(clazz).newInstance(); } catch (Exception ex) { throw new StoreException("Error creating store", ex); }
store.init(getPersistenceArgs()); }
return store; }
}
鎬葷粨
1銆侽SWorkflow涓嶹orkflowStore鎺ュ彛鐨勫叧緋繪瘮杈冪殑寰錛屽畠闇瑕佸熷姪浜嶤onfiguration鎺ュ彛鐨勫疄鐜版潵鑾峰彇鍒板疄闄呯殑WorkflowStore瀵硅薄銆?/P>
2銆傜敱浜庤繖鏍風(fēng)殑涓縐嶅井濡欏叧緋伙紝瀵筗orkflowStore鎺ュ彛鐨勬墿灞曞繀灝嗚繛甯︾潃闇瑕佹墿灞旵onfiguration鎺ュ彛錛岃屼駭鐢熻繖鏍風(fēng)殑"鏋滃喕鏁堝簲"鐨勭姜欖佺ジ棣栧氨鏄敱浜嶹orkflowStore鎺ュ彛涓嶤onfiguration鎺ュ彛鑰﹀悎鐨勫お绱с?/P>
3銆侽SWorkflow騫舵病鏈夊緢濂界殑閬靛畧OO鐨勮璁¤鍒欙紝灝ゅ叾鍦ㄥ畠鐨勫弬鏁頒紶閫掍笂錛岄潪甯哥殑宸紒
]]>workflow鎺ュ彛鍒掑垎 http://www.tkk7.com/killvin/archive/2006/03/02/33312.htmlkillvin killvin Thu, 02 Mar 2006 13:03:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33312.html workflow鎺ュ彛鍒掑垎 1銆傚簲鐢ㄦ帴鍙?Application Interface 錛嶏紞interface1 宸ヤ綔嫻佽嚜韜彁渚涚殑鏈嶅姟鎺ュ彛 錛嶏紞interface2 宸ヤ綔嫻佷笌搴旂敤涔嬮棿鐨勬帴鍙o紙涓昏鏄彁渚涚浉鍏蟲(chóng)暟鎹殑璋冪敤鎺ュ彛錛?BR> 2銆傛墿灞曟帴鍙?PlugIn Interface 錛嶏紞interface3 宸ヤ綔嫻佷笌緇勭粐鏈烘瀯涔嬮棿鐨勬帴鍙?BR>錛嶏紞interface4 宸ヤ綔嫻佷笌鍏朵粬宸ヤ綔嫻佷箣闂寸殑鎺ュ彛 灝嗘帴鍙e垝鍒嗘垚搴旂敤鎺ュ彛涓庢墿灞曟帴鍙d富瑕佹槸渚濇嵁宸ヤ綔嫻佷笌鐩稿叧搴旂敤鐨勮皟鐢ㄥ叧緋伙紝姣斿宸ヤ綔嫻佷笌緇勭粐鏈烘瀯涔嬮棿錛屾槸宸ヤ綔嫻佽皟鐢ㄧ粍緇囨満鏋勪腑鐨勪漢鍛樹(shù)俊鎭紝鎵浠ヤ富鍔ㄨ呮槸WORKFLOW銆佽鍔ㄦ柟鏄粍緇囨満鏋勶紝鎵浠ュ簲璇ラ噰鐢ㄦ墿灞曟帴鍙f潵瀹炵幇 鍦ㄦ墿灞曟帴鍙d笂搴旇閲囩敤Adapter妯″紡錛屼粠鑰屼嬌宸ヤ綔嫻佷笉灞闄愪簬鏌愪釜鐗瑰畾鐨勫疄鐜?BR> 鐩墠鐨勮繘灞?BR>0銆侫pplication Interface鎺ュ彛宸茬粡鍩烘湰瀹炵幇浜?BR>PlugIn Interface鎺ュ彛鐩墠鍩烘湰瀹屽伐錛屼絾OSWorkflow鐨勫疄鐜板疄鍦ㄦ槸闈炲父鐨勪笐闄嬶紝闇瑕佹洿鏀圭殑鍦版柟澶錛岃屼笖瀵逛簬Interface3涓嶅彲浠ヤ嬌鐢ㄥ畠閲囩敤鐨刄ser / Group妯″瀷錛堣屼笖瀹冧嬌鐢ㄤ簡(jiǎn)OSUser榪欎釜妗嗘灦錛屽浜庡鏁扮殑搴旂敤紼嬪簭鍩烘湰鍙互璇翠笉閫傚悎錛岃屼笖瀹冪殑User綾葷珶鐒舵槸Final ?!鑰屼笖鎴戝彂鐜板畠鐨勫緢澶氱被鐨勫睘鎬ч兘鏄疨rotected錛佷篃灝辨槸璇撮櫎浜?jiǎn)浠栦滑鑷繁鏍规湰娌℃湁鍔炴硶鎵╁睍锛屽嵆鋴涉墿灞曚篃鏄緢涓戦檵鐨勬柟寮忓Q?BR> 1銆傜幇鍦ㄦ渶澶х殑闂鏄畠鐨刉orkStore鎺ュ彛鐨勬墿灞曪紝鎴戦噰鐢―B2鐨勬柟寮忓疄鐜頒簡(jiǎn)瀹冪殑鎺ュ彛錛屼絾榪欐牱鐨勬柟寮忎細(xì)涓嶥B2緇戝畾鍦ㄤ竴璧鳳紝濡傛灉鑷繁鍐欏疄鐜板氨瑕佹牴鎹笉鍚岀殑DB閲囩敤涓嶅悓鐨凷QL璇█錛嶄篃灝辨槸涓嶅悓鐨勬柟璦絳栫暐錛燂紒鑰屼笖鑰冭檻鍒版ц兘浼拌涓嶆槸浠涔堝ソ涓繪剰錛岀湅鏉ユ槑澶╅渶瑕佹洿鎹㈡垚HibernateWorkStore鐨勫艦寮忥紝榪欐牱宸ヤ綔嫻佺殑鎸佷箙灞傛帴鍙e皢宸ヤ綔鍦℉ibernate涔嬩笂錛岀湅鏉ュ緢瀹岀編鐨勮В鍐充簡(jiǎn)榪欎釜闂銆?BR> 2銆傝屼笖鎴戞墿灞曚簡(jiǎn)瀹冪殑PropertySet錛屼嬌鍏朵笉鍐嶄緷闈燡NDI瀵繪壘DataSource錛岃屾槸閫氳繃宓屽叆鍦ㄧ▼搴忓唴閮ㄩ噰鐢↗DBC鐨勫艦寮忓鎵炬暟鎹簱榪炴帴錛岃繖鏍鋒垜灝變笉蹇呬負(fù)浜?jiǎn)楠岃瘉涓涓棶棰樺幓寤虹珛閭h姝葷殑鏁版嵁搴撶紦鍐叉睜浜?jiǎn)锛堣屼笖JNDI鐨勫艦寮忎篃灝變笉鍙伩鍏嶇殑瑕佺敤鍒板鍣紝澶噸浜?jiǎn)锛佸Q?BR> 3銆傛垜緙栧啓浜?jiǎn)UserGroupCondition鐨勫疄鐜扮被錛岃繖涓被鐨勪綔鐢ㄥ氨鏄皟鐢↖nterface3鐨勬柟娉曪紝浠庤屽垽鏂煇涓敤鎴鋒槸鍚﹀睘浜庢煇涓粍錛堢幇鍦ㄧ殑鍋氭硶鏄WorkStore瀹炵幇Interface3鐨勫伔鎳掑姙娉曪紝浣嗗緢涔憋紝鐪嬫潵榪樻槸瑕佸啓涓涓狝dapter鍘誨疄鐜癷nterface3鎵嶅錛侊級(jí) 4銆傜洰鍓嶅伐浣滄祦寮曟搸鐨勫伐鍘傜被宸茬粡瀹炵幇瀹屽伐騫舵祴璇曢氳繃銆?BR> 鐢ㄤ簡(jiǎn)榪戜竴涓湀鐨勬椂闂村畬鎴愪簡(jiǎn)榪欎簺宸ヤ綔錛岀湅璧鋒潵寰堝皯浣嗘槸鍩烘湰涓婂ぇ閲忕殑鏃墮棿鑺辮垂鍦ㄧ啛鎮(zhèn)夊伐浣滄祦瑙勮寖銆乄FMC鏍囧噯銆佷互鍙?qiáng)瀛︿範(fàn)鍜屾墿灞昈SWorkflow鎺ュ彛涓婏紝涓嶈繃瀵筄SWorkflow鐨勫疄鐜板熀鏈笂鎺屾彙浜?jiǎn)锛屽鏋滄姏寮OSWorkflow鑷繁涔熷彲浠ラ噰鐢ㄨ嚜宸辯殑鏂瑰紡鍘誨疄鐜幫紝鎴栬呬細(xì)鑰冭檻浣跨敤Spring鐨勬柟寮忥紙Interface3鐨凙dapter涓嶈灝遍噰鐢⊿pring瀹炵幇錛夈?BR> BTW: OSWorkflow鐨勫疄鐜板叾瀹炴瘮杈冪殑涓戦檵錛佽屼笖緙栫爜鏍規(guī)湰娌℃湁浠涔堣鑼冿紝鎺ュ彛鐨勫畾涔変篃鏄ぉ椹絀猴紝鐪嬫潵Heni闄や簡(jiǎn)浠栫殑澶у槾澶栧簲璇ュソ濂界殑鎻愰珮鑷繁鐨勬妧鏈慨鍏匯傦紞瀹炲湪涓嶆暍鎭淮榪欎綅"澶у笀"鐨勭紪鐮佹按騫籌紒 ]]> WorkFlow鐨勪簨鍔″洖婊氬疄鐜? http://www.tkk7.com/killvin/archive/2006/03/02/33313.htmlkillvin killvin Thu, 02 Mar 2006 13:03:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33313.html 鐗堟湰 0.11 宸茬粡瀹屾垚 1銆傚畬鎴愪簡(jiǎn)鎺ュ彛1 鍜屾帴鍙? 鐨勬柟娉?BR>2銆傚畬鎴愭帴鍙?鐨勯粯璁ゅ疄鐜?BR>3銆傚畬鎴愪簨鍔″洖婊氱殑瀹炵幇鏂規(guī)硶錛嶇瓑寰呮祴璇?BR> 鏈畬鎴?BR>1銆傛帴鍙?鐨勬敞鍐屼笌瀹炰緥鍖栬В鍐蟲(chóng)柟妗?BR>2銆傚簲鐢ㄧ殑騫跺彂璁塊棶闂?shù)互鍙?qiáng)瑙e喅鏁版嵁鐨勮剰璇婚棶棰?BR>3銆備笌鍏蜂綋鐨勬煇涓簲鐢ㄦ寕鎺ュ茍嫻嬭瘯 錛嶄簨鍔$殑鍥炴粴 OSWorkFlow鐨勪簨鍔″洖婊氭槸渚濋潬WorkflowContext榪欎釜鎺ュ彛鏉ュ疄鐜扮殑錛屽湪New鍑烘煇涓猈orkFlow鐨勬椂鍊欓渶瑕佸0鏄嶹orkflowContext鐨勫疄鐜扮被錛屼竴鑸細(xì)閲囩敤uper.context = new GearWheelWorkFlowContext(_caller);鏂規(guī)硶 姣斿榪欐牱瀹炵幇錛?BR> public GearWheelWorkFlow(String _caller) { super.context = new GearWheelWorkFlowContext(_caller); } 浣哋SWorkFlow鐨刉orkflowContext鐨勯粯璁ゅ疄鐜癇asicWorkFlowContext涓牴鏈病鏈夊疄鐜皊etRollbackOnly鏂規(guī)硶錛屼篃灝辨病鏈変簡(jiǎn)鍙傝冪殑鍙兘 鍐嶇湅鐪嬭繖涓帴鍙g殑鍏朵粬瀹炵幇綾諱篃閮芥槸寤虹珛鍦↗TA榪欐牱鐨勮法Session鐨勪簨鍔℃湇鍔′笂錛屾瘮濡傚畠鐨凟JB鐨勫疄鐜頒篃鏄璋冪敤瀹瑰櫒鎻愪緵鐨凧TA瀹炵幇鎵嶈錛佽孞TA鐨勫疄鐜版瘮濡傝JNDI鍒版暟鎹簱姹狅紝姝ゆ椂鐨勫簲鐢ㄥ厜JTA+JNDI灝卞凡緇忓甯?錛嶈繖鏍風(fēng)殑渚嬪瓙蹇呴』鐢熷瓨鍦ㄥ簲鐢ㄦ湇鍔″櫒鐨勭幆澧冧笅錛侊紒 鍙槸錛屾垜涓嶆蹇?jī)锛屾垜璁板緱Hibernate鍙互瀹炵幇鏈湴浜嬪姟錛屼篃灝辨槸渚濋潬JDBC鏈韓鐨勪簨鍔″鐞嗚兘鍔涳紝鑰岃瀹炵幇榪欐牱鐨勫姛鑳藉氨闇瑕佸湪鏁版嵁搴撹繛鎺ョ殑鑾峰彇涓婁笅涓浜涘姛澶紝涔熷氨鏄淇濊瘉鍥炴粴鐨勬暟鎹簱榪炴帴蹇呴』鏄幏鍙栨椂鐨勯偅涓繛鎺ワ紝鑰屽瓨鍌ㄨ繛鎺ュ氨鎴愪簡(jiǎn)涓涓渶瑕侀鍏堣В鍐崇殑闂銆?BR> 瑙e喅鏁版嵁搴撹繛鎺ョ殑瀛樺偍闂 鐩墠瀛樺偍鏁版嵁搴撹繛鎺ラ櫎浜?jiǎn)渚濋潬闈?rùn)鎬佺被澶栵紝榪樻湁涓涓氱敤鐨勬柟娉昑hreadLocal綾伙紝榪欐牱鑾峰彇鏁版嵁搴撹繛鎺ョ殑鏂規(guī)硶鍐欐垚浜?jiǎn)濡備笅鐨勫舰寮忓Q?BR> package com.company.common; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; public class DB2ConnectFactory { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(DB2ConnectFactory.class); private static ThreadLocal threadLocal = new ThreadLocal(); //~ private Connection connect = null; private Statement state = null; private ResultSet result = null; private boolean closeConnWhenDone = false; //~ private String url = "jdbc:db2:WORKFLOW"; private String user = ""; private String password = ""; private String driverClassName = "COM.ibm.db2.jdbc.app.DB2Driver"; public DB2ConnectFactory() throws SQLException { this.init(); } /** * 鑾峰彇鏁版嵁搴撹繛鎺?BR>* @return * @throws SQLException */ public Connection getConn() throws SQLException { return (Connection)threadLocal.get(); } /** * 鍒濆鍖栨暟鎹簱,騫跺湪緙撳啿涓敞鍐屾暟鎹簱榪炴帴 * @throws SQLException */ private void init() throws SQLException { try { // Get connect object Class.forName(driverClassName); closeConnWhenDone = true; connect = DriverManager.getConnection(url, user, password); state = connect.createStatement(); //Register the connection object in the threadlocal threadLocal.set(connect); } catch (Exception e) { e.printStackTrace(); throw new SQLException(e.getMessage()); } } } 瑙e喅浜嬪姟鍥炴粴 鍒氭墠璇翠簡(jiǎn)闇瑕佸疄鐜癢orkflowContext鎺ュ彛 package com.company.engine.workflow; import java.sql.Connection; import java.sql.SQLException; import org.apache.log4j.Logger; import com.company.common.DB2ConnectFactory; import com.opensymphony.workflow.WorkflowContext; public class GearWheelWorkFlowContext implements WorkflowContext { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(GearWheelWorkFlowContext.class); private static ThreadLocal threadLocal = new ThreadLocal(); // ~ Instance fields // //////////////////////////////////////////////////////// private String caller; // ~ Constructors // /////////////////////////////////////////////////////////// public GearWheelWorkFlowContext(String caller) { this.caller = caller; } // ~ Methods // //////////////////////////////////////////////////////////////// public String getCaller() { return this.caller; } /** * Tranaction : Set Roll back * @throws SQLException */ public void setRollbackOnly() { Connection connect = null; try { DB2ConnectFactory factory = new DB2ConnectFactory(); connect = factory.getConn(); if(connect != null) connect.rollback(); } catch (Exception e) { e.printStackTrace(); } finally { this.clostConnection(connect); } } private void clostConnection(Connection connect) { try { if(connect != null) connect.close(); } catch (Exception e) { e.printStackTrace(); } } } 鎬葷粨 1銆傛垜浠彲浠ョ湅鍒扮敱浜庢帴鍙d腑setRollbackOnly娌℃湁寮傚父鐨勫0鏄庯紝鏂規(guī)硶涓嵆浣挎姏鍑轟簡(jiǎn)寮傚父涔熻鑷繁"蹇嶄簡(jiǎn)"錛佺湅鏉ヨ壇濂界殑鎺ュ彛澹版槑鍏跺疄鏄潪甯擱噸瑕佺殑銆?BR> 2銆傝屼笖闇瑕侀噸杞藉師鏉DBCWorkflow 涓殑cleanup鏂規(guī)硶錛屽皢鍏朵腑鐨勪唬鐮佸睆钄芥帀錛佹暟鎹簱鐨勫叧闂斁鍦ㄤ簡(jiǎn)setRollbackOnly璁胯鐨刦inally涓紝鍘熷洜灝辨槸鐢變簬鎴戜滑瑕佺粺涓鐨勭鐞嗘暟鎹簱榪炴帴鎵寮曞彂鐨勶紝鎴戜滑涓嶈兘澶熷湪WorkFlowStore鐨勬瘡涓涓柟娉曟墽琛屽畬姣曞悗灝卞叧闂繛鎺ワ紝鍥犱負(fù)榪欐牱鐨勮瘽浣犳牴鏈病鏈変簡(jiǎn)浜嬪姟鍥炴粴鐨勫彲鑳斤紝鎵浠ユ鏃剁殑榪炴帴闇瑕佸湪WorkflowContext涓潵澶勭悊銆?BR> 鎰熻Е OSWorkFlow鐨勫疄鐜版柟娉曞茍涓嶆槸鍍忕綉涓婃墍璇寸殑閭f牱鐨勪紭縐鍜屾枃闆咃紝鏇村儚鏄竴涓湭瀹屾垚浠誨姟鐨?鍗婃垚鍝?錛孒eni琚綉涓婇紦鍚逛負(fù)澶х墰錛屼絾涓涓笉鍐欐敞閲婂拰鏂囨。鐨勪漢錛屾牴鏈О涓嶄笂浠涔堝ぇ鐗涳紒 OSWorkFlow鏇村鐨勬槸瀹炵幇浜?jiǎn)涓涓井鍐呮牳錛岃屽畠鐨勭敤鎴鋒ā寮忔槸涓嶰SUser榪欐牱鐨勬鏋惰﹀悎鐨勶紙鍋跺凡緇忓皢榪欐牱鐨勮﹀悎鎵撳紑浜?jiǎn)锛屼篃灏辨槸鎺ュ?鐨勫畾涔夛級(jí)錛屽畠鐨勭浉鍏蟲(chóng)暟鎹槸涓嶱ropertySet妗嗘灦鑰﹀悎鐨勶紙涔熷氨鏄帴鍙?鐨勫畾涔夛級(jí)錛岃屼笖閲囩敤OSWorkFlow瑕佺粡榪囧緢鍘熷鐨勪慨鏀癸紙姣斿鎴戝疄鐜頒簡(jiǎn)DB2涓嬬殑WorkFlowStore鐨勫疄鐜幫級(jí)銆?BR> 涓嶈繃涔熷ソ鍗充嬌浠ュ悗涓嶉噰鐢∣SWorkFlow錛岃嚜宸卞疄鐜頒竴涓繖鏍風(fēng)殑寮曟搸涔熷簲璇ユ病鏈変粈涔堥棶棰樼殑錛屾湁鏃墮棿浜?jiǎn)鎴戝掓槸寰堟兂鐪嬬湅鍒殑宸ヤ綔嫻佺殑浜у搧銆?img src ="http://www.tkk7.com/killvin/aggbug/33313.html" width = "1" height = "1" /> ]]> OSWorkflow浣犺鎴戞妸鏁版嵁搴撳叧闂啓鍦ㄥ摢閲岋紒 http://www.tkk7.com/killvin/archive/2006/03/02/33311.htmlkillvin killvin Thu, 02 Mar 2006 13:02:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33311.html 鍦╓orkflow浜嬪姟鍥炴粴涓亣鍒頒簡(jiǎn)闂錛屾槸榪欐牱鐨?/P>
DB2ConnectFactory 涓璯etConn鏂規(guī)硶 /** * 鑾峰彇鏁版嵁搴撹繛鎺?BR>* @return * @throws SQLException */ public Connection getConn() throws SQLException { Object obj = threadLocal.get(); if(obj == null) { this.initFactoryStack(); }else { connect = (Connection)obj; } connect.setAutoCommit(false); //浜嬪姟鐨勫洖婊氬繀欏誨緩绔嬪湪灝咰ommit鐘舵佷負(fù)False涓嬶紝榛樿鏄痶rue logger.debug("Get connect from factory - " + connect.hashCode()); return connect; }
AbstractWorkflow 鐨刣oAction()鏂規(guī)硶
try { //transition the workflow, if it wasn't explicitly finished, check for an implicit finish if (!transitionWorkflow(entry, currentSteps, store, wf, action, transientVars, inputs, ps)) { checkImplicitFinish(id); } } catch (WorkflowException e) { context.setRollbackOnly(); // 榪欓噷璋冪敤WorkContext瀵硅薄鐨剆etRollbackOnly()鏂規(guī)硶錛屾墽琛屼簨鍔$殑鍥炴粴 throw e; }
GearWheelWorkFlowContext 鐨剆etRollbackOnly鏂規(guī)硶 /** * Tranaction : Set Roll back * @throws SQLException */ public void setRollbackOnly() { logger.debug("Context execute setRollbackOnly() !!"); Connection connect = null; try { DB2ConnectFactory factory = new DB2ConnectFactory(); connect = factory.getConn(); logger.debug("Context get connect " + connect.hashCode());
if(connect != null) connect.rollback(); } catch (Exception e) { e.printStackTrace(); } finally { this.clostConnection(connect); //榪欓噷灝嗗叧闂暟鎹簱榪炴帴 } }
鍙槸榪欐槸"寮傚父"鎯呭喌涓嬬殑澶勭悊嫻佺▼錛屽鏋滄甯告墽琛屽憿錛?BR>鍒氬紑濮嬫垜鎯沖啓鍦–leanUp()鏂規(guī)硶閲岋紝浣嗗張涓鎯充笉琛岋紝鍥犱負(fù)姝e父鎵ц鐨勬祦紼嬮渶瑕佸仛涓や釜宸ヤ綔 1銆傚皢Commit鐘舵佹洿鏂頒負(fù)true,騫舵彁浜よ繛鎺?BR>2銆傚叧闂暟鎹簱榪炴帴
鍏抽敭灝辨槸鍏抽棴鏁版嵁搴撶殑榪炴帴鍦ㄥ摢閲屽啓錛燂紒鐜板湪鍐欏湪CleanUp()涓嶅悎閫傦紝鍥犱負(fù)姣忎竴涓猈orkStore鐨勬柟娉曢兘瑕侀粯璁わ紙紼嬪簭宸茬粡鍐欐浜?鎴戝彲涓嶆兂閲嶈澆瀹冪殑鎵鏈夌殑鏂規(guī)硶錛侊紒錛夌殑鍏抽棴鏁版嵁搴撹繛鎺ワ紒 浠旂粏鐨勫垎鏋愪簡(jiǎn)涓涓嬶紝鍏跺疄鏈変袱涓柟娉曞彲浠ュ仛鍒?BR>1銆傜紪鍐橮roxy綾?BR>2銆傞噸杞芥墍鏈堿bstractWorkflow涓璁″埌浜嬪姟鐨勬柟娉曪紝錛堟湰鏉ュ彲浠ラ噸杞絫ransitionWorkflow浣嗘槸鏂規(guī)硶鐨勭被鍨嬪嵈涓簆rivate?!錛夊湪瀹冪殑鏂規(guī)硶涓嬪鍔犱竴涓?鎻愪氦"鐨勬柟娉曘傛瘮濡傝繖鏍?/P>
try { //transition the workflow, if it wasn't explicitly finished, check for an implicit finish if (!transitionWorkflow(entry, currentSteps, store, wf, action, transientVars, inputs, ps)) { checkImplicitFinish(id); }
dosubmit();
} catch (WorkflowException e) { context.setRollbackOnly(); // 榪欓噷璋冪敤WorkContext瀵硅薄鐨剆etRollbackOnly()鏂規(guī)硶錛屾墽琛屼簨鍔$殑鍥炴粴 throw e; }
鍙互鐪嬪埌鏂規(guī)硶2姣旇緝"鐑?錛岀湅鏉ヤ笅涓姝ュ嵆浣跨紪鍐欐柟娉?鐨勫疄鐜?/P>
]]> JDBCWorkflow涓嶆敮鎸丼equence http://www.tkk7.com/killvin/archive/2006/03/02/33310.htmlkillvin killvin Thu, 02 Mar 2006 13:01:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33310.html 鏃╀笂鐨勬椂闂磋璇ユ鐨刉orkflwoStore閲岀殑涓婚敭鐢熸垚絳栫暐錛?涓婚敭鐢熸垚絳栫暐"鏉ユ簮浜嶩ibernate鏂囨。錛夛紝璇ユ鐨凷equence,浠庢枃妗h祫鏂欎笂鐪嬪埌DB2鏄敮鎸丼equence鐨勶紝鎸夌収db2鐨勬枃妗f垜鎵ц浜?jiǎn)濡備笅鐨勮鍙ュQ?BR>create sequence seq_os_wfentry start with 10 increment by 10; create sequence seq_os_currentsteps; 鎵ц-ok
鍙槸鎴戜互鍓嶄笉澶簡(jiǎn)瑙equence鐨勬蹇碉紝榪欑墖璧勬枡鍊掓槸寰堟湁浠峰?BR>http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0407zhang/ 涓嶈繃鎴戜互涓烘煡璇equence灝卞彧闇瑕佹墽琛孲ELECT NEXT VALUE FOR seq_os_wfentry 灝眔k浜?jiǎn)锛屽彲鏄皝鐭ラ亾鎬繪槸鎶ラ敊錛燂紒鍦ㄦ瘮杈冧粩緇嗙殑鐪嬩簡(jiǎn)榪欑墖鏂囩珷涔嬪悗鍙戠幇錛屽叾瀹炴牴鏈氨鏃犳硶鎵ц榪欐潯SQL錛佽岄渶瑕佽繖鏍?BR>INSERT INTO EMPLOYEE ( SERIALNUMBER, FIRSTNAME, LASTNAME, SALARY) VALUES(NEXTVAL FOR EMPSERIAL, 'Martin', 'Wong', 1000.00)
鍙槸鐪嬬湅JDBCWorkflowStore鐨勫疄鐜幫紝榪欓噷鏄疛DBCWorkflowStore鐨勪富閿敓鎴愮瓥鐣ワ紒 protected long getNextEntrySequence(Connection c) throws SQLException { if (log.isDebugEnabled()) { log.debug("Executing SQL statement: " + entrySequence); }
PreparedStatement stmt = null; ResultSet rset = null;
try { stmt = c.prepareStatement(entrySequence); rset = stmt.executeQuery(); rset.next();
long id = rset.getLong(1);
return id; } finally { cleanup(null, stmt, rset); } }
c.prepareStatement(entrySequence) 錛?鍏跺疄鎵ц浜?jiǎn)涓鏉QL璇彞錛屾墍浠ョ湅鏉DBCWorkflow鏍規(guī)湰涓嶆敮鎸丼equence鐢熸垚絳栫暐錛侊紒
璇ユ鐨勫疄鐜版柟寮忥紝鐪嬫潵鎴戣閲嶈澆鍏跺疄鐜版柟寮忥紝涓嶈繃璇寸湡鐨凧DBCWorkflow鐨勭紪鐮佷漢鍛樺叾瀹炴按騫充笉鍖濆湴錛?/P>
]]> 灝忓績(jī)OSPropertySet 錛?PropertySet http://www.tkk7.com/killvin/archive/2006/03/02/33309.htmlkillvin killvin Thu, 02 Mar 2006 13:00:00 GMT http://www.tkk7.com/killvin/archive/2006/03/02/33309.html ]]>
主站蜘蛛池模板:
亚洲午夜无码AV毛片久久 |
99久久综合国产精品免费 |
亚洲国产激情一区二区三区 |
亚洲色精品VR一区区三区 |
四虎永久在线观看免费网站网址 |
亚洲天堂视频在线观看 |
99爱在线精品视频免费观看9 |
亚洲动漫精品无码av天堂 |
久久高潮一级毛片免费 |
国产成人麻豆亚洲综合无码精品 |
selaoban在线视频免费精品 |
亚洲人成电影网站国产精品 |
国产一级一毛免费黄片 |
日韩亚洲人成在线综合日本 |
久久久久国色av免费看 |
亚洲特级aaaaaa毛片 |
我要看免费的毛片 |
最新亚洲人成无码网站 |
亚洲人成电影网站国产精品
|
亚洲精品国产精品国自产网站
|
亚洲国产精品无码久久SM |
18禁在线无遮挡免费观看网站 |
亚洲AV日韩精品久久久久久久 |
免费国产黄网站在线观看 |
亚洲av成人综合网 |
免费中文字幕一级毛片 |
182tv免费视频在线观看 |
亚洲人成网站18禁止久久影院 |
在线观看免费为成年视频 |
大片免费观看92在线视频线视频 |
亚洲熟妇无码另类久久久 |
久9热免费精品视频在线观看 |
亚洲免费二区三区 |
亚洲精品黄色视频在线观看免费资源 |
九九99热免费最新版 |
亚洲精品国产福利在线观看 |
日韩免费无砖专区2020狼 |
免费无码又爽又刺激网站 |
亚洲日本乱码卡2卡3卡新区 |
亚洲男人第一无码aⅴ网站 |
真人做人试看60分钟免费视频 |