锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合婷婷久久,久久丫精品国产亚洲av,亚洲av专区无码观看精品天堂http://www.tkk7.com/killvin/category/8035.htmlzh-cnTue, 27 Feb 2007 08:46:46 GMTTue, 27 Feb 2007 08:46:46 GMT60OSWorkflow娣卞叆鍒嗘瀽 錛?閲嶆柊瀹氫箟Configuration鎺ュ彛 http://www.tkk7.com/killvin/archive/2006/03/02/33314.htmlkillvinkillvinThu, 02 Mar 2006 13:04:00 GMThttp://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鐨勮璁¤鍒欙紝灝ゅ叾鍦ㄥ畠鐨勫弬鏁頒紶閫掍笂錛岄潪甯哥殑宸紒



killvin 2006-03-02 21:04 鍙戣〃璇勮
]]>
workflow鎺ュ彛鍒掑垎 http://www.tkk7.com/killvin/archive/2006/03/02/33312.htmlkillvinkillvinThu, 02 Mar 2006 13:03:00 GMThttp://www.tkk7.com/killvin/archive/2006/03/02/33312.htmlworkflow鎺ュ彛鍒掑垎

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)浠栫殑澶у槾澶栧簲璇ュソ濂界殑鎻愰珮鑷繁鐨勬妧鏈慨鍏匯傦紞瀹炲湪涓嶆暍鎭淮榪欎綅"澶у笀"鐨勭紪鐮佹按騫籌紒


killvin 2006-03-02 21:03 鍙戣〃璇勮
]]>
WorkFlow鐨勪簨鍔″洖婊氬疄鐜?http://www.tkk7.com/killvin/archive/2006/03/02/33313.htmlkillvinkillvinThu, 02 Mar 2006 13:03:00 GMThttp://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" />

killvin 2006-03-02 21:03 鍙戣〃璇勮
]]>
OSWorkflow浣犺鎴戞妸鏁版嵁搴撳叧闂啓鍦ㄥ摢閲岋紒 http://www.tkk7.com/killvin/archive/2006/03/02/33311.htmlkillvinkillvinThu, 02 Mar 2006 13:02:00 GMThttp://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>


killvin 2006-03-02 21:02 鍙戣〃璇勮
]]>
JDBCWorkflow涓嶆敮鎸丼equence http://www.tkk7.com/killvin/archive/2006/03/02/33310.htmlkillvinkillvinThu, 02 Mar 2006 13:01:00 GMThttp://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>

killvin 2006-03-02 21:01 鍙戣〃璇勮
]]>
灝忓績(jī)OSPropertySet 錛?PropertySet http://www.tkk7.com/killvin/archive/2006/03/02/33309.htmlkillvinkillvinThu, 02 Mar 2006 13:00:00 GMThttp://www.tkk7.com/killvin/archive/2006/03/02/33309.html

killvin 2006-03-02 21:00 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲午夜无码AV毛片久久| 99久久综合国产精品免费| 亚洲国产激情一区二区三区| 亚洲色精品VR一区区三区| 四虎永久在线观看免费网站网址| 亚洲天堂视频在线观看| 99爱在线精品视频免费观看9| 亚洲动漫精品无码av天堂| 久久高潮一级毛片免费| 国产成人麻豆亚洲综合无码精品| selaoban在线视频免费精品| 亚洲人成电影网站国产精品| 国产一级一毛免费黄片| 日韩亚洲人成在线综合日本| 久久久久国色av免费看| 亚洲特级aaaaaa毛片| 我要看免费的毛片| 最新亚洲人成无码网站| 亚洲人成电影网站国产精品 | 亚洲精品国产精品国自产网站 | 亚洲国产精品无码久久SM| 18禁在线无遮挡免费观看网站| 亚洲AV日韩精品久久久久久久| 免费国产黄网站在线观看| 亚洲av成人综合网| 免费中文字幕一级毛片| 182tv免费视频在线观看| 亚洲人成网站18禁止久久影院| 在线观看免费为成年视频| 大片免费观看92在线视频线视频| 亚洲熟妇无码另类久久久| 久9热免费精品视频在线观看| 亚洲免费二区三区| 亚洲精品黄色视频在线观看免费资源| 九九99热免费最新版| 亚洲精品国产福利在线观看| 日韩免费无砖专区2020狼| 免费无码又爽又刺激网站| 亚洲日本乱码卡2卡3卡新区| 亚洲男人第一无码aⅴ网站| 真人做人试看60分钟免费视频|