zk quartz framework

Upload: sang-nguyen

Post on 30-Oct-2015

172 views

Category:

Documents


1 download

TRANSCRIPT

I

Khoa Cng Ngh Thng Tin Trng i Hc Nng Lm TP. HCM

CNG TRNH HON TT TI

TRNG I HC NNG LM TP HCM

Cn b hng dn: ThS. Nguyn Thanh Phc

Cn b phn bin: ThS. Nguyn c Cng Song

Lun vn c nhn c bo v ti :

HI NG CHM LUN VN C NHN TRNG I HC NNG LM TP HCM ngy 09 thng 02 nm 2007

NHIM V LUN VN C NHN

I. TN TI: ZK Framework Quartz Framework v ng dngII. NHIM V V NI DUNG

Nhim v: Tm hiu ZK Framework v Quartz Framework. Vit ng dng minh ha cho tng Framework .

Ni dung nghin cu: Tm hiu ZK Framework v Quartz Framework. Trin khai hai ng dng Bookmark Manager v Auto Backup Database.

III. NGY GIAO NHIM V: 25/07/2006IV. NGY HON THNH NHIM V: 01/02/2007V. H V TN CN B HNG DN: Nguyn Thanh Phc

TM TT

Tn ti:

Tm hiu ZK framework v Quartz framework.

Vit ng dng minh ha cho cc framework.

Thi gian thc hin:

Ngy c giao ti: 25-07-2006

Ngy hon tt ti: 01-02-2007

Ni dung nghin cu:

Tm hiu framework vit web mi: ZK framework, vit ng dng minh ha : Bookmark manager.

Tm hiu framework sp lch t ng: Quartz framework, vit ng dng minh ha: Auto Backup Database.

Kt qu ch yu t c:

Tm hiu c nhng u khuyt im ca ZK framework v Quartz framework.

ng dng Bookmark Manager lu c nhng bookmark cn dng.Thc hin c cc thao tc c bn vi bookmark.

ng dng Auto Backup Database ng dng c mt s chc nng do Quartz frame work h tr

Mt s thao tc nh backup, restore hay empty i vi cc h qu tr c s d liu m ng dng Auto Backup Database h tr.

Summary Name:

Research ZK framework and Quartz framework.

Application: Bookmark manager, Auto Backup Database.

Time:

Started date: july 25th 2006

Completion date: February 1st 2007

Content:

Research framework to build web sites: ZK framework, application : Bookmark manager.

Research framework to schedule job: Quartz framework, application: Auto Backup Database.

Result:

Understand all the frameworks: ZK framework and Quartz framework.

Bookmark Manager can save all the bookmarks and can manipulate all the bookmarks.

Auto Backup Database ng dng c mt s chc nng do Quartz frame work h tr

Auto Backup Database can backup, restore or empty all the databases which this application supports .

Mc lc

--o0o

14I.GII THIU.

141.Gii thiu ZK .

142.Ti sao nn dng ZK.

153.Khi nim AJAX.

154.Cch ci t ZK.

165.Mi trng pht trin: Eclipse3.1, Tomcat.

176.ZK Blank-Project.

18II.NHNG THNH PHN C BN.

19a.Component.

19b.Page.

20c.Desktop.

22III.QUN L S KIN.

22a.Giai on khi to page:

22b.Giai on khi to component:

23c.Giai on x l s kin.

23d.Giai on gi tr s kin:

32IV.ZK USER INTERFACE MARKUP LANGUAGE(ZUML).

50V.ZUML VI NHNG THNH PHN XUL.

86VI.ZUML VI NHNG THNH PHN XHTML.

92VII.THNH PHN MACRO.

99VIII.ADVANCED FEATURES

111IX.KT NI C S D LIU.

PHN 2. QUARTZ FRAMEWORK V NG DNG

CHNG 1: GII THIU1171.1 Khi nim Job Scheduling:1181.2 S cn thit Job Scheduling:1181.3 S hnh thnh Quartz Framework:1181.4 Ci t:118CHNG 2: LCH LM VIC1212.1 Tng quan:1222.2 Qun l Scheduler:1232.3 Qun l Jobs:1242.4 Quartz Triggers:1252.5 Cron Triggers:1262.5.1 Quick Lession in Cron :1262.5.2 S khc bit ca nhng phin bn Cron Unix :1262.5.3 nh dng Cron Unix :1262.5.4 nh dng biu thc ca Cron :1272.5.5 nh dng ca biu thc Cron :1282.5.6 Hiu cc k t t bit :129CHNG 3: JOB STRORES & PERSISTENCE1363.1 Job Strores:1373.1.1 Lu tr Job :1373.1.2 Lu tr Job trong Quartz :1373.1.3 Lu tr Scheduler trn Memory :1373.1.4 S dng tnh lin tc ca Job Strores :1403.1.5 Lu tr Job trong c s d liu:1413.1.6 To c s d liu cho Quartz :1433.1.7 S dng JobStroreTX :1453.1.8 nh cu hnh mt ngun d liu cho JobStroreTX :1493.1.9 Cch chy Quartz vi JobStroreTX :1533.1.10 S dng b nh lu tr thng tin Scheduler :1533.1.11 S dng JobStroreCMT :1533.1.12 nh cu hnh JobStroreCMT :1533.3.10 Giao din quan ly tai tt nghip 153CHNG 4: QUARTZ LISTENERS1584.1 Thc hin mt Listener:1584.2 Lng nghe s kin Jobs:1584.3 Lng nghe s kin Events:1584.4 Lng nghe s kin Scheduler:1584.5 Dng FileScanListener:1584.6 Thc hin Listeners trong quartz_jobs.xml:1584.7 Dng s kin:1584.8 Dng Quartz Listeners:158CHNG 5: QUARTZ PLUG-INS1665.1 Khi nim Plug-in:167 5.2 To mt Quartz Plug-in:167 5.3 Khi bo Plug-in trong quarzt.properties:170CHNG 6: CLUSTERING QUARZT171

6.1 Clustering l g:172 6.2 Li ch ca Clustering cho nhng ng dng Quarzt172 6.2.1 High available :1726.2.2 Scalability (c kh nng m rng) :1726.2.3 Load Balancing (cn bng ti) :173 6.3 Lm th no Clustering lm vic trong Quarzt1736.3.1 Quarzt Scheduler khi ng ti Cluster :1746.3.2 Pht hin nhng nt Scheduler b hng :1746.3.3 Phc hi nhng Job t nhng th hin b hng :174 6.4 nh cu hnh Quarzt s dng Clustering1746.4.1 nh cu hnh nt file quartz.properties :1756.4.2 nh cu hnh nhng thuc tnh Scheduler chnh :1756.4.3 nh cu hnh mc JobStore :1766.4.4 nh cu hnh ngun d liu JobStore :1766.4.5 Nhp c s d liu vi thng tin Scheduler :176 6.5 Chy nhng nt Quarzt Cluster176 6.6 Quarzt Clustering CookBook1776.5.1 Gn nhng Job cho nhng trng hp ring trong Cluster :1776.5.2 Chy nhng Job trn mi nt trong Cluster :1776.5.3 Chy nhng nt trn nhng my ring :1776.5.4 S dng mt thi gian ng b ha dch v :1776.5.5 Truy li danh sch v vic thi hnh nhng Job t Cluster :1776.5.6 Chy ng thi nhng th hin Clustered v Noncluster :1776.5.7 S dng ton b nhng Listener trong mi trng Clustered :178CHNG 7: XY DNG MT NG DNG QUARZT179 7.1 Lm vic vi Scheduler1807.1.1 Khi to v chy Scheduler :1807.1.2 Dng Scheduler :1817.1.3 Tm ngng Scheduler (dng StandBy) :181 7.2 Lm vic vi Job1827.2.1 Khi to mt Job :1827.2.2 Xp lch cho mt Quarzt Jobs :1847.2.3 Chy lp tc mt Job :1857.2.4 Thay th mt Job :1867.2.5 Thay i Triggers tn ti :1897.2.6 Danh sch Job trong Scheduler :1897.2.7 Danh sch Trigger trong Scheduler :191Chng 8: Trin Khai ng Dng223PHN 1 : ZK FRAMEWORK V NG DNGI. GII THIU.1. Gii thiu ZK .

ZK l mt event-driven, component-based framework H tr to nhiu giao din cho ng dng Web. ZK bao gm AJAX-based v event-driven engine(iu khin s kin), l s thit lp ca mt b cc thnh phn XUL, XHTML, v mt ngn ng ZUML (ZK User Interface Markup Language).2. Ti sao nn dng ZK.

Vi ZK bn c th trnh by nhng ng dng s dng nhng chc nng ca cc thnh phn XUL v XHTML. H tr to mt giao din nh mt desktop application, s vn dng ny gip trnh li cho ngi s dng. Khng ging nh frameworks khc, AJAX l mt cng ngh behind-the-scene s ng b ha cc thnh phn XUL, XHTML v vn dng cc s kin mt cch t ng bi cng ngh ZK.. Thm vo , mt model n gin nhng nhiu compoments, ngoi ra ZK h tr ngn ng markup languages l ZUML, ZUML ging nh XHTML cho php ngi pht trin thit k giao din ngi dng m khng cn bit nhiu kin thc v lp trnh.

Hin nay, ZUML h tr hai tp hp th l XUL v HTML dng nguyn thy, ngoi ra n cn h tr nh ngha th theo yu cu. ZK cho php nhng Java v EL expressions. Ngi pht trin c th ty nhng hoc khng nhng m Java. Khng ging nh Javascript nhng vo HTML, ZK thc thi tt c nhng code c nhng vo trong server. Mi th chy ti server t nhng viewpoint ca ng dng. Ngi pht trin phi cho php cc component ca h c tng tc mt cch cn i bng cch quyt nh nhim v no c lm ti browser v nhim v no c lm ti server.

ZK khng i hi hay yu cu bt k k thut no l nn tng(back-end) c. N c th c s dng chung vi cc midleware JDBC, Hibernate, EJB or JMS. ZK khng p buc nh pht trin s dng MVC hay mu thit k khc. Nhng s dng MVC l s la chn tt.

3. Khi nim AJAX.

AJAX, vit tt t Asynchronous JavaScript and XML (JavaScript v XML bt ng b), l b cng c cho php tng tc ng dng web bng cch ct nh d liu v ch hin th nhng g cn thit, thay v ti i ti li ton b trang web. AJAX khng phi mt cng ngh n l m l s kt hp mt nhm cng ngh vi nhau. Trong , HTML v CSS ng vai hin th d liu, m hnh DOM trnh by thng tin ng, i tng XMLHttpRequest trao i d liu khng ng b vi my ch web, cn XML l nh dng ch yu cho d liu truyn.

4. Cch ci t ZK.

ZK gm nhiu th vin. C hai cch ci t th vin cho Tomcat Web server: Cch 1: Copy th vin vo trong th mc Tomcat 5.5\shared\lib tt c nhng ng dng Web c th s dng chng. Cch 2: Copy th vin vo th mc WEB-INF/lib ca Web application. Ci t TOMCAT.

Download v ci t Tomcat t http://tomcat.apache.org. Stop Tomcat. Gii nn zk-2.1.0.zip or zk-2.1.0.tar.gz Copy dist/lib/*.jar to $TOMCAT_HOME1/shared/lib. Copy dist/lib/ext/*.jar to $TOMCAT_HOME/shared/lib. Copy dist/lib/zkforge/*.jar to $TOMCAT_HOME2/shared/lib Khi ng li TOMCAT. Copy demo/bin/zkdemo.war vo th mc webapps trong Tomcat. Hay c th thc hin bng cch s dng Tomcat Manager. Nu nh bn dng cch ny u tin bn phi dng Tomcat.5. Mi trng pht trin: Eclipse3.1, Tomcat.

a. Pht trin trn eclipse.

eclipse h tr vit file *.zul ta lm nh sau:

Vo Window/Preferences, chn General/Content Types, trong content types chn XML.

Chn add nh ngha kiu c ui *.zul.

Chy li eclipse.

Cu trc mt ZK Project.

Th mc src. Cha phn model s l ca chng trnh.

Th mc css Cascading Style Sheet.

Th mc image. Hnh nh dng trong chng trnh.

Th mc view. Cc trang zul.

WEB-INF:

6. ZK Blank-Project.

n gin ha vic pht trin chng ti c lm sn mt blank-project, mi pht ng dng bn c th lm trn y.II. NHNG THNH PHN C BN.1. Cu trc tng quan:

ZK bao gm mt k thut AJAX-base t ng tng tc, mt tp hp thnh phn XUL-based v mt markup language n gin. Cng ngh AJAX_based gm ba thnh phn ZK loader, ZK AU Enginer v ZK Client Enginer. Khi ngi s dng gi yu cu, ZK loader s ti ZK page dch v tr li kt qu vo trang HTML p ng yu cu ca request. Mt ZK page c vit bi Markup Language ZUML. ZUML ging nh HTML n dng m t nhng thnh phn c to. Nhng thnh phn ny c to ch mt ln v chng c gi li cho n khi session timeout. Khi y ZK AU Engine v ZK Client Enginer s c gn vi nhau bng mt pitcher v catcher. Chng chuyn nhng s kin ang xy ra trong trnh duyt n nhng ng dng ang chy ti server v update DOM ti trnh duyt. Dng s kin:

Khi ngi s dng nh mt a ch URL hay lick vo mt hyperlink ti trnh duyt mt request s c gi n Web server. ZK loader ngay lp tc gi n server yu cu ny. ZK loader s ti trang ch nh(specified page) v dch n to ra nhng component ph hp . Sau khi bin dch y trang ZK loader s tr kt qu v trang HTML. Khi trang HTML s gi tr v trnh duyt i cng vi ZK Client Enginer. ZK Client Enginer s n trnh duyt d tm mt vi s kin khi u bi nhng hot ng ca user, v d nh vic di chuyn chut hoc thay i mt s gi tr. N ch d tm mt ln v thng bo cho ZK AU Enginer bng vic gi ZK request. Nh vic nhn ZK request t client Engine, AU Enginer update ni dung tng ng vi component nu cn thit, v sau AU Enginer s thng bo cho ng dng bi vic gi s l nhng s kin c lin quan. Nu ng dng chn thay i ni dung ca component, thm hoc xa component AU Engine gi nhng ni dung mi thay i ca component n client Engine bng vic s dng ZK reponses. Nhng ZK reponse l nhng cu lnh tht s ch dn cho Client Engine update DOM tree cho ph hp.

2. Components, Page, Desktop.b. Component. Mt component l mt i tng UI, v d nh: Label, button, tree. Mt component c th hin t interface com.potix.zk.ui.Component.c. Page. Mt trang l mt tp hp ca component. Chng c trnh by browser. Mt trang c t ng to ra khi ZK loader dch trang ZUML. Page Title: Mi trang c th c mt title , chng c trnh by nh mt phn tiu window. Chng ta s dng on m sau:

d. Desktop. Mt trang ZUML c th include nhiu trang XUML trc tip hoc gin tip qua thuc tnh include. Mt desktop l tp hp nhng trang cng phc v cho mt yu cu (request). Trong mt ng dng tng tc vi ngi dng c th thm vo hoc loi b pages t desktop, components cng c thm vo hoc bt ra trong mt trang. Phng thc createComponents(): Mt trang hoc mt desktop c th c to ra hoc loi b hon ton. Nhng khng c API no to hoc hy desktops, pages. Page c to ra mi khi ZUML ti mt page, v remove khi ZK thy n khng cn c tham kho n. Mt desktop c to ra khi trang ZUML c ti ln u tin, v cng b loi b nu c nhiu desktop cng to ra cho mt session. Phng thc createComponent() nm trong lp com.potix.zk.ui.Executions, c nhim v to component, khng to page, cho d n ti c mt ZUML file .3. Events.

Mt event (com.potix.zk.ui.event.Event) cho bit nhng g xy ra cho ng dng. Mi dng ca event c trnh by bi mt lp ring bit. V d: trong lp com.potix.zk.ui.event.MouseEvent n s s l s kin theo mun ca ngi s dng khi click chut. C hai cch ng k mt s kin. Mt l ng k s kin mt cch trc tip bng thuc tnh onXxx trong ngn ng markup language.V d: onClick() cho php ta x l s kin click chut. Cch khc gi phng thc addEventListener() cho component hoc l mt page.

Thm vo mt s kin c gi bi user ti browser, mt ng dng c th xy ra bi vic s dng phng thc sendEvent() and postEvent() t lp com.potix.zk.ui.event.Events.III. QUN L S KIN.

4. Components Lifecycle.

Vng i ca vic load mt trang: Phi mt bn giai on ZK loader ti v dch mt trang ZUML: Giai on khi to page, Giai on to components, Giai on x l s kin v Giai on gi tr s kin.e. Giai on khi to page: u tin ZK x l lnh init, nu nh khng nh ngha cho thuc tnh class th giai on ny c th c b qua. X l init c gn lin vi thuc tnh class.

Mt khc vic x l lnh init cho mt zscript file c vit nh sau:

File zscript s c x l trong giai on Khi To Trang. Ch : Mt page cha c nh km desktop trong giai on thi hnh u tin. f. Giai on khi to component: Trong giai on ny ZK loader dch mt trang ZUML, khi to nhng component ph hp. Gm nhng bc sau: Mi phn t s c kim tra cho ph hp nu khng th chng s c b qua. Nu thuc tnh forEach c ch nh vi mt tp hp nhng item. ZK s lp li nhng bc cho mi item trong collection. To ra mt component da trn tn mi phn t, hoc s dng class nu n c ch nh trong thuc tnh use. Khi to th t cc thnh phn thng qua thuc tnh trong trang ZUML. Sau khi nhng thnh phn con c to, onCreate() c gi cho component ny. Ch rng s kin onCreate() c gi cho nhng component con trc.g. Giai on x l s kin. Trong giai on ny, ZK gi listener cho mi s kin c cha trong hng i ca desktop ny. Mt thread c lp c to gi cho mi listener, v vy n c th b tr hon m khng nh hng n qu trnh s l ca nhng s kin khc.h. Giai on gi tr s kin:

Sau khi x l xong cc s kin, ZK s tr li nhng component vo trang HTML v gi trang ny n browser. tr v component phng thc redraw() c gi. S thc hin ca component s khng thay i ni dung ca component gi phng thc.The Lifecycle of Updating Pages: Mt ba giai on ZK AU Engine x l ZK request t client: Giai on x l request, Giai on x l s kin, v Giai on gi tr s kin.a. Giai on x l Request: Ph thuc vo request, ZK AU Engine c th update ni dung ca nhng thnh phn sao cho nhng ni dung ging nh nhng g c biu din ti client.b. Giai on x l s kin: Giai on ny x l tng s kin mt trong mt threat c lp.c. Giai on gi tr s kin: Sau khi tt c nhng x kin c x l, ZK tr li nhng components c tc ng, pht sinh nhng ZK responds tng ng, v gi nhng responds v client. Sau Client Engine update DOM tree ti browser da vo responds .

D cc thnh phn c gi li hay cp nht ti browser u ph thuc vo s thi hnh ca nhng thnh phn.5. Qun l thnh phn rc. Khng ging nh nhng component-based GUI, ZK khng t hy b hay ng phng thc cho cc components. Ging nh W3C DOM mt component b remove khi browser ngay khi n b remove khi trang. N c show khi n c thm vo mt trang. ng hn, mt component c tch ra t mt trang, n khng c ZK qun l, nu nh ng dng khng tham kho n n. B nh ang c component s dng s c JVM's Garbage Collector thay th.

6. Event Listening and Processiong.b. Add Event Listeners by Markup Languages. Cch n gin nht l thm vo event listener khai bo thuc tnh trong trang ZUML. Gi tr thuc tnh ca s kin l code Java m BeanShell c th dch c.

c. Add and Remove Event Listeners by Program: C hai cch thm mt event listeners vo chng trnh. Khai bo mt thnh vin(declare a member). Khi vit chng ln mt component bi vic s dng mt lp ca bn, bn c th khai bo mt chc nng member lm event listener. Trong mt trang bn khai bo thuc tnh use ch nh n lp m bn mun s dng. V d: lp MyClass c th hin t lp com.potix.zul.html.Window.

Trang ZUML trn c th s dng phng thc onOK() thi hnh s kin c vit trong phng thc .public class MyClass extends com.potix.zul.html.Window {

public void onOK() {

...//add an event listener

...//handles the onOK event (sent when ENTER is pressed)

}

}

Add and Remove Event Listeners Dynamically. Bn c th s dng phng thc addEventListener() v removeEventListener() thm hoc bt mt event. Event c thm phi implements t interface com.potix.zk.Component. Add and Remove Event Listeners to Pages Dynamically.

Bn c th thm event listener vo page dinamically. Mt ln thm tt c nhng s kin c gi tn s c gi cho nhng component ca trang c ch nh v nhng trang ny s c gi cho Listener. Tt c nhng page-level event listener l non-ASAP. Ni cch khc l phng thc isAsap() b l i.Hy xt v d sau: public class ModificationListener implements EventListener {

private final Window _owner;

private final Page _page;

private boolean _modified;

public ModificationListener(Window owner) {

_owner = owner;

_page = owner.getPage();

_page.addEventListener("onChange", this);

_page.addEventListener("onSelect", this);

_page.addEventListener("onCheck", this);

}

/** Called to unregister the event listener.*/

public void unregister() {

_page.removeEventListener("onChange", this);

_page.removeEventListener("onSelect", this);

_page.removeEventListener("onCheck", this);

}

/** Returns whether the modified flag is set.*/

public boolean isModified() {

return _modified;

}

//-- EventListener --//

public void onEvent(Event event) throws UiException {

_modified = true;

}

public boolean isAsap() {

return false;

}

}

Trnh t ca php gi mt s kin(The Invocation Sequence): Gi thit ang gi mt s kin onClick():

Gi script c khai bo onClick() trong thuc tnh ca component. Gi event listener cho s kin onClick() c khai bo trong component theo th t khai bo. Gi phng thc onClick() cho tng member ca component (nu c). Gi event listener tng cho s kin onClick() c khai bo trong trang cho tng component thuc v. 7. Send and Post Events from an Event Listener.

a Post Events. Vic s dng phng thc postEvent() trong lp com.potix.zk.ui.event.Events. Mt event listener s post s kin n cui hng i nhng s kin. N tr v ngay lp tc sau khi t s kin vo trong hng i. S kin s c x l theo trnh t first in first out. b Send Events. Vic s dng phng thc sentEvent() trong lp com.potix.zk.ui.event.Events. Mt event listener hi ZK v vic s l ngay lp tc s kin c ch nh. N s khng c tr v cho n khi tt c nhng event listener ca nhng s kin c ch nh c x l. S kin c x l ti cng mt thread. 8. Thread model.

Trn mi desktop s kin c x l mt cch tun t, v th thread model n gin. Bn ch cn ng k event listener v s l s kin khi gi. Ch : mi s kin c thi hnh trong mt thread c lp gi l event processing thread, trong khi trang ZUML c nh gi trong servlet thread. Suspend v Resume. Trong ng dng c nhng khi bn phi suspend (tr hon) thi hnh cho n khi mt vi ng dng tha mn. Cc phng thc wait(), notify() v notifyAll() trong lp com.potix.zk.ui.Executions c nh ngha cho mc ch ny. Khi mt s kin mun suspend, n gi wait(). Mt thread khc c thng bo bi vic s dng phng thc notify() hoc notifyAll(), nu ng dng c tha mn. Model dialog l mt dng v d ca vic s dng cng ngh ny. Public void doModal() throws InterruptedException {...

Executions.wait(_mutex); //suspend this thread, an event processing thread

}

public void endModal() {

...

Executions.notify(_mutex); //resume the suspended event processing thread

}

Nhng cch s dng trn ging nh nhng phng thc wait(), notify(), notifyAll() ca lp java.lang.Object. Tuy nhin bn khng th s dng nhng phng thc ca lp java.lang.Object cho vic suspend v resume nhng event listener. Ni cch khc th tt c nhng s kin c x l s khng cn lin kt c vi desktop . Ch rng khng ging nh phng thc wait() v notify() ca lp i tng trong Java, nu s dng phng thc synchronized() ng nhng phng thc wait() v notify() ca lp Executions. Trong trng hp trn bn phi lm nh vy bi v khng c iu kin no c th thc hin (posssible). Tuy nhin, nu mt iu kin ph hp bn c th s dng synchronized() block ging nh vic s dng wait() v notify() trong i tng Java.9. To v xa Event Processiong Thread.

a To thread.

Thnh thong bn cn to mt thread trc khi x l event.

V d: bn cn to mt thread cho vic authentication(cp quyn). J2EE hoc web contianer lu tr thng tin authentication ti local storage, v vy h c th re-authentication khi cn.

to tin trnh ny, bn cn register mt lp implements com.potix.zk.ui.event.EventThreadInit. y chng ti ly v d mt th hin cp quyn trn Jboss:

import java.security.Principal;

import org.jboss.security.SecurityAssociation;

import com.potix.zk.ui.Component;

import com.potix.zk.ui.UiException;

import com.potix.zk.ui.event.Event;

import com.potix.zk.ui.event.EventThreadInit;

public class JBossEventThreadInit implements EventThreadInit {

private final Principal _principal;

private final Object _credential;

/** Retrieve info at the constructor, which runs at the servlet thread. */

public JBossEventThreadInit() {

_principal = SecurityAssociation.getPrincipal();

_credential = SecurityAssociation.getCredential();

}

//-- EventThreadInit --//

/** Initial the event processing thread at this method. */

public void init(Component comp, Event evt) {

SecurityAssociation.setPrincipal(_principal);

SecurityAssociation.setCredential(_credential);

}

public void prepare(Component arg0, Event arg1) throws UiException {

// TODO Auto-generated method stub

}

}

Khai bo on sau trong WEB-INF/zul.xml

JBossEventThreadInit

b Hy b mt tin trnh sau khi x l.

Tng t, bn c th hy b mt thread khi n x l xong. V d nh ng mt transaction. Bn cn register mt lp implements com.potix.zk.ui.event.EventThreadCleanup v phn t listener trong WEB-INF/zul.xml.

my.MyEventThreadCleanup

IV. ZK USER INTERFACE MARKUP LANGUAGE(ZUML).ZUML da trn c s ca XML. hiu r v XML nu bn cha bit th nn c ti liu tham kho v XML. Khi bit s v XML bn s thy ZUML cng ging XML v s d dng hiu hn.

10. XML Namespace. Namespace dng d dng phn bit tn c s dng trong ti liu XML . ZK s dng XML namespace phn bit tn ca nhng component. Bn c th dng hai component cng tn nu chng khc namespacevo trong mt trang.

ZHTML Demo

ZHTML Demo

void addItem() {

}

xmlns:x="http://www.potix.com/2005/zul" l mt namespace c bit c gi t http://www.potix.com/2005/zul, v s dng x trnh by namespace ny. xmlns:="http://www.w3.org/1999/xhtml" l mt namespace c bit c gi t http://www.w3.org/1999/xhtml, v s dng tn mc nh cho namespace. l phn t gi html t namespace mc nh: http://www.w3.org/1999/xhtml. l phn t gi textbox t namespace : http://www.potix.com/2005/zul.

Auto-completion with Schema: Eclipse h tr auto-completion nu XML scheme c ghi nh sau:Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.potix.com/2005/zul http://www.potix.com/2005/zul/zul.xsd">

11. iu kin nh gi.

S th hin mt phn t i khi da vo iu kin ca vic s dng if hoc unless hoc c hai.V d window component s c to khi a bng mt v b khng bng hai. Ngoi ra th window ny s b l i.

...

12. Iterative Evaluation. duyt mt collection(tp hp) cc i tng ta dng thuc tnh forEach. Thuc tnh ny c th c deverlopers d control(iu khin) s ln duyt. Vic iterative ph thuc vo kiu gi tr ca thuc tnh forEach : Iterative s duyt mi element nu l java.util.Collection Iterative s duyt mi Map.Entry nu l java.util.Map ca map Iterative s duyt mi element nu l java.util.Iterator t iterator Iterative s duyt mi element nu l java.util. Enumeration t enumeration Iterative duyt mi phn t ca mng nu l cc mng Object[], int[], short[], byte[], char[], int[], float[], double[] Bin each: Trong sut chu trnh, Mt bin c gi l each c to v c gn vi item t collection. Ch rng mi bin each u c kh nng truy cp n c EL expression v zscript cng lc. ZK s lu li gi tr bin each nu n c nh ngha trc v khi phc n sau khi duyt qua mt phn t.13. Nhng i tng n.

truy cp n component hiu qu hn bn nn s dng tp hp i tng n. Tp hp ny l nhng bin tham chiu n code Java bao gm phn t zscript v thuc tnh ca mi event listener. Ngoi ra cn c bin t EL expression.a Danh sch i tng n.Tn i tngHng dn

self com.potix.zk.ui.Component

Chnh thnh phn .

spaceOwner

com.potix.zk.ui.IdSpace.

Khng gian ch ca thnh phn. N ging nh seft.spaceOwner.

page

com.potix.zk.ui.Paget

Ging nh seft.pace.

desktop

com.potix.zk.ui.Desktop

Ging nh self.desktop.

sessioncom.potix.zk.ui.Session

Ging javax.servlet.http.HttpSession

componentScope java.util.Map

Mt map nhng thuc tnh c nh ngha trong component ging phng thc getAttributes() method trong interface com.potix.zk.ui.Component

spaceScopejava.util.Map

Mt map nhng thuc tnh c nh ngha 0ong ID space cha trong component ny.

pageScopejava.util.Map

Mt map nhng thuc tnh c nh ngha trong trang. N ging nh phng thc getAttributes() trong interface com.potix.zk.ui.Page.

desktopScopejava.util.Map

Mt map nhng thuc tnh c nh ngha trong desktop. N ging nh phng thc getAttributes() trong interface com.potix.zk.ui.Desktop.

sessionScopejava.util.Map

Mt map nhng thuc tnh c nh ngha trong session. N ging nh phng thc getAttributes() trong interface com.potix.zk.ui.Session.

applicationScopejava.util.Map

Mt map nhng thuc tnh c nh ngha trong web application. N ging nh phng thc getAttributes() trong interface com.potix.zk.ui.WebApp.

arg java.util.Map

Mt bin arg c a n phng thc creatComponents() trong lp com.potix.zk.ui.Executions.N khng bao gi null. Ch bin arg ch available khi to nhng components cho included page.Truy cp arg trong listener ca onCreate()khi s dng phng thc getArg() trong lp com.potix.zk.ui.event.CreateEvent.

each java.lang.Object

Mt bin c gi l each c to v c gn vi item t mt tp hp.Phn t iterative l mt element ca thuc tnh forEach

forEachStatuscom.potix.zk.ui.util.ForEachStatustrng thi ca mt iteration. ZK biu din thng tin lin quan n ni phn t va duyt

event com.potix.zk.ui.event.Event Hoc bt ngun t s kin hin ti. Ch sn sng dng c cho event listener

b Thng tin request v execution. Interface com.potix.zk.ui.Execution cung cp thng tin v vic thc thi hin ti nh l nhng request parameter. c c nhng thc thi hin ti c th lm nh sau: Nu ang component th s dng getDesktop.getExecutiong(). Nu khng tham chiu n component, page hay desktop th s dng phng thc getCurrent() trong lp com.potix.zk.ui.Executions.14. Processing Instruction: XML m t cch x l trong trang ZUML.a. Page directive: N m t thuc tnh ca trang.

Thuc tnhHng dn

id[Optional][Default: t ng gn]Nhng ch nh nh danh cho page. Nu ta gn cho page mt id th ta c th truy vn trang da vo id va gn

title[Optional][Default: none]nh danh cho tiu trang n c biu din ging nh title ca broswer. N c thay i t ng bng vic gi phng thc setTitle() trong interface com.potix.zk.ui.Page.

style[Optional][Default: width:100%]Ch nh CSS style s dng ti page. Nu khng ch r n s ph thuc vo mold. Mc nh width:100%

language[Optional][Default: phu thuc vo phn m rng][xul/html | xhtml]

Ch nh ngn ng cho trang. Hin nay n h tr xul/html v xhtml.

b. Ch th xml-stylesheet: Kiu s dng ny dng ch nh cho trang mu ti trang ny.

Thuc tnhHng dn

HrefType [Required]Mt lin kt n style sheet.

Typetype [Optional][Default: text/css]Ch nh mt dng ca style sheet, ch h tr text/css.

c. Ch th component: nh ngha mt component mi cho trang.

The by-macro Format.

nh ngha mt component c bn trn trang ZUML. N c gi l macro component. Ni cch khc mt ln to mt component mi th n s ph thuc vo page ZUML c ch nh. The by-class Format

Nu thuc tnh extends khng c khai bo vic nh ngha mt component mi da trn mt lp. N c gi l native component l lp implements ca inteface com.potix.zk.ui.Component. nh ngha component bn phi ch nh thuc tnh class m n c s dng khi to component mi.

Thm vo nh ngha cho brand-new(mi hon ton) component bn ch cn khai bo extends="existentName". Ban u component c ti nh gi tr mc nh sau thuc tnh nh ngha c ghi ln.

...

...

N tng ng vi.

Ch rng: Nu tn thnh phn mi c nh ngha tn ti th nhng thuc tnh s th hin theo cch m bn gn.

Thuc tnhCh dn

NameYu cu.

Thnh phn tn.

macro-uriYu cu.Nu by-macro format c s dng.

by-macro format s dng ch nh URL ca trang ZUML.

ClassTy chn.

S dng cho c hai by-class v by-macro ch nh lp khi to cho mt th hin ca nhng loi thnh phn nh vy.

extends Ty chn.

S dng vi dng by-class ch r tn component c s dng. Nu khng c ch nh, nhng nh ngha tn ti b b qua. Brand-new Component s c ch nh.

mold-nameTy chn.

S dng vi by-class chi nh tn khun. Nu mold-name c ch nh, mold-uri cng phi c ch nh.

mold-uriTy chn.

S dng cho dng by-class ch nh mt mold URI. Nu mold URI c ch nh nhng mold-name khng c ch nh, mold name c s dng l default.

Prop1, prop2...Ty chn.

S dng cho c hai by-class v by-macro ch nh nhng thuc tnh ban u ca (aka..,members) component. Nhng thuc tnh ban u c p dng mt cch t ng nu mt component c to bi ZUML. Theo hng khc chng khng p dng nu chng c to bng tay(i.e., by Java codes). Nu bn cn mun p dng chng bn c th gi phng thc applyProperties().

d. Init Directive.

C hai dng, dng u tin s ch r lp dng khi to chuyn bit v ng dng, dng th hai s ch r dng zscript khi to chuyn bit v ng dng.

S khi to xy ra trc khi mt trang c evaluated (c lng) v gn cho mt desktop.Nhng nhng phng thc getDesktop(), getID() v getTitle() s tr v null. gi desktop hin thi bn s dng lp implement interface com.potix.zk.ui.Execution. Bn c th ch r bt k number no ca init directive. Nu bn chn dng u tin th class c ch nh phi implement interface com.potix.zk.ui.util.Iterator. Mt th hin ca lp c xy dng v phng thc doInit() ca n c gi, trc khi trang c nh gi.

Ngoi ra phng thc doFinally() c gi sau khi page c nh gi. Phng thc doCatch() uc gi khi c mt ngoi l xut hin. Nh vy ch th ny khng c gii hn cho s khi to. Bn c th s dng n cleanup v qun l li. Nu bn chn cch hai file zscript s c s dng v i s c t ging nh mt bin c gi l args m c kiu l mng i tng.Thuc tnhHng dn

classTy chn.Tn lp, lp m phi implement interface com.potix.zk.ui.util.Initator.Phng thc doInit() c gi trong trang Page Initial phase (trc khi trang c xt n ).Phng thc doFinallly() c gi sau khi mt trang c xt n .Phng thc doCatch() c gi nu mt ngoi l xy ra trong sut qu trnh dch.

zscriptTy chn.

Mt zcript file c duyt trong Page Initial phase.

arg0,arg1,arg2Ty chn.Bn c th ch nh mt vi s ca php gn. N hp vi phng thc doInit() nu dng u tin c s dng hoc nhng bin arg nu trng hp th hai c s dng. Ch php gn u tin l arg0, tip theo l arg1

e. The variable-resolver Directive.

B phn tch bin c s dng bi phin dch zscript gi quyt nhng bin khng bit. Lp ch nh phi c implement interface com.potix.zk.ui.util.VariableResolver. Bn c th ch nh nhiu b phn tch bin vi nhiu ch dn variable-resolver. Mt khai bo v sau c u tin hn.

V d :ZK vi Spring framework. Java Bean khai bo trong Spring framework .

function change() {

var el = document.getElementById("which");

el.src = "something.gif";

}

void change() {

which.src = "another.gif";

}

Ch : UUID l immutable(khng i). Tuy nhin v d trn s sai nu nhng components ca XUL khng c s dng. Nu mun tham kho n nhng XUL component trong JavaScript th bn phi s dng EL expression ly ng UUID.

var el = document.getElementById("${which.uuid}");

6. The TABLE and TBODY Tags

Browser thng to TBODY gia TABLE v TR. V vy, hai tables sau c cng cu trc.

Hi

Hi

7. S kin

Tt c cc thnh phn XHTML u h tr cng mt s kin, nhng c th dng c hay khng ph thuc vo Browser. V d, onChange l v ngha i vi mt thnh phn khng phi input, nh body v div.

8. Kt hp vi JSF, JSP v OthersKhi kt hp vi mt trang ang tn ti, bn cn t ra cho mnh mt s cu hi: c phi l mt trang tnh (hay ng) khng?

Bn mun lm cho trang c thm vi chc nng? Hay, bn thch hn khi vit li tng phn?

Phi do bn thch s dng XUL hay XHTML nh nhng thnh phn mc nh khi thm mt trang mi?

Ph thuc vo yu cu ca bn, c mt vi phng php lm.9. Trang html tnh

Bn ch cn thay i ui HTML sang ZUL v bn c th vit code ZUL ty thch.

10. To ra nhng trang ng

Bn ch cn thay i b lc DhtmlLayoutFilter trong web.xml qun l. V d (mt phn ca web.xml).

zkFilter

com.potix.zk.ui.http.DHtmlLayoutFilter

extension

html

zkFilter

/my/dyna.jsp

zkFilter

/my/dyna/*

//Ch , nu bn mun lc output t include v/hay forward, lu khai bo.

zkFilter

/my/dyna/*

REQUEST

INCLUDE

FORWARD

ERROR

VII. THNH PHN MACRO.

C hai cch hin thc mt component: Mt l s hin thc t lp com.potix.zk.ui.AbstractComponent. Hai l s dng nhng thnh phn khc c sn mt cch linh hot. Ta gi cch ny l macro Components(Thnh phn Macro).1. Ba bc s dng thnh phn macro.

a Bc 1: Hin thc thnh phn macro trong trang zuml.

To mt trang ZUML cha thnh phn macro. N ging nh trang ZUML thng thng. Nhiu trang ZUML c th cng s dng mt thnh phn macro v mt trang cng c s dng nh mt thnh phn macro

b Bc 2: Khai bo thnh phn macro trong trang zuml: Bn phi khai bo thnh phn macro trc khi khi to n.V d:

Ngoi thuc tnh name v macro-uri bn c th ch r nhiu thuc tnh ca macro s s dng khi n c khi to.

V vy khi s tng ng vi:

c Bc 3: S dng thnh phn macro.

Bn c th khai bo nhng thuc tnh khi s dng mt thnh phn macro.

Tt c nhng thuc tnh c khai bo ny s lu tr trong mt map, ta s dng mt bin arg truy cp nh sau:

Username:

Khi mt thuc tnh c gi l arg.includer th n s lun c s tham kho n thnh phn macro c to ra v n cng l cha ca thnh phn c nh ngha trong template.2. Thnh phn macro v ID space.

Cng nh window thnh phn macro cng c mt ID space. Xt v d: Mt thnh phn macro c nh ngha nh sau

Username:

Sau :

Tuy nhin on code sau khng ng:

Trong bt k ID space no, ta khng th khai bo cng mt ID vi thnh phn macro cha. C hai gii php x l trng hp ny: Cch 1: S dng nhng tin t c bit nh danh thnh phn con ca thnh phn macro(Cch ny c ngh s dng v n gin v d s dng).Username:

Cch 2: S dng thnh phn window to ID space

Username:

Truy cp nhng thnh phn con t bn ngoi: Bn c th truy cp n nhng thnh phn con bi vic s dng phng thc getFellow() hoc com.protix.zk.ui.Path.

comp.getFellow("username").getFellow("mc_username");new Path("/username/mc_username");

3. Nhng phng thc khc h tr thnh phn macro. Thnh phn macro c th hin t interface com.potix.zk.ui.ext.DynamicPropertied v vy bn c th s dng cc phng thc getDynamicProperty() v setDynamicProperty() truy cp n thuc tnh ca thnh phn macro.username id="ua" username="John"/>

Vic s dng com.potix.zk.ui.ext.DynamicPropertied khng phi l bin php ti u, v s trnh by client khng thay i nu bn s dng setDynamicProperty() thay i thuc tnh .Trc ht n ch thay i thnh phn c ct gi trong thnh phn macro. Th hai s thay i trc quan ch khi phng thc invalidate() c gi cho thnh phn macro.

ua.setDynamicProperty("username", "Mary"); //visual presentation won't change

ua.invalidate();//enforce the visual presentation to redraw

a Nhng phng thc c h tr trong java. Bc 1: Hin thc mt lp c m rng t lp com.potix.zk.ui.HtmlMacroComponent.//Username.java

package mypack;

public class Username extends HtmlMacroComponent {

public void setUsername(String name) {

setDynamicProperty("username", name); //so arg.username will be updated

final Textbox tb = (Textbox)getFellow("mc_username");

if (tb != null) tb.setValue(name); //correct the child if available

}

}

Nh m t trn, bn c th gi setDynamicProperty() trong setUsername(), v n s c s dng khi macro c gi li hon ton.

V phng thc setUsername() c th c gi trc khi thnh phn macro to ra con ca n, bn phi kim tra s tn ti ca mc_username.

Khi gi phng thc setUsername() th phng thc setValue() ca mc_username c cp nht t ng. Bc 2: Khai bo mt lp trong thnh phn macro vi vic s dng thuc tnh class.

b Nhng phng thc h tr trong zscript.

Ngoi cch thc thi vi 1 file java, bn c th thc thi trong scripts. Thun li l ko c vic sp xp thu thp v c th lm r ni dung (khng cn s dng li Web application). Bt li l giao din gim st v d gp li. N a ra mt vi bc ci t mt lp java trong zscript. Cn chun b mt file zscripts c hin thc. //username.zs

package mypack;

public class Username extends HtmlMacroComponent {

public void setUsername(String name) {

setDynamicProperty("mc_username", name);

((Textbox)getFellow("mc_username")).setValue(name);

}

S dng init trc tip load scripts file, sau khai bo component.

V vy thng s dng thnh phn zscript duyt zscript file.

c Override the Implementation Class When Instantiation. Bn c th s dng thuc tnh use override mt lp.

Sau s dng phng thc getPage() trong com.potix.zk.ui.Desktop.Page another = self.getDesktop().getPage("another");

2. Nhn dng components. Nhng thnh phn c nhm bi ID space. Chnh bn thn mt trang cng l mt ID spaces. Nhng thnh phn window l ID spaces khc. Gi s bn c mt trang P, trang ny c mt window con l A, A c mt window con l B. Bn mun ly mt window c tn l C trong window B, bn s phi thc hin nh sau: comp.getDesktop().getPage("P").getFellow("A").getFellow("B").getFellow("C");

Phng thc getFellow dng truy tm nhng thnh vin trong cng mt ID spaces. Component Path: l nhng kt ni ca nhng thnh phn dc theo nhng ID spaces. Gc l trang hin hnh Lp com.potix.zk.ui.Path c cung cp n gin ha cc thao tc ca thnh phn path. Vy, v d trn bn ch cn gi nh sau:Path.getComponent("/A/B/C"); //Gi s bn ang trang P

Path.getComponent("//P/A/B/C");

Ngoi phng nhng phng thc static, bn cng c th to mt PathPath parent = new Path("//P/A");

new Path(parent, "B/C").getComponent();

3. Sp xp.

Phng thc getChildren() ca interface com.potix.zk.ui.Component tr v mt danh sch thnh phn con ca Component, bn c th thao tc trc tip ln cc thnh phn ny. Cng tng t i vi phng thc getItems() ca com.potix.zul.html.Listbox, th hin trong v d sau:comp.getChildren().remove(0);

((Component)comp.getChildren().get(0)).setParent(null);

Bn khng th s dng phng thc sort() ca java.util.Collections xp xp chng, v khi bn thm mt phn t vo mt v tr, phn t v tr s b remove. V d phn t th hai c a ln v tr u tin v phn t u s b remove.

Comp.getChildren().add(0, comp.getChildren().get(1));

n gin ha vic xp xp cc thnh phn ZK h tr phng thc sort() trong lp com.potix.zk.ui.Components. V d sau s dng phng thc sort() v com.potix.zul.html.ListitemComparator cho mt list box. y ch l mt v d minh ha v list box trc tip h tr sp xp danh sch item.

void sort(Listbox l, int j) {Components.sort(l.getItems(), new ListitemComparator(j));}

4. Qun l browsers history. i vi nhng ng dng web multi-page thng s dng BACK v FORWARD i qua nhiu trang v ghi nh s dng li ln sau. Vi ZK bn ch s dng nhiu trang khi cn trnh by nhng thng tin c c tnh khc nhau. d dng cho ngi s dng di chuyn qua cc trang, ZK h tr qun l browsers history mt cch n gin trn server.

Bn thm item thch hp cho trng thi ca desktop vo browsers history, v sau ngi s dng c th dng cc BACK v FORWARD button qua li nhng trng thi khc nhau.

T nhng m t trn, c hai bc qun l lch s browser:

Thm mt item vo lch s browser cho mi trng thi thch hp ca desktop.

Lng nghe s kin onBookmarkChange v thao tc trn desktop tng ng.a Thm mt trng thi thch hp vo lch s browser. Bn phi quyt nh trng thi thch hp thm vo browsers history sao cho nhng ngi s dng c th i qua trng thi ny v ghi nh chng cho ln sau. Khi thm mt trng thi vo browsers history bn c th gi phng thc setBookmark() ca interface com.potix.zk.ui.Desktop khi thch hp, vic lm ny c gi l bookmarking. Ch n khng phi l nhng bookmarks ngi s dng thm vo browser( nhMy Favorites trong Internet Explorer). V d: bn mun nh du mt trng thi khi click vo button Next:

hnh di ZK ni vo #Step-2 URL

Nu bn bm vo nt BACK, bn s thy tr li trang ny

b Lng nghe s kin onBookmarkChange v thao tc trn desktop tng ng. Sau khi thm trng thi vo browsers history ngi s dng c th qua li gia cc trng thi nh l nhn button BACK th tr v trng thi trc. Khi trng thi c thay i ZK s thng bo cho ng dng bi lan truyn s kin onBookmarkChanged() (Mt th hin ca lp com.potix.zk.ui.event.BookmarkEvent) cho tt c nhng thnh phn root trong desktop. Khng ging nh nhng ng dng web multi-page, bn c th thao tc mt cch trc tip trn ZK desktop khi trng thi thay i. Vic lng nghe s kin onBookmarkChange bn c th thm event listener vo cc pages ca desktop hoc ch cc thnh phn cn thit ca n.

void goto(String bookmark) {if ("Step-2".equals(bookmark)) {...To Components cho Step 2} else { //empty bookmark...//to components cho Step 1}

Bn c th trnh by mi trng thi bng mt ZUML page, v s dng phng thc createComponents() trong lp com.potix.zk.ui.Executions to ra tt c cc thnh phn trong n khi nhn s kin onBookmarkChanged().if ("Step-2".equals(bookmark)) {

//1. Remove components, trnh by trng thi trc try {

self.getFellow("replacable").detach();

} catch (ComponentNotFoundException ex) {

//Cha c to}

//2. To components cho Step 2

Executions.createComponents("/bk/step2.zul", self, null);

}

c V d: nh du s la chn mi tab.

page.addEventListener("onBookmarkChanged",new EventListener() {public boolean isAsap() {return false;} //doesn't matterpublic void onEvent(Event event) throws UiException {try {wnd.getFellow(wnd.desktop.bookmark).setSelected(true);} catch (ComponentNotFoundException ex) {tab1.setSelected(true);}}});

This is panel 1This is panel 2This is panel 3

5. Component cloning.

Tt c nhng thnh phn u c th c hin thc t lp java.lang. Cloneable nh vy ti to li nhng component l mt vic n gin.

int cnt = 0;

Listbox l = src.clone();

l.setId("dst" + ++cnt);

vb.insertBefore(l, self);

Mt thnh phn c nhn bn, tt c nhng thnh phn con cng c nhn bn theo. Nhng thnh phn nhn bn khng thuc bt c page hay parent no. ID khng c thay i nu bn mun thm n vo trc trong cng mt ID space th bn phi thay i id cho n.6. Component Serialization. Tt c components u serializable, v vy bn c th serialize components qua memory hay cc ni ct gi khc v de-serialize chng sau . Ging nh cloning, components c de-serialized khng thuc bt c mt page hay desktop no.

int cnt = 0;

import java.io.*;

ByteArrayOutputStream boa = new

ByteArrayOutputStream(); new ObjectOutputStream(boa).writeObject(src);

Listbox l = new ObjectInputStream(new

ByteArrayInputStream( boa.toByteArray())) .readObject(); l.setId("dst" + ++cnt); vb.insertBefore(l, self);

Vic nhn bn component bng phng thc clone c lm tt hn l Serialization nhng Serialization c th c s dng qua li gia hai my khc nhau. Serializable Sessions: Mc nh, vic hin thc non-serializable th c dng din t mt session (com.potix.zk.ui.Session). Li ch ca vic s dng non-serializable l ngi pht trin khng cn quan tm c hay khng c gi tr lu tr trong mt component, nh setValue() trong Listitem l serializable.

Tuy nhin, nu nh bn chc chn tt c cc gi tr c lu tr trong component l serializable, bn c th s dng session implements serializable b sung cho session hin ti.

cu hnh ZK s dng serializable implementation, bn cn cu hnh thnh phn ui-fatory-class trong WEB-INF/zk.xml.7. Qun l session timeout. Sau khi mt session b timeout, tt c cc desktops thuc v n s b c loi i. Nu ngi s dng truy cp n desktop m chng khng tn ti, mt thng bo li s c hin ra ti trnh duyt nhc ngi s dng cho trng thi ny.

Thnh thong cn chuyn n mt page khc a cho ngi s dng nhng miu t y hn v ch dn h n mt page khc, hoc ng nhp li mt ln na. Bn c th ch r mt URI m bn mun gi n ngi s dng khi session timeout, trong WEB-INF/zk.xml. V d, mc tiu URI l /timeout.zul, bn cn thm dng sau vo zk.xml.

/timeout.zul

8. S truyn thng gia Inter-Page.

S truyn thng trong mt desktop th d thc hin. u tin bn c th s dng s kin thng bo ln nhau gia cc desktop. Th hai bn c th s dng thuc tnh chia s d liu.

a Send v post s kin. Cc page trn cng mt desktop c th lin lc vi nhau. Cch lin lc l s dng phng thc postEvent() hoc sendEvent() thng bo n mt thnh phn trong trang cn lin lc.Events.postEvent(new Event("SomethingHappens",

comp.getDesktop().getPage("another").getFellow("main"));

b Nhng thuc tnh. Mi component, page, desktop, web application u c ring mt map cc thuc tnh. l mt iu kin tt cho chia s thng tin gia cc components, pages, desktops v nhng even sessions. Trong zscript v EL expression bn c th s nhng dng i tng n componentScope, pageScope, desktopScope, sessionScope v applicationoScope.

Bn c th s dng nhng thuc tnh lin quan trong nhng lp thch hp truy cp chng. Bn cng c th s dng i s scope xc nh phm vi no m bn mun truy cp. Hai biu thc sau l tng ng nhau, gi s comp l mt component.

comp.getAttribute("some", comp.DESKTOP_SCOPE);

comp.getDesktop().getAttribute("some");

9. S truyn thng gia inter-web-application. Mt file EAR gm nhiu file WAR. Mi file WAR l mt web application. Khng c nhng chun chung lin lc gia hai ng dng web. Gi s bn mun kt hp vi mt page (nh /foreign.zul) t Web application khc (nh app2). Bn c th lm nh sau:

Hoc n gin bn c th tham chiu n mt style sheet t ng dng web khc.

Web Resources trong Classpath: Bn c th tham chiu n mt resource bi trong. Li th l bn c th nhng nhng reource web vo trong file JAR n gin ha s trin khai.

Sau resource /my/jar.gif s c lu trong /web directory.IX. KT NI C S D LIU.1. ZK ch l Presentation-Tier. ZK c trnh by theo cu trc tng, n c server-centric n phi thi hnh tt c on code ti server, v vy khng c khc bit cho vic kt ni c s d liu t desktop application. Ni cch khc ZK khng thay i hng truy cp n CSDL, bn c th dng JDBC hoc l nhng framework khc chng hn nh Hibernate.2. S dng Connection Pooling. Tt c nhng J2EE framework v Web server h tr nhng tin ch gi l connection pooing. Connection pooling l mt cng ngh ca vic to v qun l mt pool ca mt connection. l vic sn sng s dng lung khi cn thit thay v ng mt kt ni ngay lp tc n s gi chng vo trong pool cho n khi nhng request tip theo c phc v. N c rt nhiu tin ch v c th iu khin c ti nguyn. Connection Pooling gm cc ni dung: Cu hnh, m v ng kt ni. Cu hnh ty thuc vo web server v database server. M v ng kt ni c cch tip cn c bit.a M v ng kt ni. Sau khi cu hnh connection poolean (chng ta s tho lun trong phn sau), bn c th s dng JNDI truy cp mt connection.public class MyWindows extends Window{

private Textbox name, email;

public void onCreate() {

name = (Textbox) getFellow("name");

email = (Textbox) getFellow("email");

}

public void onOK() throws Exception {

DataSource ds = (DataSource)new InitialContext()

.lookup("java:comp/env/jdbc/MyDB");

Connection conn = null;

PreparedStatement stmt = null;

System.out.println("Step 1");

try {

conn = ds.getConnection();

stmt = conn.prepareStatement("INSERT INTO user values(?, ?)");

stmt.setString(1, name.getValue());

stmt.setString(2, email.getValue());

stmt.executeUpdate();

stmt.close();

stmt = null;

System.out.println("Step 2");

} finally { //cleanup

if (stmt != null) {

try {

stmt.close();

} catch (SQLException ex) {

}

}

if (conn != null) {

try {

conn.close();

System.out.println("Step 3");

} catch (SQLException ex) {

}

}

}

}}

on code trn rt quan trng cho vic ng connection v statement sau khi s dng. N c th truy cp nhiu c s d liu trong cng mt thi im. Ph thuc vo cu hnh v J2EE/Server.b Cu hnh Connection pooling: Tomcat5.5 + MySQL.

Copy on sau vo th trong $TOMCAT_DIR/conf/context.xml

Trong web.xml thm vo phn t on sau:

jdbc/MyDB

javax.sql.DataSource

Container

3. Nhng tnh nng ng dng cho vic truy cp database.a com.potix.zk.ui.event.EventThreadCleanup Interface Nh chng ti nhn mnh s cn thit ca vic ng mt connection trong mnh finally, v mi connection u tr v mt connection pool. V cho ng dng ca bn trn tru hn, bn c th implements com.potix.zk.ui.event.EventThreadCleanup, mi pending connection v statements u c ng mt cch t ng. Tuy nhin, vic ng mt pending connections hay statements cn ph thuc vo server m bn dng. Bn cn tham kho document ca server cch thc hin.b Truy cp d liu trong EL Expressions.

import data.CustomerManager;

customers = newCustomerManager().findAll(); //load from database

c c d liu v copy sang LinkedListpublic class CustomerManager {

public List findAll() throws Exception {

DataSource ds = (DataSource)new InitialContext()

.lookup("java:/comp/env/jdbc/MyDB");

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

List results = new LinkedList();

try {

conn = ds.getConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT name, surname FROM customers");

while (rs.next()) {

long id = rs.getInt("id");

String name = rs.getString("name");

String surname = rs.getString("surname");

results.add(new Customer(id, name, surname));

}

return results;

} finally {

if (rs != null) try { rs.close(); } catch (SQLException ex){ }

if (stmt != null) try { stmt.close(); } catch (SQLException ex){ }

if (conn != null) try { conn.close(); } catch (SQLException ex){ }

}

}}

d Implements com.potix.zk.util.Initiator

public class AllCustomerFinder implements Initiator {

public void doInit(Page page, Object[] args) {

try {

page.setVariable((String)args[0], new CustomerManager().findAll());// Use setVariable to pass the result back to the page

} catch (Exception ex) {

throw UiException.Aide.wrap(ex);

}

}

public void doCatch(Throwable ex) { //ignore

}

public void doFinally() { //ignore

}}

X. PHN 2 : QUARTZ FRAMEWORK V NG DNG

XI. Chng 1: GII THIU

Khi nim Job Scheduling.

Khi nim job trong cuc sng hng ngy l khi bn thc thi mt hnh ng n khi hon tt v thu li kt qu.

Nhng khng phi mi vic u yu cu thc hin ngay lp tc, m n cn thc hin vo mt khong thi gian no trong tng lai. V d bn cn thc hin mt s vic sau trong mi m:

10:00 PM: Chy chng trnh upload

11:00 PM: Chy bo co d liu bn trong ngy

11:59 PM: Sao lu c s d liu

Lch cng vic c th vo mt thi im ch thc hin mt hnh ng hoc nhiu hnh ng. Nu bn ch thc hin mt hnh ng th vic x l tht n gin v khng nh hng nhiu n mi quan h ca user. S lng cng vic ln ln theo tng ngy, v nhng t chc ln hn khng thng chy hng trm chng trnh mi gi ca mi ngy. Khi kch thc v s phc tp ca nhng t chc tip tc pht trin, nhu cu cho chng trnh lp lch ng b l v cng quan trng.S cn thit ca Job Scheduling

Thi gian l tin bc, ginh ht ti nguyn cho mt nhim v l lng ph tin v nhn lc. Khi s phc tp ca qu trnh x l kinh doanh gia tng, t ng x l l iu rt c li cho ngi s dng.

S hnh thnh Quartz Framework

Ngy nay, nhiu ngun d n m khc nhau c s dng. V Quartz c bt u bng mt gii php n gin cho mt c nhn. Vi s pht trin ca m ngun m v tnh m rng thng xuyn, Quartz tr thnh mt framework chung c nhiu ngi s dng gip gii quyt nhiu vn ln hn.

Ci t

Bn c th ti Quartz trn da ch sau www.opensymphony.com/quartz, y bn c th ly c version mi nht v cn thm vi version trc . Bn c th ti bao gm m ngun cng nh file trin khai .JAR.

File ti xung th nh dng ZIP, bn cn gii nn. Bn cng c th s dng lnh jar ca Java m kha file :

jar -xvf quartz-1.5.0-rc1.zipNhng ni dung ca Quartz c trch theo th mc hin hnh.

on trch file zip Quartz cha vi th mc con. Bng 1.1 m t nhng th mc l mt phn ca Quartz ti xung.

Bng 1.1. Cu trc v nhng ni dung ca th mc Quartz

Tn th mcNi dung

Docs

docs/apiJavadocs thay cho Quartz framework.

docs/dbTablesD liu scripts cho vic to d liu Quartz.

docs/wikidocsNhng ti liu lm bng chng cho Quartz (bt u vi index.html).

ExamplesNhng v d v s dng cc v b ngoi khc nhau ca framework.

LibTh vin th 3 c s dng bi framework.

src/java/org/quartzCode ngun cho client-side (chung) API ca ngi lp chng trnh.

src/java/org/quartz/coreCode ngun cho server (ring) API ca ngi lp chng trnh.

src/java/org/quartz/simplNhng thi hnh n gin c cung cp bng framework khng l thuc vo 3 phn sn phm.

src/java/org/quartz/implNhng thi hnh ca cc module h tr phi ph thuc vo 3 phn sn phm.

src/java/org/quartz/utilsThnh phn ngi gip v tnh hu dng c s dng sut framework.

src/jbossTnh nng Quartz l r rng s dng vi Jboss.

src/oracleTnh nng Quartz l r rng s dng vi Oracle.

src/weblogicTnh nng Quartz l r rng s dng vi WebLogic.

(i) Ci file JAR cn thit

Nu bn cn Quartz lm vic, hng nhanh nht l dng Quartz JAR, xc nh v tr trong th mc gc ti xung, v thm n vo lp ng dn trnh ng dng ca bn. Bn cng cn da vo nhng quy nh ca JARs. Bng 1.2 danh sch file JAR cn cho vic ci mt Quartz c bn.

Bng 1.2. JARs cn thit hin thc mt Quartz c bn

TnV trCh

Commons BeanUtils/ lib/optionalPh thuc vo nh th no khi bn s dng Quartz. iu th tt hn k c n.

Commons Collections/ lib/corYes.

Commons Digester/ lib/optionalPh thuc vo nh th no khi bn s dng Quartz. iu th tt hn k c n.

Commons Logging/ lib/core

Vi Quartz JAR, bn cn phi t s ph thuc JARs vo lp ng dn cho ng dng ca bn.

XII. Chng 2: LCH LM VIC

Tng quan. The Quartz Scheduler

Quartz framework bao gm nhiu class cha trong 11 packages.

Chng ti s cung cp nhng kin thc tng quan trong framework gip cc bn hiu hn v cch s dng.

S dng framework hu ht u thng qua Scheduler trong org.quartz.Scheduler Trong trng hp ny gi y nhim thng qua QuartzScheduler The Quartz Scheduler Hierarchy

Chng ta c th tng tc vi 2 kiu ca Scheduler l Std Scheduler v Remote Scheduler

Chng ta s tm hiu cch to mt th hin ca Scheduler:

The Quartz SchedulerFactory Factory design pattern c cp nh mt factory pattern v n chu trch nhim to ra mt Object. Trong trng hp ny l to ra mt Scheduler. Khi to ra mt th hin c lu trong org.quartz.impl.SchedulerRepository v cung cp chc nng lookup gia cc class loader. SchedulerFactory c hai kiu.

Using the DirectSchedulerFactory C 3 bc s dng DirectSchedulerFactory: To ra mt th hin ca Factory dng getInstance() To scheduler bng createXXX() Tm th hin ca Scheduler thng qua getScheduler() Goi createXXX() trc khi gi getScheduler() createXXX() dng cu hnh Scheduler s c to getScheduler() gi th hin Scheduler t factory.

Using the StdSchedulerFactory

org.quartz.impl.StdSchedulerFactory to Scheduler t nhiu thuc tnh. Chng ta c th khai bo theo mt trong ba cch sau: Khai bo trong java.util.Properties Khai bo trong mt file properties bn ngoi Khai bo trong mt java.io.InputStream c cha mt file properties. Using the Default quartz.properties File

Nu dng initialize() vi khng tham s, StdSchedulerFactory thi hnh theo cc bc sau load mt file properties cho Factory Kim tra mt filename khc s dng. System.getProperty("org.quartz.properties"); Khng thi hnh mt file quartz.properties load Th load mt file trong folder hin hnh Th load mt file trong system classpath(cch ny thng thi hnh thnh cng v quartz.properties lun nm trong quartz.jar) Scheduler Functionality

C hn 65 phng thc, nhng chng ta cn hiu mt s chc nng c bn

Qun l Scheduler

Qun l Jobs

Qun l triggers v calendars

Qun l Scheduler

n gin bn ch cn gi scheduler.start();

Ch rng bn ch nn gi start() khi bn c mt th hin mi ca Scheduler, hoc bn c mt Scheduler ang trng thi standby. Khi shutdown() bn khng th start(). Standby mode

Ly thng tin jobs trong c s d liu, trong trng hp bn cn restart c s d liu. Bn c th restart li scheduler sau khi c s d liu restart xong, hoc chn cch t scheduler trong standby mode

n gin ch cn gi standby(). Stopping the Scheduler

C hai cch:

Cch 1:

public void shutdown(boolean waitForJobsToComplete)

throws SchedulerException; Cch 2:

public void shutdown() throws SchedulerException; (shutdown(false))

Qun l Jobs

Quartz Job l g ?: n gin ch l mt java class khai khai bo mt cng vic ca bn v d: Dng javaMail gi mt email

Gi mt phng thc trong EJB

Dng httpClient gi mt URL cho web application

Ly mt hibernate session truy vn c s d liu

Dng OSWorkFlow v gi mt WorkFlow t job The org.quartz.Job Interface

JobExecutionContext l mt object cung cp cho job mi trng lm vic trn Quartz v chi tit cng vic. Tng t nh java web application vi servlet context: khi scheduler gi mt job JobExecutionContext c gn cho execute(). JobExecutionContext: l mt i tng gip job truy vn n mi trng Quartz ca job nh: JobDetail v trigger c khai bo cng vi Scheduler ca Job. Setting Job State Using the JobDataMap Object: bn cng c th khai bo trng thi mt job bng cch khai bo trong org.quartz.JobDataMap. V d:public class Listing_4_6 {

static Log logger = LogFactory.getLog(Listing_4_6.class);

public static void main(String[] args) {

Listing_4_6 example = new Listing_4_6();

example.runScheduler();

}

public void runScheduler() {

Scheduler scheduler = null;

try {

// Create a default instance of the Scheduler

scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

logger.info("Scheduler was started at " + new Date());

// Create the JobDetail

JobDetail jobDetail =

new JobDetail("PrintJobDataMapJob",

Scheduler.DEFAULT_GROUP,

PrintJobDataMapJob.class);

// Store some state for the Job

jobDetail.getJobDataMap().put("name", "John Doe");

jobDetail.getJobDataMap().put("age", 23);

jobDetail.getJobDataMap().put("balance",

new BigDecimal(1200.37));

// Create a trigger that fires once

Trigger trigger =

TriggerUtils.makeImmediateTrigger(0, 10000);

trigger.setName("PrintJobDataMapJobTrigger");

scheduler.scheduleJob(jobDetail, trigger);

} catch (SchedulerException ex) {

logger.error(ex);

}

}

}

Stateful V Stateless Jobs:

Dng Stateful Jobs: mt stateful jobs l mt job implements org.quartz.StatefulJob. C hai im khc nhau gia job v StatefulJob. u tin l nhng th bn thay i c gi li cho n ln chy tip theo. Th hai l bn c th c nhiu stateful JobDetail instances chy trn cng mt thi im. Volatility, Durability, and Recoverability

Job Volatility: d thay i

Job Durability: l mt job s khng b remove khi n b m ci.

Job Recoverability: l mt job s chy li khi Scheduler restart. Removing Jobs from the Scheduler: dng deleteJob() Interrupting Jobs: thnh thong bn cn ngt mt job, c bit l khi n mt qu nhiu thi gian thi hnh. Quartz c mt interface org.quartz.InterruptableJob v c ci thm phng thc interrupt(). Quartz Triggers

Using the org.quartz.CronTrigger thay th cho nhiu SimpleTrigger. V d bn c mt job chy sau mi 5 pht trong khang thi gian t 10 11 gi, t th 2 n th 6. Bn s phi rt kh s nu ci bng SimpleTrigger, nhng bn c th lm nh sau vi CronTrigger

CronTrigger cTrigger = new CronTrigger("myTrigger",

Scheduler.DEFAULT_GROUP, "0 0/5 8 ? * MON,FRI"); S dng org.quartz.NthIncludedDayTrigger: khi bn cn khai bo mt job chy vo ngy no trong thng. V d vo ngy 15 th ta lm nh sau:

NthIncludedDayTrigger trigger = new NthIncludedDayTrigger(

"MyTrigger", Scheduler.DEFAULT_GROUP);

trigger.setN(15);

trigger.setIntervalType(

NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY);

S dng Multiple Triggers cho mt Job Quartz Calendar

org.quartz.Calendar Interface S dng Quartz Calendars.Cron Triggers

Trong chng trc chng ta tri qua nhiu thi gian cho Quartz CronTrigger. SimpleTriggers c p dng tt cho nhng cng vic m cn thc thi ti mt thi im ch nh sn, nhng nhng cng vic yu cu hoch nh mt cch phc tp hn, bn cn kh nng v s linh ng m CronTriggers a ra.

1. Quick Lession in Cron

tng ca Cron n t th gii ca UNIX. Trong UNIX, cron l mt trnh tin ch chy nn v l nguyn nhn ca tt c cc s kin lin quan n thi gian. Mc d Quartz khng chia s g vi cron UNIX ngoi tn v biu thc c php quen thuc, gi tr ca n ch hai on vn hiu lch s cron. Mc ch ca chng ta y l khng chi b biu thc cron UNIX v cron Quartz, nhng chng ta nn hiu lch s pha sau biu thc Quartz v khm ph xem ti sao chng li nh th. l mt cch gii quyt tt ca tt c s trng lp c ch .

i. 2. S khc bit ca nhng phin bn Cron UnixBn s tm thy s khc bit gia cc phin bn ca Cron, mi phin bn c nhng khc bit c trng.

Trnh tin ch cron Unix s c nh thc mi pht v xem xt nhng file cu hnh, m c gi l crontabs (vit tt ca CRON TABLE, l danh sch cc cng vic v tp lnh dnh cho trnh nn cron). Trnh tin ch kim tra tp lnh c lu tr trong crontabs v xc nh xem khi no cng vic cn c thc thi.

j. 3. nh dng Cron Unix:

Bn c th ngh crontab UNIX nh l s kt hp ca triggers v jobs bi v chng ghi nhn c lch thc thi v tp lnh ca cng vic.

k. 4. nh dng biu thc ca Cron:

Phn nh dng ca Crontab bao gm 6 trng: 5 trng cho vic lp lch (schedule) v trng th 6 cho tp lnh thc thi.

Minute(0059)

Hour(0023)

Day(131)

Month(112)

Weekay (06 hay sunsat)

nh dng cron Unix cho php vi k t c bit trong biu thc cron, nh k t (*), dng thay th cho tt c cc gi tr. y l mt v d cho crontabs Unix:0 8 * * * echo "WAKE UP" 2>$1 /dev/console

Crontab ny ghi nhn vic in chui WAKE UP n thit b /dev/console ca Unix mi sng lc 8 AM.S dng Quartz CronTrigger

Trong th gii thc, vic xp lch cho cng vic th phc tp hn SimpleTriggers s h tr. CronTriggers c th c dng ch r nhng vic lp lch phc tp. Trc khi chng ta i vo chi tit ci g to nn CronTrigger (cng vi biu thc Cron Quartz) xp lch PrintInfoJob t v d trc. iu quan trng nht l on code ny tng t nh v d t bi trc. S khc bit duy nht l chng ta s dng CronTrigger thay v dng SimpleTrigger. Bi v l m ta cung cp cho n biu thc cron.V d dng CronTrigger xp lch cho cng vic.

public class Listing_5_1 {

static Log logger = LogFactory.getLog(Listing_5_1.class); public static void main(String[] args) {

Listing_5_1 example = new Listing_5_1();

example.runScheduler();

}

public void runScheduler() {

Scheduler scheduler = null;

try {

// Create a default instance of the Scheduler

scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

logger.info("Scheduler was started at " + new Date());

// Create the JobDetail

JobDetail jobDetail =

new JobDetail("PrintInfoJob",

Scheduler.DEFAULT_GROUP,

PrintInfoJob.class);

// Create a CronTrigger

try {

// CronTrigger that fires @7:30am Mon - Fri

CronTrigger trigger = new

CronTrigger("CronTrigger", null,

"0 30 7 ? * MON-FRI");

scheduler.scheduleJob(jobDetail, trigger);

} catch (ParseException ex) {

logger.error("Error parsing cron expr", ex);

}

} catch (SchedulerException ex) {

logger.error(ex);

}

}

}

S dng biu thc cron sau:0 30 7 ? * MON-FRI

Sau khi c bin dch bi b lp lch Scheduler, iu ny dn n trigger bt u lc 7:30 AM t th hai n th su. Hy nhn nh dng ca biu thc cron cho Quartz CronTriggers.

5. nh dng ca biu thc Cron:

nh dng ca biu thc Quartz Cron th rt ging vi nh dng ca Cron UNIX, vi mt vi s khc bit rt r rng. iu khc bit u tin l nh dng Quartz cung cp cho vic lp lch n second, trong khi nh dng Cron UNIX h tr cho lp lch n minutes, v th y l s khc bit r rng nht.

Vi Cron UNIX, cng vic (hay lnh) c thc thi lu tr cng biu thc cron trng th 6. CronTrigger tham chiu n biu thc cron, c ch nh mt cng vic ti mt thi im lp lch.

Mt s khc bit na gia nh dng biu thc cron UNIX v Quartz l s trng h tr trong biu thc. Trong khi UNIX a ra 5 trng (minute,hour,day,month v dayofweek), Quartz a ra 7 trng m biu thc cron Quartz h tr.

Bng 5.1 Biu thc Cron Quartz h tr ln n 7 trng.

Name

Required

Allowed Values

Special Characters

Seconds

Yes

059

, - * /

Minutes

Yes

059

, - * /

Hours

Yes

23

, - * /

Day of Month

Yes

131

, - * ? / L W C

Month

Yes

112 or JAN-DEC

, - * /

Day of Week

Yes

17 or SUN-SAT

, - * ? / L C #

Year

No

Blank or 19702099

, - * /

Cc trng c tch bit nhau bng mt khong trng, ging nh nh dng ca Cron UNIX. Chng t biu thc n gin nht c th vit:

* * * ? * *

Biu thc ny s bt u vic lp lch mi giy, mi pht, mi gi, mi ngy.

6. Hiu cc k t c bit:

Nh cron UNIX, biu thc cron Quartz h tr nhng k t c bit m c dng to ra cc vic lp lch phc tp hn.

K t du hoa th:(*)

S dng du hoa th (*) trong trng ch bo bn cn tt c thng tin lin quan cho cc gi tr hp l cho trng.VD: s dng k t trong mt thng gi tr trung bnh trigger s fire cho mi thng: V d biu thc sau: 0 * 17 * * ?Ngha l:Trigger fire mi pht, mi ngy bt u t 5 PM n 5:59 PM.

N s ngng ti 5:59 PM bi v gi tr 17 nm trong trng gi, ti 6 PM, gi tr thnh 18 v ngy k tip ca Trigger vn l ti 5 PM.

S dng k t (*) khi bn cn trigger fire hp l cho mi gi tr trong trng.K t chm hi(?)Du cu hi(?), k t c th c dng ch trong trng dayofmonh and dayofweek, nhng khng ng thi ti mt thi im. Bn c th ngh rng k t (?) nh l ti khng chc gi tr no trong trng ny. iu ny th khc bit so vi du hoa th(*), ch ch nh mi gi tr cho mi trng. K t (?) khng c gi tr r rng cho trng ny.

L do mt gi tr khng c ch nh r rng l kh c th gii thch v ch cho ngi gii thch hiu n m thi. n gin, nu mt gi tr c ch nh r, ngha ca n c th tr thnh m h.V d: 0 10,44 14 ? 3 WED

Vi ngha rng: khi chy lc 2:10 PM v 2:44 mi th 4 ca thng 3.

K t (,):

Du phy (,) k t dng ch nh mt danh sch cc gi tr cng thm vo mt trng ch nh.

V d: S dng gi tr 0,15,30,45 trong trng second c ngha rng khi chy trigger mi 15 giy.

V d biu thc: 0 0,15,30,45 * * * ?C ngha rng khi chy trigger mi 1/4 gi.K t (/):

K t (/) dng ch nh lp lch tng dn. Chng ta dng du phy (,) ch nh sau mi 15 pht, nhng ta cng c th dng 0/15V d: 0/15 0/30 * * * ?iu ny c ngha rng: khi chy trigger sau mi 15 giy v 1/2 gi.

Bn khng th ch nh khong tng vt qu khong gii hn ca trng.

V d: Khng th ch nh 30/20 trong trng second v mong i b lp lch s khi chy chnh xc c.K t (-)

K t du ni (-) th c dng ch nh mt khong no .

V d: 3-8 trong trng hour, c ngha l gi 3,4,5,6,7,8.

V d: 0 45 3-8 ? * *C ngha rng khi chy trigger sau 45 pht k t 3-8 gi AM.K t (L):

K t: (L) dng biu din gi tr cho php cui cng ca mt trng. N c h tr cho cc trng dayofmonth v dayofweek.

Khi s dng trng dayofmonth, n biu din ngy cui cng ca thng cho gi tr thng ch nh sn trong trng thng.

V d: khi trng thng c ch nh JAN, s dng k t (L) trong trng dayofmonth s dn n trigger c khi chy vo ngy 31 thng 1. Nu SEP c ch nh trong trng thng v dng k t (L) th trigger s c khi chy vo ngy 30 thng 12.

Biu thc: 0 0 8 L * ? c ngha rng trigger s khi chy lc 8:00 AM vo ngy cui cng ca mi thng.

Khi k t (L) dng trong trng dayofweek , n ch nh rng ngy cui cng ca tun.

Khi s dng trong trng dayofweek, bn c th s dng s kt hp vi k t (L) biu din cui ngy ca mi thng.

V d: 0 0 12 ? * 2L ni rng khi chy trigger vo cui th 2 mi thng.K t (W):

K t (W) thay th cho weekday v ch c th dng trong trng dayofmonth. N dng ch nh weekday m gn ngy cho trc nht. Tt c cc tin trnh kinh doanh lm vic da trn tun, v th k t (W) c th rt quan trng.

V d: gi tr 15W trong trng dayofmonth c ngha rng ngy trong tun gn nht ngy 15 ca thng. Nu ngy 15 l th 7 th trigger s khi chy vo th 6 ngy 14 v n l ngy gn 15 hn th 2.

K t (W) ch c th dng ch nh ngy duy nht ca thng, khng dng khong hay danh sch ngy.K t (#)

K t (#) ch c dng trong trng dayofweek. N c dng ch nh ngy th n ca thng

V d: nu ch nh gi tr 6#3 trong trng dayofweek, c ngha rng th 6 ln th III trong thng, hay 2#1 th 2 u tin trong thng.

S dng ngy bt u v ngy kt thc trong CronTrigger:

Biu thc cron c dng xc nh ngy-gi m trigger s khi chy v thc thi cc cng vic. Khi to ra mt th hin ca CronTrigger, nu khng a ra thi gian bt u, trigger s gi nh rng n c th bt u khi chy theo ngy gi hin hnh da trn biu thc Cron. V d nu bn s dng biu thc:0 * 14-20 * * ?

Trigger s khi chy mi pht t 2 n 7:59 PM mi ngy. Ngay khi bn chy CronTrigger cho biu thc, nu lc sau 2 gi PM, th n cng bt u khi chy theo, n c lm khng gii hn mi ngy.

Mt cch qun l khc, nu bn mun vic lp lch ny khng bt u cho n ngy k tip v tip tc ch sau 2 ngy.

V d: C th s dng startTime v endTime vi CronTrigger

public class Listing_5_2 {

static Log logger = LogFactory.getLog(Listing_5_2.class);

public static void main(String[] args) {

Listing_5_2 example = new Listing_5_2();

example.runScheduler();

}

public void runScheduler() {

Scheduler scheduler = null;

try {

// Create a default instance of the Scheduler

scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

logger.info("Scheduler was started at " + new Date());

// Create the JobDetail

JobDetail jobDetail = new JobDetail("PrintInfoJob",

Scheduler.DEFAULT_GROUP,

PrintInfoJob.class);

// Create a CronTrigger

try {

// cron that fires every min from 2 8pm

CronTrigger trigger =

New CronTrigger("MyTrigger", null,

"0 * 14-20 * * ?");

Calendar cal = Calendar.getInstance();

// Set the date to 1 day from now

cal.add(Calendar.DATE, 1);

trigger.setStartTime(cal.getTime());

// Move ahead 2 days to set the end time

cal.add(Calendar.DATE, 2);

trigger.setEndTime(cal.getTime());

scheduler.scheduleJob(jobDetail, trigger);

} catch (ParseException ex) {

logger.error("Couldn't parse cron expr", ex);

}

} catch (SchedulerException ex) {

logger.error(ex);

}

}

}

V d: S dng java.util.Calendar la chn thi gian bt u v kt thc ca trigger. Trong trng hp v d ny, trigger s khi chy sau ngy n c lp lch v s kt thc sau khi n khi chy c hai ngy.

S dng thuc tnh startTime v endTime ca CronTrigger nh th dng cho SimpleTriggers.

S dng TriggerUtils vi CronTrigger

TriggerUtils nm trong gi org.quartz, d dng cho vic khi to trigger c hai loi. Khi c th hy s dng cc phng thc trong lp triggerUtils to trigger.

V d: nu cn thc thi mt cng vic mi ngy lc 5:30 PM, hy s dng on code sau:

try {

// A CronTrigger that fires @ 5:30PM

CronTrigger trigger =

new CronTrigger("CronTrigger", null, "0 30 17 ? * *");

} catch (ParseException ex) {

logger.error("Couldn't parse cron expression", ex);

}Or you could use the triggerUtils like this:

// A CronTrigger that fires @ 5:30PM

Trigger trigger = TriggerUtils.makeDailyTrigger(17, 30);

trigger.setName("CronTrigger");

TriggerUtils, d dng v thun tin hn s dng triggers, m khng tng qu nhiu s phc tp.

S dng CronTriggers trong JobIntializationPlugin ch nh thng tin ca cng vic. JobIntializationPlugin c th dng load thng tin ca cng vic t file XML.

Vi SimpleTrigger, bn c th ch nh biu thc trong file XML v b lp lch Quartz Scheduler s s dng thng tin ny lp lch cho cng vic. N s rt thun tin nu ta mun cp pht thng tin bn ngoi cho code ng dng. on code sau th hin file quartz_jobs.xml dng JobIntializationPlugin load thng tin cho cng vic.V d: CronTrigger c th ch nh trong mt file XML v c load ln vi JobIntializationPlugin:

PrintInfoJob

DEFAULT

A job that prints out some basic information.

org.cavaness.quartzbook.common.PrintInfoJob

printJobInfoTrigger

DEFAULT

PrintInfoJob

DEFAULT

0 30 7 ? * MON-FRI

To mt Fire-Now Trigger:

Thnh thong ta cn thc thi ngay lp tc mt cng vic.

V d: Hy tng tng rng bn cn xy dng GUI cho php ngi dng thc thi cng vic ngay tc th. Mt v d khc, bn c th pht hin ra rng cng vic khng th hon tt thnh cng c v bn mun chy li ngay lp tc cng vic . Trong Mt vi v d trc phng thc c cng thm vo lp triggerUtils cho php thc hin iu d dng, v th hin lm th no lp lch cng vic ch chy mt ln, ngay tc khc th

V d sau: c th dng triggerUtils thc thi mt cng vic ngay lp tc.

public class Listing_5_4 {

static Log logger = LogFactory.getLog(Listing_5_4.class); public static void main(String[] args) {

Listing_5_4 example = new Listing_5_4();

example.runScheduler();

}

public void runScheduler() {

Scheduler scheduler = null;

try {

// Create a default instance of the Scheduler

scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

logger.info("Scheduler was started at " + new Date());

// Create the JobDetail

JobDetail jobDetail =

new JobDetail("PrintInfoJob",

Scheduler.DEFAULT_GROUP,

PrintInfoJob.class);

// Create a trigger that fires once right away

Trigger trigger =

TriggerUtils.makeImmediateTrigger(0, 0);

trigger.setName("FireOnceNowTrigger");

scheduler.scheduleJob(jobDetail, trigger);

} catch (SchedulerException ex) {

logger.error(ex);

}

}

}

Phng thc makeImmediateTrigger() ca triggerUtils c dng thc thi mt cng vic ngay tc khc. Tham s u tin l s ln m trigger s khi chy. Tham s th hai l khong cch gia cc ln thc thi:public static Trigger

makeImmediateTrigger(int repeatCount, long repeatInterval);

Lp triggerUtil a ra nhiu phng thc rt tin li cho vic n gin ha vic s dng trigger.

XIII. Chng 3 : JOBSTORES V PERSISTENCE

1. Job Stores1.1. Lu tr JobTrong cc chng trc, chng ta khng cp n vic lu tr job v thng tin trigger thay cho Scheduler c lu tr. Trn thc t, tt c thng tin v vic chy jobs u b ph hy.

1.2. Lu tr Job trong QuartzQuartz h tr vi kiu c ch lu tr khc nhau cho thng tin Sheduler. Hai loi lu tr ca Job th c sn trong Quartz.

Lu tr trong b nh m.

Lu tr trn thit b lu tr

Theo mc nh, nn s dng c ch th nht. C hai kiu c thit k phc v cng mc ch: lu tr thng tin job.

Interface JobStoreQuartz cung cp mt interface cho tt c cc kiu ca job lu tr. Interface c t trong v tr gi org.quartz.spi c gi l JobStore.Interface JobStore c rt nhiu phng thc, nhng API thay cho interface JobStore c th suy rng thnh cc loi sau:

Job-lin quan API

Trigger-lin quan API

Calendar-lin quan API

Scheduler-lin quan API

Ngi s dng Quartz hu ht khng truy cp n nhng lp c th m thc hin trn interface JobStore. Chng s dng bn trong bi Quartz Scheduler ly li job v thng tin trigger trong thi gian thc hin. l vic lm quan trng, tuy nhin, vi mi kiu u c nhng iu kin thun li da trn li ch cho ng dng Quartz ca bn.

1.3. Lu tr Scheduler trn MemoryQuartz th c nh cu hnh lu tr job v thng tin trigger trong b nh. Khi Java Virtual Machine (JVM) b tm dng, b nh ca n c gii thot trc khi h thng m, v bt c thng tin v jobs v triggers cng b mt cng vi n.

B nh lu tr job gip cho Quartz c cung cp bng cch gi lp org.quartz.simpl.RAMJobStore hin thc interface JobStore. RAMJobStore l gii php lu tr Quartz. Bng cch ny, chng ta c th thay i cu hnh thch hp, v vy m JobStore c s dng trong nhiu ng dng Quartz.

RAMJobStore l mt JobStore d nh cu hnh. Khi bn ti xung v ci Quartz, n c nh cu hnh s dng RAMJobStore theo ch lu tr.

Listing 3.1.3. Mc nh file quartz.properties khi file khc khng c nh cu hnh.

# Default Properties file for use by StdSchedulerFactory

# to create a Quartz Scheduler Instance, if a different

# properties file is not explicitly specified.

org.quartz.scheduler.instanceName = DefaultQuartzScheduler

org.quartz.scheduler.rmi.export = false

org.quartz.scheduler.rmi.proxy = false

org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

Khi bn khng s dng file quartz.properties m bn t to ra trong ng dng, l file m c ly s dng. Bn thay i RAMJobStore bng mt API m bn t xy dng. Trong trng hp thuc tnh org.quartz.jobstore.class khng c thit lp trong quartz.properties, th RAMJobStore vn c s dng.

Li th khc s dng RAMJobStore l tc ca n. V tt c thng tin Scheduler c lu tr trong b nh my tnh, nn truy cp d liu nhanh.Job khng kin nh vi RAMJobStoreTrong cc chng trc ta bit, jobs c th nh cu hnh vi thuc tnh d thay i. Khi thuc tnh d thay i c t false, th job s c tn ti gia ng dng shutdowns. iu ny khng ng khi RAMJobStore c s dng. Hnh ng r rng ginh trc cho JobStores bn b.

nh cu hnh RAMJobStorenh cu hnh ng dng Quartz, s dng RAMJobStore th v cng d dng. Nu bn s dng file quartz.properties ty thch, khng phi mt file Quartz JAR, thm dng ny ti file thuc tnh ca bn: org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

l tt c bn c s dng cho RAMJobStore.

Ti Jobs vo trong RAMJobStoreNu mc ch ca RAMJobStore l lu tr thng tin Scheduler, lm th no ly thng tin nhp vo b nh v tr u tin? Bn c th nhp thng tin job theo 2 cch: -u tin, bn c th hardcode cho jobs, triggers, calendars, v listeners ca bn vo trong chnh code . Nhng iu ny th lun lun nguy him lm v s duy tr c th khng cn khi gp s c. Khi thay i phi ph thuc vo code, nu thay i chy ng dng, code phi c sa i v bin tp li c th rt kh khn. Ch c th thc hin cho ng dng nh, nhng ng dng t quan trng, nhng iu ny c th tr thnh vn phc tp cho nhng con s ln hn ca jobs v triggers.

-Phng php th hai l s dng JobInitializationPlugin, bn c th tham kho thm trong chng Quartz Plug-ins. Quartz plug-in ny s dng file XML nhp jobs, triggers, calendars, v mi th khc m bn cn. Li th ca phng php ny l s thay i ph thuc vo file XML khng thay i code, khng bin tp li, nh trnh bin tp vn bn.

(ii) S bt li ca RAMJobStoreRAMJobStore khng phi l la chn duy nht. l s tht, chng ta cp n vi s thun li ca vic s dng RAMJobStore. V b nh my tnh khng kin nh, khi ng dng Quartz b dng, n gii thot b nh tr li h iu hnh.

Nu ng dng ph thuc thng tin Scheduler duy tr ng dng khi ng li, bn cn thi hnh xem tnh lin tc ca JobStore.1.4. S dng tnh lin tc ca JobStoresTrong nhiu phng php, JobStore s dng b nh cho vic lu tr v s dng vi form v s lin tc. iu ny khng ngc nhin bi v c hai chng p ng cng mc ch.

Cng vi RAMJobStore, tnh lin tc JobStore c c thun li v bt li, nn phi cn thn khi chn tnh lin tc JobStore. Phn ny gii thch s khc nhau v nhng trng hp bn nn s dng tnh lin tc JobStore.

Hin nay, Quartz cung cp hai loi tnh lin tc ca JobStores, nhng ch c mt c ch lin tc trong n.

Persistent JobStores = JDBC + C s d liu lin quan

Mc d vi c ch lin tc khc nhau c th vn s dng thng tin Scheduler cho Quartz, Quartz da vo h thng qun l c s d liu quan h v lu tr tnh lin tc. Nu bn mun s dng mt iu g khc vi c s d liu thay cho lu tr tnh lin tc, bn phi t xy dng n bng cch thi hnh JobStore interface. Gi s rng bn mun s dng file h thng thay cho lu tr lin tc. Bn c th to mt lp thi hnh JobStore interface. Trong chng ny, khi ni lin tc, chng ta c th ni v cch s dng JDBC a trng thi Scheduler vo trong c s d liu.

Lp JobStoreSupportLp JobStoreSupport l lp abstract v thi hnh JobStore interface, c tho lun u chng ny. N cung cp chc nng c bn cho tt c JDBC-based JobStores. Figure 3.1.4 cho thy kiu h ng cp v JobStores.

Figure 3.1.4. Kiu h ng cp JobStore

Figure 3.1.4 minh ha, JobStoreSupport thi hnh JobStore interface v hot ng nh mt lp c bn cho hai JobStores lin tc c th m Quartz cung cp.

JobStoreSupport cn phi c t tn JDBCJobStoreSupportTt hn tn lp ny c t l JDBCJobStoreSupport v lp ny th c trng c thit k lm vic vi gii php lu tr JDBC-based. Tuy nhin, tn khng lm gim gi tr t chc nng m n cung cp v JobStores lin tc.

V lp JobStoreSupport l abstract, Quartz cung cp hai kiu JobStores lin tc khc nhau, mi thit k cho mt mi trng c s d liu v cu hnh ring bit:

org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.impl.jdbcjobstore.JobStoreCMTBy gi, hy ni v c s d liu c yu cu cho c hai version.1.5. Lu tr Job trong c s d liuPersistent JobStores trong Quartz c chuyn ti JDBCJobStores v chng ph thuc vo b phn iu khin JDBC ni vi c s d liu quan h. Persistent JobStores s dng nhiu tnh nng ca JDBC, bao gm h tr v nhng cch gii quyt, cch kha, v nhng mc cch ly.iu g s xy ra nu c s d liu cn khng h tr JDBC?

Nu c s d liu khng h tr JDBC, tt nhin s gp vn . Tt hn bn nn ra khi switching (s chuyn mch) ti nhng nn tng c s d liu c h tr. Nu c s d liu ca bn khng h tr JDBC, bn cn phi to mt s thi hnh mi b sung cho JobStores interface. Bn c th kim tra cc user trong din n user Quartz xem c ai lm cng vic v sn sng chia s code hoc t nht l tip cn.

(iii) Nhng c s d liu c h tr bi persistent JobStoresPersistent JobStores trong Quartz c thit k s dng nhng nn tng c s d liu nh sau:

Oracle

MySQL

MS SQL Server 2000

HSQLDB

PostgreSQL

DB2

Cloudscape/Derby

Pointbase

Informix

Firebird

a s nhng RDBMS khc cng vi JDBC-theo mnh lnh b phn iu khin.(iv) Persistent lu tr trong mi trng stand-alone

Lp JobStoreTX c thit k s dng trong mt mi trng stand-alone. iu ny khng c ngha rng bn khng th s dng JobStoreTX trong thi gian m n khng c thit k qun l giao dch ca n bng kho cha. S khc nhau c Quartz gii quyt da vo s thc hin ca kho cha.

(v) Persistent lu tr trong kho cha ng dngLp JobStoreCMT c thit k dng khi bn mun kho cha ng dng qun l s giao dch cho JobStore ca bn v nhng giao dch ny s tham gia trong khong thi gian c qun l bi kho cha. iu ny s r rng t "Container Managed Transactions (CMT)".

1.6. To CSDL cho QuartzJobStores c bn da trn JDBC yu cu d liu cho thng tin Scheduler tip tc tn ti. Quartz yu cu 12 bng c s d liu c to ra. Tn bng v m t c lit k trong Table 3.1.6.

Table 3.1.6. Quartz yu cu cho cc JDBC-persistent JobStores theo cc bng sauTable NameDescription

QRTZ_CALENDARSB d tr thng tin lch Quartz ging nhng blob.

QRTZ_CRON_TRIGGERSB d tr cron triggers, bao gm c biu thc cron v thng tin khu vc c chung mt gi chun.

QRTZ_FIRED_TRIGGERSB d tr thng tin trng thi lin kt ti nhng trigger m c fire v s thi hnh lin quan thng tin vi cng vic.

QRTZ_PAUSED_TRIGGER_GRPSB d tr nhng nhm trigger groups tm ngng.

QRTZ_SCHEDULER_STATECt gi mt vi mu thng tin v trng thi ca Scheduler v nhng trng hp Scheduler khc (nu s dng c trong phm vi mt nhm).

QRTZ_LOCKSCt gi kha thng tin pessimistic cho ng dng (nu kha pessimistic c s dng).

QRTZ_JOB_DETAILSCt gi thng tin nhiu chi tit cho mi nh cu hnh Job.

QRTZ_JOB_LISTENERSCt gi thng tin v nh cu hnh JobListeners.

QRTZ_SIMPLE_TRIGGERSCt gi nhng trigger n gin, bao gm lp li s m, ni b, v s ln khi ng.

QRTZ_BLOB_TRIGGERSNhng trigger ct gi nh nhng block (iu ny th c s dng khi Quartz user to trigger ty thch cho mnh vi kiu JDBC).

QRTZ_TRIGGER_LISTENERSCt gi thng tin v nh cu hnh triggerListeners

QRTZ_TRIGGERSCt gi thng tin v nh cu hnh nhng trigger.

Trong Table 3.1.6, tt c cc bng bt u vi tin t QRTZ_. iu ny c mc nh, nhng bn c th thay i bng cch cung cp mt tin t xen k trong file quartz.properties. Hay thay i tin t th cn thit nu bn s dng nhiu bng b tr cho nhiu trng hp Scheduler khc nhau. iu ny s l trng hp nu bn cn khng nhiu nhm ngi lp chng trnh nhng mun s dng mt th hin c s d liu n.

(vi) Ci nhng bng c s d liu Quartz

Quartz bao gm nhng tp lnh SQL h tr cho tt c cc nn tng d liu. Bn c th phi tm nhng tp lnh SQL trong th mc /docs/dbTables, ni .Khong 18 tp lnh nn tng c s d liu khc nhau l sn c dng. Nu d liu ca bn khng m khng c, bn c th sa i n thnh nn tng c s d liu cho bn.

ci t nhng bng c s d liu yu cu, m file .spl m c bit c thit k cho c s d liu v chy nhng lnh c u tin s dng truy vn tool. Vi MS SQL Server, v d, bn cn chy nhng lnh trong file tables_sqlServer.sql s dng Query Analyzer tool cng vi c s d liu. Chc chn vi c s d liu (bao gm MS SQL Server), cn to c s d liu trc khi chy nhng lnh. Nhng lnh SQL khng bao gm to c s d liu. Cn ch ti nhng ghi ch u file SQL v phi theo mt vi ch dn trc khi thi hnh lnh. V d, vi file SQL MS SQL Server, cn sa lnh u ca file vi tn c s d liu rng bn cn to:

USE [enter_db_name_here]

File SQL to bng cu trc cn thit v t vi rng buc c bn cng nhng ch mc trn cc bng. Trong chng ny, chng ta ni v cch lm th no bn c th ci thin s thi hnh bng cch thm nhng thay i cho cu trc.

1.7. S dng JobStoreTXMt JobStore khc vi RAMJobStore mc nh, bn phi cu hnh vi thuc tnh. Khng quan trng th t bn lm g chng, nhng tt c chng phi lm trc khi chy ng dng trong ln u tin.

t thuc tnh JobStore JobStoreTX s dng thng tin Sheduler, bn phi thm nhng dng sau y ti file quartz.properties :

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

chc chn b dng RAMJobStore (nu c mt) khi chuyn ti JobStoreTX.

nh cu hnh Driver Delegate

Cng theo hng m JDBC API da vo b phn iu khin JDBC c thit k, c bit cho nn tng c s d liu, Quartz da vo DriverDelegate truyn ti c s d liu. Vi tn hm , c s d liu gi t Sheduler ti JobStore giao ph trc khi nh cu hnh th hin DriverDelegate. i biu chu trch nhim cho tt c nhng phng tin lin lc vi b iu khin JDBC v, nh vy, c s d liu.

Tt c cc lp DriverDelegate m rng lp org.quartz.impl.jdbcjobstore.StdDriverDelegate. StdDriverDelegate c chc nng c bn m tt c nhng i biu, bt chp nn tng, c th dng. Tuy nhin, c s khc nhau gia nhng nn tng m 1 i biu chuyn dng cn to cho vi nn tng. Table 3.1.7.1 lit k nhng i biu chuyn dng.

Table 3.1.7.1. Bn phi nh cu hnh mt trong nhng lp DriverDelegates cho nn tng ca bn

Database PlatformQuartz Delegate Class

Cloudscape/DerbyOrg.quartz.impl.jdbcjobstore.CloudscapeDelegate

DB2 (version 6.x)Org.quartz.impl.jdbcjobstore.DB2v6Delegate

DB2 (version 7.x)Org.quartz.impl.jdbcjobstore.DB2v7Delegate

DB2 (version 8.x)Org.quartz.impl.jdbcjobstore.DB2v8Delegate

HSQLDBOrg.quartz.impl.jdbcjobstore.PostgreSQLDelegate

MS SQL ServerOrg.quartz.impl.jdbcjobstore.MSSQLDelegate

PointbaseOrg.quartz.impl.jdbcjobstore.PointbaseDelegate

PostgreSQLOrg.quartz.impl.jdbcjobstore.PostgreSQLDelegate

(WebLogic JDBC Driver)Org.quartz.impl.jdbcjobstore.WebLogicDelegate

(WebLogic 8.1 vi Oracle)org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate

OracleOrg.quartz.impl.jdbcjobstore.oracle.OracleDelegate

iu g s xy ra nu nn tng c s d liu ca ti khng c lit k trong Table 3.1.7.1?Nu RDBMS ca bn khng lit k y, th c mt c hi tt n s lm vic vi chun JDBC delegate, org.quartz.impl.jdbcjobstore.StdDriverDelegate.Sau khi xc nh delegate, bn cn thm vo nh sau ti file qua