Professional Documents
Culture Documents
com
Li gii thiu: Cng ngh Java cho cng nghip di ng (Java Technology Wireless Industry - JTWI) ngy cng pht trin v thu ht s quan tm ca nhiu ngi. Nhm p ng nhu cu ny, TinCNTT m chuyn mc J2ME Tutorial c gng cp y nhiu kha cnh ca cng ngh Java cho di ng. bt u lot bi, chng ta s cng kho st cc lp v khi nim quan trng ca J2ME.
Bi 1: Khi qut cc lp J2ME Mc tiu ca J2ME l cho php ngi lp trnh vit cc ng dng c lp vi thit b di ng, khng cn quan tm n phn cng tht s. t c mc tiu ny, J2ME c xy dng bng cc tng (layer) khc nhau giu i vic thc hin phn cng khi nh pht trin. Sau y l cc tng ca J2ME c xy dng trn CLDC:
Hnh 1. Cc tng ca CLDC J2ME Mi tng trn tng hardware l tng tru tng hn cung cp cho lp trnh vin nhiu giao din lp trnh ng dng (API-Application Program Interface) thn thin hn. T di ln trn: Tng phn cng thit b (Device Hardware Layer) y chnh l thit b di ng tht s vi cu hnh phn cng ca n v b nh v tc x l. D nhin tht ra n khng phi l mt phn ca J2ME nhng n l ni xut pht. Cc thit b di ng khc nhau c th c cc b vi x l khc nhau vi cc tp m lnh khc nhau. Mc tiu ca J2ME l cung cp mt chun cho tt c cc loi thit b di ng khc nhau. Tng my o Java (Java Virtual Machine Layer) Khi m ngun Java c bin dch n c chuyn i thnh m bytecode. M bytecode ny sau c chuyn thnh m ngn ng my ca thit b di ng. Tng my o Java bao gm KVM (K Virtual Machine) l b bin dch m bytecode c nhim v chuyn m bytecode ca chng trnh Java thnh ngn ng my chy trn thit b di ng. Tng ny cung cp mt s chun ha cho cc thit b di ng ng dng J2ME sau khi bin dch c th hot ng trn bt k thit b di ng no c J2ME KVM. Tng cu hnh (Configuration Layer) Tng cu hnh ca CLDC nh ngha giao din ngn ng Java (Java language interface) c bn cho php chng trnh Java chy trn thit b di ng. y l mt tp cc API nh ngha li ca ngn ng J2ME. Lp trnh vin c th s dng cc lp v phng thc ca cc API ny tuy nhin tp cc API hu dng hn c cha trong tng hin trng (profile layer). Tng hin trng (Profile Layer) Tng hin trng hay MIDP (Hin trng thit b thng tin di ng-Mobile Information
Device Profile) cung cp tp cc API hu dng hn cho lp trnh vin. Mc ch ca hin trng l xy dng trn lp cu hnh v cung cp nhiu th vin ng dng hn. MIDP nh ngha cc API ring bit cho thit b di ng. Cng c th c cc hin trng v cc API khc ngoi MIDP c dng cho ng dng. V d, c th c hin trng PDA nh ngha cc lp v phng thc hu dng cho vic to cc ng dng PDA (lch, s hn, s a ch,). Cng c th c mt hin trng nh ngha cc API cho vic to cc ng dng Bluetooth. Thc t, cc hin trng k trn v tp cc API ang c xy dng. Chun hin trng PDA l c t JSR - 75 v chun bluetooth API l c t JSR - 82 vi JSR l vit tt ca Java Specification Request. 1 My o Java (hay KVM) Vai tr ca my o Java hay KVM l dch m bytecode c sinh ra t chng trnh Java bin dch sang ngn ng my. Chnh KVM s chun ha output ca cc chng trnh Java cho cc thit b di ng khc nhau c th c b vi x l v tp lnh khc nhau. Khng c KVM, cc chng trnh Java phi c bin dch thnh tp lnh cho mi thit b di ng. Nh vy lp trnh vin phi xy dng nhiu ch cho mi loi thit b di ng. Hnh 2 y biu din tin trnh xy dng ng dng MIDlet hon chnh v vai tr ca KVM.
Hnh 2. Tin trnh xy dng MIDlet Qu trnh pht trin ng dng MIDlet vi IDE (Mi trng pht trin tch hpIntergrated Development Environment): Lp trnh vin: To cc tp tin ngun Java Bc u tin l lp trnh vin phi to m ngun Java, c th c nhiu tp tin (*.java). Trn IDE: B bin dch Java (Java Compiler): Bin dch m ngun thnh m bytecode B bin dch Java s bin dch m ngun thnh m bytecode. M bytecode ny s c KVM dch thnh m my. M bytecode bin dch s c lu trong cc tp tin *.class v s c mt tp tin *.class sinh ra cho mi lp Java. Trn IDE: B tin kim tra (Preverifier): Kim tra tnh hp l ca m bytecode Mt trong nhng yu cu an ton ca J2ME l bo m m bytecode chuyn cho KVM l hp l v khng truy xut cc lp hay b nh ngoi gii hn ca chng. Do
tt c cc lp u phi c tin kim tra trc khi chng c th c download v thit b di ng. Vic tin kim tra c xem l mt phn ca mi trng pht trin lm cho KVM c th c thu nh hn. B tin kim tra s gn nhn lp bng mt thuc tnh (attribute) c bit ch rng lp c tin kim tra. Thuc tnh ny tng thm khong 5% kch thc ca lp v s c kim tra bi b kim tra trn thit b di ng. Trn IDE: To tp tin JAR IDE s to mt tp tin JAR cha: * Tt c cc tp tin *.class * Cc hnh nh ca ng dng. Hin ti ch h tr tp tin *.png * Cc tp tin d liu c th c yu cu bi ng dng * Mt tp tin k khai (manifest.mf) cung cp m t v ng dng cho b qun l ng dng (application manager) trn thit b di ng. * Tp tin JAR c bn hoc c phn phi n ngi dng u cui Sau khi g ri v kim tra m lnh trn trnh gi lp (simulator), m lnh sn sng c kim tra trn in thoi di ng v sau c phn phi cho ngi dng. Ngi dng: Download ng dng v thit b di ng Ngi dng sau download tp tin JAR cha ng dng v thit b di ng. Trong hu ht cc in thoi di ng, c ba cch download ng dng: * Kt ni cp d liu t PC sang cng d liu ca in thoi di ng: Vic ny yu cu ngi dng phi c tp tin JAR tht s v phn mm truyn thng download ng dng sang thit b thng qua cp d liu. * Cng hng ngoi IR (Infra Red) Port: Vic ny yu cu ngi dng phi c tp tin JAR tht s v phn mm truyn thng download ng dng sang thit b thng qua cng hng ngoi. * OTA (Over the Air): S dng phng thc ny, ngi dng phi bit a ch URL ch n tp tin JAR Trn thit b di ng: B tin kim tra: Kim tra m bytecode B tin kim tra kim tra tt c cc lp u c mt thuc tnh hp l c thm vo bi b tin kim tra trn trm pht trin ng dng. Nu tin trnh tin kim tra tht bi th ng dng s khng c download v thit b di ng. B qun l ng dng: Lu tr chng trnh B qun l ng dng trn thit b di ng s lu tr chng trnh trn thit b di ng. B qun l ng dng cng iu khin trng thi ca ng dng trong thi gian thc thi v c th tm dng ng dng khi c cuc gi hoc tin nhn n. Ngi dng: Thc thi ng dng B qun l ng dng s chuyn ng dng cho KVM chy trn thit b di ng. KVM: Thc thi m bytecode khi chng trnh chy. KVM dch m bytecode sang ngn ng my ca thit b di ng chy. 2 Tng CLDC (Connected Limited Device Configuration)
Tng J2ME k trn tng KVM l CLDC hay Cu hnh thit b kt ni gii hn. Mc ch ca tng ny l cung cp mt tp ti thiu cc th vin cho php mt ng dng Java chy trn thit b di ng. N cung cp c s cho tng Hin trng, tng ny s cha nhiu API chuyn bit hn. Cc CLDC API c nh ngha vi s hp tc vi 18 cng ty l b phn ca JCP (Java Community Process). Nhm ny gip bo m rng cc API c nh ngha s hu dng v thit thc cho c nh pht trin ln nh sn xut thit b di ng. Cc c t ca JCP c gn cc s JSR (Java Specification Request). Quy nh CLDC phin bn 1.0 c gn s JSR - 30. 2.a CLDC Connected Limited Device Configuration Phm vi: nh ngha cc th vin ti thiu v cc API. nh ngha: * * * * * * Tng thch ngn ng JVM Cc th vin li I/O Mng Bo mt Quc t ha
Khng nh ngha: * * * * Chu k sng ng dng Giao din ngi dng Qun l s kin Giao din ng dng v ngi dng
Cc lp li Java c bn, input/output, mng, v bo mt c nh ngha trong CLDC. Cc API hu dng hn nh giao din ngi dng v qun l s kin c dnh cho hin trng MIDP. J2ME l mt phin bn thu nh ca J2SE, s dng t b nh hn n c th thch hp vi cc thit b di ng b gii hn b nh. Mc tiu ca J2ME l mt tp con 100% tng thch ca J2SE.
Hnh 3 biu din mi lin h gia J2SE v J2ME (CDC, v CLDC). 2.b S khc nhau gia J2ME v J2SE. Cc im khc nhau l do mt trong hai l do. Do lp Java b b i gim kch
thc ca J2ME hoc do lp b b bi v n nh hng n s an ton, bo mt ca thit b di ng hay ca cc ng dng khc trn thit b di ng (c th dn n pht trin virus). im khc bit chnh l khng c php ton s thc. Khng c JNI (JavaNative Interface Support) do bn khng th truy xut cc chng trnh khc c vit bng ngn ng ca thit b (nh C hay C++). Tuyn on (thread) c cho php nhng khng c cc nhm tuyn on (thread group) v cc daemon thread. CLDC nh ngha mt m hnh an ton, bo mt c thit k bo v thit b di ng, KVM, v cc ng dng khc khi cc m ph hoi. Hai b phn c nh ngha bi CLDC ny l b tin kim tra v m hnh sandbox.
Hnh 4 biu din cch m b tin kim tra v b kim tra lm vic vi nhau kim tra m chng trnh Java trc khi chuyn n cho KVM. Nh cp trc y, cc tp tin lp c gn nhn bng mt thuc tnh trn my trm ca nh pht trin. Thuc tnh ny sau c kim tra bi b tin kim tra trc khi m chng trnh c giao cho KVM hay b bin dch m bytecode. Mt b phn khc ca bo mt trong CLDC l m hnh sandbox.
Hnh 5 biu din khi nim m hnh sandbox Hnh trn cho thy ng dng J2ME t trong mt sandbox c ngha l n b gii hn
truy xut n ti nguyn ca thit b v khng c truy xut n My o Java hay b np chng trnh. ng dng c truy xut n cc API ca CLDC v MIDP. ng dng c truy xut ti nguyn ca thit b di ng (cc cng, m thanh, b rung, cc bo hiu,) ch khi nh sn xut in thoi di ng cung cp cc API tng ng. Tuy nhin, cc API ny khng phi l mt phn ca J2ME. Th h k tip ca CLDC l c t JSR - 139 v c gi l CLDC th h k tip (Next Generation). N s nhm n cc vn nh nng cao vic qun l li v c th php ton s thc. 3 MIDP (Mobile Information Device Profile) Tng J2ME cao nht l tng hin trng v mc ch ca n l nh ngha cc API cho cc thit b di ng. Mt thit b di ng c th h tr nhiu hin trng. Mt hin trng c th p t thm cc gii hn trn cc loi thit b di ng (nh nhiu b nh hn hay phn gii mn hnh cao hn). Hin trng l tp cc API hu dng hn cho cc ng dng c th. Lp trnh vin c th vit mt ng dng cho mt hin trng c th v khng cn quan tm n n chy trn thit b no. Hin ti hin trng c cng b l MIDP (Mobile Information Profile) vi c t JSR 37. C 22 cng ty l thnh vin ca nhm chuyn gia to ra chun MIDP. MIDP cung cp cc API cho php thay i trng thi chu k sng ng dng, ha (mc cao v mc thp), tuyn on, timer, lu tr bn vng (persistent storage), v mng. N khng nh ngha cch m ng dng c np trong thit b di ng. l trch nhim ca nh sn xut. N cng khng nh ngha bt k loi m hnh bo mt end-to-end no, vn cn thit cho ng dng kinh doanh nhn s th tn dng ca ngi dng. N cng khng bt buc nh sn xut cch m lp MIDP c thc hin.
Tng bc lp trnh cho in thoi di ng J2ME - Phn 2
Hnh 1. MIDlet Thng bo import dng truy xut cc lp ca CLDC v MIDP. Lp chnh ca ng dng c nh ngha l lp k tha lp MIDlet ca MIDP. C th ch c mt lp trong ng dng k tha lp ny. Lp MIDlet c trnh qun l ng dng trn in thoi di ng dng khi ng, dng, v tm dng MIDlet (v d, trong trng hp c cuc gi n). 1.1 B khung MIDlet (MIDlet Skeleton) Mt MIDlet l mt lp Java k tha (extend) ca lp tru tng java.microedition.midlet.MIDlet v thc thi (implement) cc phng thc startApp(), pauseApp(), v destroyApp().
Hnh 2 biu din b khung yu cu ti thiu cho mt ng dng MIDlet 1) Pht biu import
Cc pht biu import c dng include cc lp cn thit t cc th vin CLDC v MIDP. 2) Phn chnh ca MIDlet MIDlet c nh ngha nh mt lp k tha lp MIDlet. Trong v d ny MIDletExample l bt u ca ng dng. 3) Hm to (Constructor) Hm to ch c thc thi mt ln khi MIDlet c khi to ln u tin. Hm to s khng c gi li tr phi MIDlet thot v sau khi ng li. 4) startApp() Phng thc startApp() c gi bi b qun l ng dng khi MIDlet c khi to, v mi khi MIDlet tr v t trng thi tm dng. Ni chung, cc bin ton cc s c khi to li tr hm to bi v cc bin c gii phng trong hm pauseApp(). Nu khng th chng s khng c khi to li bi ng dng. 5) pauseApp() Phng thc pauseApp() c gi bi b qun l ng dng mi khi ng dng cn c tm dng (v d, trong trng hp c cuc gi hoc tin nhn n). Cch thch hp s dng pauseApp() l gii phng ti nguyn v cc bin dnh cho cc chc nng khc trong in thoi trong khi MIDlet c tm dng. Cn ch rng khi nhn cuc gi n h iu hnh trn in thoi di ng c th dng KVM thay v dng MIDlet. Vic ny khng c cp trong MIDP m l do nh sn xut quyt nh s chn cch no. 6) destroyApp() Phng thc destroyApp() c gi khi thot MIDlet. (v d khi nhn nt exit trong ng dng). N ch n thun l thot MIDlet. N khng tht s xa ng dng khi in thoi di ng. Phng thc destroyApp() ch nhn mt tham s Boolean. Nu tham s ny l true, MIDlet c tt v iu kin. Nu tham s l false, MIDlet c thm ty chn t chi thot bng cch nm ra mt ngoi l MIDletStateChangeException. Tm tt cc trng thi khc nhau ca MIDlet: To (Created) Hm to MIDletExample() c gi mt mt ln Hot ng (Active) Phng thc startApp() c gi khi chng trnh bt u hay sau khi tm dng Tm dng (Paused) Phng thc pauseApp() c gi. C th nhn cc s kin timer. Hy (Destroyed) Phng thc destroy() c gi. 1.2 Chu k sng ca MIDlet (MIDlet lifecycle)
Hnh 3 biu din chu k sng ca MIDlet Khi ngi dng yu cu khi ng ng dng MIDlet, b qun l ng dng s thc thi MIDlet (thng qua lp MIDlet). Khi ng dng thc thi, n s c xem l ang trng thi tm dng. B qun l ng dng gi hm to v hm startApp(). Hm startApp() c th c gi nhiu ln trong sut chu k sng ca ng dng. Hm destroyApp() ch c th gi t trng thi hot ng hay tm dng. Lp trnh vin cng c th iu khin trng thi ca MIDlet. Cc phng thc dng iu khin cc trng thi ca MIDlet: resumeRequest(): Yu cu vo ch hot ng V d: Khi MIDlet tm dng, v mt s kin timer xut hin. notifyPaused(): Cho bit MIDlet t nguyn chuyn sang trng thi tm dng V d: Khi i mt s kin timer. notifyDestroyed(): Sn sng hy V d: X l nt nhn Exit Lp trnh vin c th yu cu tm dng MIDlet trong khi i mt s kin timer ht hn. Trong trng hp ny, phng thc notifyPaused() s c dng yu cu b qun l ng dng chuyn ng dng sang trng thi tm dng. 1.3 Tp tin JAR Cc lp bin dch ca ng dng MIDlet c ng gi trong mt tp tin JAR (Java Archive File). y chnh l tp tin JAR c download xung in thoi di ng. Tp tin JAR cha tt c cc tp tin class t mt hay nhiu MIDlet, cng nh cc ti nguyn cn thit. Hin ti, MIDP ch h tr nh dng hnh .png (Portable Network Graphics). Tp tin JAR cng cha tp tin k khai (manifest file) m t ni dung ca MIDlet cho b qun l ng dng. N cng phi cha cc tp tin d liu m MIDlet cn. Tp tin JAR l ton b ng dng MIDlet. MIDlet c th load v triu gi cc phng thc t bt k lp no trong tp tin JAR, trong MIDP, hay CLDC. N khng th truy xut cc lp khng phi l b phn ca tp tin JAR hay vng dng chung ca thit b di ng. 1.4 Tp tin k khai (manifest) v tp tin JAD
Tp tin k khai (manifest.mf) v tp tin JAD (Java Application Descriptor) m t cc c im ca MIDlet. S khc bit ca hai tp tin ny l tp tin k khai l mt phn ca tp tin JAR cn tp tin JAD khng thuc tp tin JAR. u im ca tp tin JAD l cc c im ca MIDlet c th c xc nh trc khi download tp tin JAR. Ni chung, cn t thi gian download mt tp tin vn bn nh hn l download mt tp tin JAR. Nh vy, nu ngi dng mun download mt ng dng khng c thit b di ng h tr (v d, MIDP 2.0), th qu trnh download s b hy b thay v phi i download ht ton b tp tin JAR. M t ni dung ca tp tin JAR: Cc trng yu cu Manifest-Version // Phin bn tp tin Manifest MIDlet-Name // Tn b MIDlet (MIDlet suite) MIDlet-Version // Phin bn b MIDlet MIDlet-Vendor // Nh sn xut MIDlet MIDlet- for each MIDlet // Tn ca MIDlet MicroEdtion-Profile // Phin bn hin trng MicroEdtion-Configuration // Phin bn cu hnh V d mt tp tin manifest.mf:
MIDlet-Name: CardGames MIDlet-Version: 1.0.0 MIDlet-Vendor: Sony Ericsson MIDlet-Description: Set of Card Games MIDlet-Info-URL: http://www.semc.com/games MIDlet-Jar-URL: http://www.semc.com/j2me/games MIDlet-Jar-Size: 1063 MicroEdtion-Profile: MIDP-1.0 MicroEdtion-Configuration: CLDC-1.0 MIDlet-1: Solitaire, /Sol.png, com.semc.Solitaire MIDlet-2: BlackJack, /Blkjk.png, com.semc.BlackJack
Tp tin JAD cha cng thng tin nh tp tin manifest. Nhng n nm ngoi tp tin JAR. Cc thuc tnh MIDlet-Name, MIDlet-Version, v MIDlet-Vendor phi c lp li trong tp tin JAD v JAR. Cc thuc tnh khc khng cn phi lp li. Gi tr trong tp tin m t s gi tr ca tp tin manifest. 1.5 B MIDlet (MIDlet Suite) Mt tp cc MIDlet trong cng mt tp tin JAR c gi l mt b MIDlet (MIDlet suite). Cc MIDlet trong mt b MIDlet chia s cc lp, cc hnh nh, v d liu lu tr bn vng. cp nht mt MIDlet, ton b tp tin JAR phi c cp nht.
Hnh 4 biu din hai b MIDlet Trong hnh trn, mt b MIDlet cha MIDlet1, MIDlet2, v MIDlet3. B kia ch cha MIDlet4. Ba MIDlet trong b u tin truy xut cc lp v d liu ca nhau nhng khng truy xut n cc lp hay d liu ca MIDlet4. Ngc li, MIDlet4 cng khng truy xut c cc lp, hnh nh, v d liu ca chng.
Tng bc lp trnh cho in thoi di ng J2ME - Phn 3
1.1 ha mc thp (low level) v mc cao (high level) Cc lp MIDP cung cp hai mc ha: ha mc thp v ha mc cao. ha mc cao dng cho vn bn hay form. ha mc thp dng cho cc ng dng tr chi yu phi v ln mn hnh. Hnh 1 biu din hai mc ha:
Hnh 1 . Hai mc ha C hai lp ha mc thp v mc cao u l lp con ca lp Displayble. Trong MIDP, ch c th c mt lp displayable trn mn hnh ti mt thi im. C th nh ngha nhiu mn hnh nhng mt ln ch hin th c mt mn hnh. 1.1.a ha mc cao (High Level Graphics) (Lp Screen) ha mc cao l lp con ca lp Screen. N cung cp cc thnh phn nh text box, form, list, v alert. Ta t iu khin sp xp cc thnh phn trn mn hnh. Vic sp xp tht s ph thuc vo nh sn xut. 1.1.b ha mc thp (Lp Canvas) ha mc thp l lp con ca lp Canvas. Lp ny cung cp cc phng thc ha cho php v ln mn hnh hay vo mt b m hnh cng vi cc phng thc x l s kin bn phm. Lp ny dng cho cc ng dng tr chi cn iu khin nhiu v mn hnh. Hnh 2 biu din phn cp lp ha:
Hnh 2 . Phn cp lp ha Form c th l kiu ha hu dng nht ca cc lp Screen v n cho php cha nhiu item khc nhau. Nu s dng cc lp khc (TextBox, List) th ch c mt item c hin th bi v chng u l i tng Displayable v do ch c th c mt i tng Displayable c hin th ti mt thi im. Form cho php cha nhiu item khc nhau (DateField, TextField, Gauge, ImageItem, TextItem, ChoiceGroup). 1.2 ha mc cao L cc i tng ca lp Screen 1.2.a TextBox Lp TextBox cho php ngi dng nhp v son tho vn bn. Lp trnh vin c th nh ngha s k t ti a, gii hn loi d liu nhp (s hc, mt khu, email,) v hiu chnh ni dung ca textbox. Kch thc tht s ca textbox c th nh hn yu cu khi thc hin thc t (do gii hn ca thit b). Kch thc tht s ca textbox c th ly bng phng thc getMaxSize(). 1.2.b Form Form l lp hu dng nht ca cc lp Screen bi v n cho php cha nhiu item trn cng mt mn hnh. Cc item c th l DateField, TextField, ImageItem, TextItem, ChoiceGroup. 1.2.c List Lp List l mt Screen cha danh sch cc la chn chng hn nh cc radio button. Ngi dng c th tng tc vi list v chn mt hay nhiu item. 1.2.d Alert Alert hin th mt mn hnh pop-up trong mt khong thi gian. Ni chung n dng cnh bo hay bo li. Thi gian hin th c th c thit lp bi ng dng. Alert c th c gn cc kiu khc nhau (alarm, confirmation, error, info, warning), cc m thanh tng ng s c pht ra. 1.3 Form v cc Form Item S dng form cho php nhiu item khc nhau trong cng mt mn hnh. Lp trnh vin khng iu khin s sp xp cc item trn mn hnh. Sau khi nh ngha i tng Form, sau s thm vo cc item.
Mi item l mt lp con ca lp Item. 1.3.a String Item Public class StringItem extends Item StringItem ch l mt chui hin th m ngi dng khng th hiu chnh. Tuy nhin, c nhn v ni dung caStringItem c th c hiu chnh bi ng dng. 1.3.b Image Item public class ImageItem extends Item ImageItem cho php thm vo hnh form. ImageItem cha tham chiu n mt i tng Image phi c to trc . 1.3.c Text Field public class TextField extends Item TextField cho php ngi dng nhp vn bn. N c th c gi tr khi to, kch thc ti a, v rng buc nhp liu. Kch thc tht s c th nh hn yu cu do gii hn ca thit b di ng. 1.3.d Date Field public class DateField extends Item DateField cho php ngi dng nhp thng tin ngy thng v thi gian. C th xc nh gi tr khi to v ch nhp ngy thng (DATE), thi gian (TIME), hoc c hai. 1.3.e Choice Group public class ChoiceGroup extends Item Implements Choice ChoiceGroup cung cp mt nhm cc radio-button hay checkbox cho php la chn n hay la chn nhiu. 1.3.f Gauge public class Gauge extends Item Lp Gauge cung cp mt hin th thanh (bar display) ca mt gi tr s hc. Gauge c th c tnh tng tc hoc khng. Nu mt gauge l tng tc th ngi dng c th thay i gi tr ca tham s qua gauge. Gauge khng tng tc ch n thun l hin th. 1.4 Ticker Mt mn hnh c th c mt ticker l mt chui vn bn chy lin tc trn mn hnh. Hng v tc l do thc t qui nh. Nhiu mn hnh c th chia s cng mt ticker. V d: Ticker myTicker = new Ticker(Useful Information); MainScreen = new Form(Main Screen); MainScreen.setTicker(myTicker);
Lu tr bn ghi cho php lu d liu khi ng dng thot, khi ng li v khi thit b di ng tt hay thay pin. D liu lu tr bn ghi s tn ti trn thit b di ng cho n khi ng dng tht s c xa khi thit b di ng. Khi mt MIDlet b xa, tt c cc lu tr bn ghi ca n cng b xa. Hnh 1 minh ha d liu lu tr bn ghi vi MIDlet
Nh trong hnh, cc MIDlet c th c nhiu hn mt tp lu tr bn ghi, chng ch c th truy xut d liu lu tr bn ghi cha trong b MIDlet ca chng. Do , MIDlet 1 v MIDlet 2 c th truy xut d liu trong Record Store 1 v Record Store 2 nhng chng khng th truy xut d liu trong Record Store3. Ngc li, MIDlet 3 ch c th truy xut d liu trong Record Store 3 v khng th truy xut d liu d liu trong Record Store 1 v Record Store 2. Tn ca cc lu tr bn ghi phi l duy nht trong mt b MIDlet nhng cc b khc nhau c th dng trng tn. Cc bn ghi trong mt lu tr bn ghi c sp xp thnh cc mng byte. Cc mng byte khng c cng chiu di v mi mng byte c gn mt s ID bn ghi.
Cc bn ghi c nh danh bng mt s ID bn ghi (record ID) duy nht. Cc s ID bn ghi c gn theo th t bt u t 1. Cc s s khng c dng li khi mt bn ghi b xa do s tn ti cc khong trng trong cc ID bn ghi. c t MIDP khng nh ngha chuyn g xy ra khi t n s ID bn ghi ti a, iu ny ph thuc vo ng dng. 1.1 nh dng (Format), Thm (Add) v Xa (Delete) cc bn ghi Thm bn ghi gm hai bc. Bc u tin l nh dng bn ghi theo nh dng yu cu v bc tip theo l thm bn ghi nh dng vo lu tr bn ghi. S tun t ha (serialization) d liu lu tr bn ghi khng c h tr, do lp trnh vin phi nh nh dng cc mng byte xy dng d liu lu tr bn ghi Sau y l v d ca vic nh dng d liu bn ghi, m mt lu tr bn ghi v sau thm d liu bn ghi vo lu tr bn ghi ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream outputStream = new DataOutputStream(baos); outputStream.writeByte(T); // byte [0] Th ch loi bn ghi outputStream.writeInt(score); // byte [1] n [4] outputStream.writeUTF(name); // byte [5] n 2 + name.length byte[] theRecord = boas.toByteArray(); recordStore rs = null; rs = RecordStore.openRecordStore(RecordStoreName, CreateIfNoExist); int RecordID = rs.addRecord(theRecord, 0, theRecord.length); Hnh 2. Thm bn ghi
1.1.a nh dng d liu bn ghi Trong v d trn, hai dng u to mt lung xut gi d liu bn ghi. S dng i tng DataOutputStream (bc mng byte) cho php cc bn ghi d dng c nh dng theo cc kiu chun ca Java (long, int, string,) m khng phi quan tm n tch n thnh d liu byte. Phng thc writeByte(), writeInt(), v writeUTF() nh dng d liu nh trong hnh (tag, score, name). S dng th (tag) lm byte u tin c ch xc nh loi bn ghi sau ny. Phng thc toByteArray() chp d liu trong lung xut thnh mt mng byte cha bn ghi lu tr. Bin theRecord l tham chiu n d liu nh dng. 1.1.b Thm d bn ghi nh dng vo lu tr bn ghi Khi d liu c nh dng, n c th c thm vo lu tr bn ghi. Pht biu openRecordStore() to v m mt lu tr bn ghi vi tn l RecordStoreName. Pht biu addRecord() thm bn khi (bt u bng byte 0 ca theRecord) v tr v ID bn ghi gn vi record ny. 1.1.c Xa bn ghi
Bn ghi c xa bng cch chuyn s ID bn ghi cho phng thc deleteRecord() ca i tng RecordStore. V d, bn ghi 7 b xa bng phng thc deleteRecord(), nu mt bn ghi khc c thm vo th s ID bn ghi s l 8 v ID bn ghi 7 s khng c dng li. 1.2 Lc cc bn ghi (Filtering Records) Giao din RecordFilter cung cp mt cch thun tin lc cc bn ghi theo tiu chun ca lp trnh vin. RecordEnumeration c th c dng duyt qua cc bn ghi v ch tr v cc record ph hp vi tiu chun xc nh. Giao din RecordFilter c phng thc matches() dng xc nh tiu chun ph hp. Phng thc matches() c mt tham s u vo l mng byte biu din mt bn ghi. Phng thc phi tr v true nu bn ghi ny ph hp vi tiu chun nh ngha. Hnh 3 minh ha v d cch s dng giao din RecordFilter
Hnh 3. Lc bn ghi class IntegerFilter implements RecordFilter { public boolean matches(byte[] candidate) throws IlleegalArgumentException { return(candidate[0] == T); } Trong v d trn, lp IntegerFilter c dng lc ra tt c cc bn ghi c T byte u tin. Nh rng cc bn ghi khng phi c cng nh dng. Do c byte u tin lm th (tag) rt c ch. Phng thc matches() ch tr v true nu byte u tin l T. 1.3 Sp xp cc bn ghi Cc bn ghi trong mt lu tr bn ghi c th c sp xp theo th t do lp trnh vin nh ngha. Vic sp xp c thc hin thng qua giao din RecordComparator. Duyt k qua cc bn ghi s tr v cc bn ghi theo th t sp xp nh ngha. Giao din RecordComparator c phng thc compare() phi c implement nh ngha cch hai bn ghi so snh theo th t. Cc tham s u vo l hai mng byte biu din hai bn ghi. Phng thc compare() phi tr v mt trong ba gi tr: EQUIVALENT: Hai bn khi c xem l ging nhau FOLLOWS: Bn ghi u tin c th t theo sau bn khi th hai. PRECEDES: Bn ghi u tin c th t ng trc bn ghi th hai. V d sp xp cc bn ghi s dng giao din RecordComparator class IntegerCompare implements RecordComparator { public int compare(byte[] b1, byte[] b2) {
DataInputStream is1 = new DataInputStream(new ByteArrayInputStream(b1)); DataInputStream is2 = new DataInputStream(new ByteArrayInputStream(b2)); is1.skip(1); is2.skip(2); int i1 = is1.readInt(); int i2 = is2.readInt(); if (i1 > i2) return RecordComparator.FOLLOWS; if (i1 < i2) return RecordComparator.PRECEDES; return RecordComparator.EQUIVALENT; } } Trong v d trn, cc bn ghi c sp xp da trn gi tr s nguyn cha trong 4 byte sau byte th u tin. Tham s b1 v b2 biu din hai bn ghi c chuyn cho phng thc compare(). S dng phng thc DataInputStream() cho php s dng cc kiu d liu chnh ca Java (int, long, String) thay v phi thao tc trc tip vi d liu byte. Phng thc skip() b qua byte th u tin trong mi lung. Phng thc readInt() c s nguyn trc tip t lung nhp. Dng cui cng so snh cc s nguyn v tr v gi tr (FOLLOWS, PRECEDES, v EQUIVALENT). Nh vy th t sp xp ca ton b bn ghi s c xc nh bi gi tr ca cc s nguyn. 1.4 Lit k (Enumerate) cc bn ghi Lit k qua cc bn ghi trong lu tr bn ghi c thc hin bng cch dng giao din RecordEnumeration kt hp vi cc lp RecordFilter v RecordComparator. Lp RecordEnumerator gi th t lun l ca cc bn ghi. Lp RecordFilter nh ngha tp con ca cc bn ghi t lu tr bn ghi s c sp xp. RecordComparator nh ngha th t sp xp ca cc bn ghi. Nu RecordFilter khng c dng th tt c cc bn ghi trong lu tr bn ghi s c dng. Nu RecordComparator khng c dng th cc bn ghi s c tr v theo th t ngu nhin. B lit k c th c thit lp cp nht khi cc bn ghi thay i hoc n c th c thit lp b qua cc thay i v c cp nht th cng sau. Nu s lit k c cp nht t ng mi khi thm hoc xa bn ghi, th n c th lm chm hiu sut ca ng dng. Tuy nhin, nu cc bn ghi b xa th b lit k c th tr v cc bn ghi khng hp l nu n cha c cp nht. Gii php l t c cc bn ghi ang c thay i v sau gi phng thc rebuilt() xy dng li b lit k mt cch th cng. Cc bn ghi duyt bng cch dng phng thc nextRecord(). Ln u tin c gi n s tr v bn ghi u tin trong tp lit k. Ln gi k tip n s tr v bn ghi k tip theo th t sp xp lun l. V d biu din qu trnh lit k bn ghi IntegerFilter iFilt = new IntegerFilter(); IntegerCompare iCompare = new IntegerCompare(); RecordEnumeration intRecEnum = null; intRecEnum = recordStore.enumerateRecords((RecordFilter)iFilt, (RecordComparator)iCompare, false); while (intRecEnum.hasNextElement()) { byte b[] = intRecEnum.nextRecord(); }
// intRecEnum = recordStore(null, null, false); Trong v d trn, mt i tng IntegerFilter v IntegerCompare c to ra. IntegerFilter s ch tr v cc bn ghi cha trng s nguyn. IntegerCompare s sp xp cc bn ghi theo th t s hc. B lit k bn ghi c nh ngha v c khi to bng output ca phng thc enumerateRecords() ca lp RecordStore. Phng thc enumerateRecords() c ba tham s. Tham s u tin l tham chiu i tng lc (iFilt). Tham s th hai l tham chiu n i tng sp xp (iCompare). Tham s cui cng l mt gi tr boolean xc nh b lit k c c cp nht khi cc bn ghi thay i, thm, xa hay khng. Vng lp while() ch cch duyt cc bn ghi theo th t yu cu. Vng lp while() s tip tc min l b lit k cn cha mt bn ghi. Dng cui cng biu din v d cch duyt tt c bn ghi theo th t ngu nhin. Nh ta thy, cc hai tham s lc v so snh u c t l null.
Tng bc lp trnh cho in thoi di ng J2ME - Phn 5
1 Lp trnh mng 1.1 Khung mng CLDC tng qut (Generic CLDC Networking Framework) Mng cho php client di ng gi v nhn d liu n server. N cho php thit b di ng s dng cc ng dng nh tm kim c s d liu, tr chi trc tuyn Trong J2ME, mng c chia lm hai phn. Phn u tin l khung c cung cp bi CLDC v phn hai l cc giao thc tht s c nh ngha trong cc hin trng. CLDC cung cp mt khung tng qut thit lp kt ni mng. tng l n l a ra mt khung m cc hin trng khc nhau s s dng. Khung CLDC khng nh ngha giao thc tht s. Cc giao thc s c nh ngha trong cc hin trng. Hnh 1 biu din cch m khung CLDC lm vic:
Hnh 1. Khung mng CLDC tng qut Kt ni mng c xy dng bng phng thc open() ca lp Connector trong CLDC. Phng thc open() nhn mt tham s u vo l chui. Chui ny dng xc nh giao thc. nh dng ca chui l: protocol:address;parameters CLDC ch xc nh tham s l mt chui nhng n khng nh ngha bt k giao thc tht s no. Cc hin trng c th nh ngha cc giao thc kt ni nh HTTP, socket, cng truyn thng, datagram, Phng thc open() tr v mt i tng Connector. i tng ny sau c th ng vai tr l mt giao thc xc nh c nh ngha trong hin trng. Connector.open(: ;); Mt s giao thc v d (nhng khng c h tr bi CLDC hay MIDP): Socket: Connector.open(socket://199.3.122.21:1511); Comm port: Connector.open(comm:0;baudrate=9600); Datagram: Connector.open(Datagram://19.3.12.21:1511); Files: Connector.open(file:/filename.txt); MIDP h tr giao thc HTTP: HTTP: Connector.open(http://www.sonyericsson.com); Tr v mt i tng Connection V d trn minh ha kt ni socket, cng truyn thng, datagram, file v HTTP. Tt c cc kt ni mng u c cng nh dng, khng quan tm n giao thc tht s. N ch khc nhau chui chuyn cho phng thc open(). Phng thc open() s tr v mt i tng Connection ng vai tr l lp giao thc (v d. HttpConnection) c th s dng cc phng thc cho giao thc . J2ME ch nh ngha mt kt ni l kt ni HTTP trong MIDP. 1.2 Cc lp giao din kt ni (Connection Interface Class) Dn xut t lp Connection l nhiu lp giao din con cung cp khung kt ni mng. Cc giao din khc nhau h tr cc loi thit b di ng khc nhau.
Hnh 2 . Cc lp kt ni Sau y l m t cc giao din kt ni c nh ngha trong CLDC StreamConnectionNotifier Giao dinStreamConnectionNotifier c dng khi i mt kt ni pha server c thit lp. Phng thc acceptAndOpen() b chn cho n khi client thit lp kt ni. Giao din DatagramConnection Kt ni datagram cung cp kiu truyn thng gi khng chng thc. Datagram cha gi d liu v a ch. Chui a ch c nh dng sau: datagram:[//{host}]:{port} Nu tham s host c xc nh, th datagram m kt ni ch client. Nu tham s host khng c xc nh, th datagram c m ch server c = Connector.open("datagram://192.365.789.100:1234"); // Ch client c = Connector.open("datagram://:1234"); // Ch server Giao din InputConnection Giao din InputConnection dng thc hin mt lung nhp tun t d liu ch c. Giao din OutputConnection Giao din OutputConnection dng thc hin mt lung xut d liu ch vit. Giao din StreamConnection Giao din StreamConnection l kt hp ca c hai giao din InputConnection v OutputConnection. N dng cho cc thit b di ng c truyn thng hai chiu. Giao din ContentConnection Giao din ContentConnection k tha giao din StreamConnection v thm vo cc phng thc getType(), getEncoding(), v getLength(). N cung cp c s cho giao din HttpConnection ca MIDP. Giao din HttpConnection Giao din HttpConnection c nh ngha trong MIDP v k tha giao din ContentConnection ca CLDC. Giao din ny cung cp cc phng thc thit lp mt kt ni HTTP. 1.3 Kt ni HTTP Hin trng MIDP h tr kt ni HTTP phin bn 1.1 thng qua giao din HttpConnection. H tr GET, POST, HEAD ca HTTP. Yu cu GET (GET request) c dng ly d liu t server v y l phng thc mc nh. Yu cu POST dng gi d liu n server. Yu cu HEAD tng t nh GET nhng khng c d liu tr v t server. N c th dng kim tra tnh hp l ca mt a ch URL. Phng thc open() ca lp Connector dng m kt ni. Phng thc open() tr v mt i tng Connection sau c th ng vai tr l mt HttpConnection cho
php dng tt c cc phng thc ca HttpConnection. Mt kt ni HTTP c th mt trong ba trng thi khc nhau: Thit lp (Setup), Kt ni (Connectd), hay ng (Close). Trong trng thi Thit lp, kt ni cha c to. Phng thc setRequestMethod() v setRequestProperty() ch c th c dng trong trng thi thit lp. Chng c dng thit lp phng thc yu cu (GET, POST, HEAD) v thit lp thuc tnh HTTP (v d. User-Agent). Khi s dng mt phng thc yu cu gi d liu n hay nhn d liu v t server s lm cho kt ni chuyn sang trng thi Kt ni. Gi phng thc close() s lm cho kt ni chuyn sang trng thi ng. Hnh 3 minh ha cc trng thi kt ni khc nhau:
Hnh 3 . Cc trng thi kt ni HTTP Lu rng gi bt k phng thc no lit k trn (v d. openInputStream(), getLenght()) cng s lm cho kt ni chuyn sang trng thi Kt ni. 1.4 V d HTTP GET Phng thc HTTP GET cho php ly d liu t server v l phng thc mc nh nu khng xc nh phng thc trong trng thi Thit lp. V d thc hin mt kt ni HTTP GET c bn: void getViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; try { c = (HttpConnection)Connector.open(url); // M kt ni HTTP is = c.openInputStream(); // M Input Stream, mc nh GET type = c.getType(); int len = (int)c.getLength(); if (len > 0) { byte[] data = new byte[len]; int numBytes = is.read[data]; // Nu bit chiu di processData(data); } else { int ch; while ((ch = is.read()) != -1) { // c n khi no gp -1 stringBuffer.append((char)ch); } processBuffer(stringBuffer);
} } finally { if (is != null) is.close(); if (c != null) c.close(); } } getViaHttpConnection() nhn mt chui l tham s u vo, l a ch a ch URL chuyn cho phng thc open() ca lp Connection. Phng thc open() tr v mt i tng Connection ng vai tr l mt lp HttpConnection. Phng thc openInputStream() s lm cho kt ni chuyn sang trng thi Kt ni. V khng c yu cu phng thc no, kt ni s mc nh l mt kt ni HTTP GET. Phng thc getLength() s tr v chiu di ca d liu gi t server. Nu bit c chiu di, th bin len s cha chiu di d liu v ta c th c ton b khi d liu. Nu khng th len s cha gi tr -1 v d liu phi c c tng k t mt cho n khi gp nh du cui file (-1). Phng thc processData() v processBuffer() x l d liu n t server. Khi lnh cui cng s ng tt c cc kt ni khng quan tm n c li t khi lnh try trc hay khng. 1.5 V d HTTP POST HTTP POST cho php gi d liu n server. D liu gi n server qua phng thc GET ch gii hn l d liu cha a ch URL. Phng thc POST cho php gi mt lung byte n server. Phng thc HTTP POST thc hin theo cch tng t vi phng thc HTTP GET. V d thc hin mt kt ni HTTP POST: void getViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; OutputStream os; try { c = (HttpConnection)Connector.open(url); // M kt ni // Thit lp phng thc POST // trong khi vn trng thi Thit lp c.setRequestMethod(HttpConnection.POST); // M lung output stream v chuyn sang trng thi Kt ni os = c.openOutputStream(); // Chuyn i d liu thnh lung byte // v gi n server os.write(Data Sent to Server\n.getBytes()); int status = c.getResponseCode(); // Kim tra status if (status != HttpConnection.HTTP_OK) throw new IOException(not OK); int len = (int)c.getLength(); // Ging nh v d HTTP GET: // Kim tra length v x l tng ng } finally { // ng kt ni ging nh v d HTTP GET } } Nh v d trc, phng thc postViaHttpConnection() nhn tham s u vo l mt chui l a ch URL c chuyn n phng thc open() ca lp Connection. Phng thc open() tr v mt i tng Connection ng vai tr l mt lp HttpConnection.
Kt ni by gi trong trng thi thit lp v phng thc yu cu c t l POST bng phng thc setRequestMethod(). Tt c cc thuc tnh khc phi c thit lp trong trng thi ny. Phng thc openOutputStream() s lm cho kt ni chuyn sang trng thi Kt ni. Phng thc write() v flush() s gi d liu n server. on m cn li ging nh phng thc GET. Lung input c m, chiu di ca d liu c kim tra, v d liu c c ton b khi hay tng k t mt ty vo chiu di c tr v. Khi lnh cui cng s ng kt ni. 1.6 Triu gi CGI script C hai phng thc GET v POST c th c dng triu gi CGI script (Common Gateway Interface script) v cung cp d liu nhp. V d, mt MIDlet c mt form cho ngi dng in d liu, sau c th gi d liu kt qu cho server CGI script x l. CGI script c th c triu gi ging nh phng thc GET v POST. Tn ca CGI script v d liu tham s nhp c th chuyn trong a ch URL. Nu cn gi thm d liu cho server, th c th dng phng thc POST. V d cc tham s c gi l mt phn ca URL: url = http://www.asite.com/cgi-bin/getloca...=abc&zip=12345 Trong v d trn, a ch URL c th c chuyn nh l mt tham s ging nh phng thc getViaHttpConnection() v d trc. 1.7 HTTP Request Header Nh ta ni trc, HTTP request header phi c thit lp trng thi Thit lp bng phng thc setRequestMethod() v setRequestProperty(). Phng thc setRequestMethod() dng thit lp cc phng thc GET, POST, hoc HEAD. Phng thc setRequestProperty() dng thit lp cc trng trong request header. V d c th l Accept-Language, If-Modified-Since, User-Agent. Phng thc getRequestMethod() v getRequestProperty() c th c dng ly cc thuc tnh trn. 2 Wireless Messaging API J2ME cha hu ht cc cu hnh v hin trng, kt hp vi nhau nh ngha mi trng thc thi Java hon chnh cho cc thit b c ti nguyn gii hn. Tuy nhin, i khi, cn phi c gi giao din lp trnh ng dng (Application Programming Interface API), c th chi x bi cc ng dng chy trn cc hin trng khc nhau. J2ME nh ngha API nh vy l cc gi ty chn (optional package), l mt tp cc lp v cc ti nguyn khc c th c dng kt hp vi hin trng. Cng ging nh cc thnh phn ca J2ME, cc gi ty chn c nh ngha l yu cu c t Java (Java Specification Request JSR) thng qua Java Community Process. Mt trong nhng gi ty chn u tin cho J2ME l JSR 120, b API nhn tin khng dy (Wireless Messaging API WMA), dng gi v nhn cc tin nhn vn bn hoc nh phn ngn trn kt ni khng dy.
WMA da trn khung kt ni mng tng qut (GCF). Cc tin nhn c gi v nhn vi WMA c gi trn cc mng khng dy ca in thoi di ng v cc thit b tng t khc, c th l GSM hay CDMA. WMA h tr Short Message Service (SMS) v Cell Broadcast Short Message Service (CBS). Mc d tin nhn WMA tng t nh datagram, WMA khng s dng giao din datagram c nh ngha bi GCF, giao din ny dng cho kt ni UDP. Thay vo , WMA nh ngha mt tp giao din mi trong gi java.wireless.messaging. gi hoc nhn tin nhn, ng dng trc ht phi to mt instance ca giao din MessageConnection, s dng GCF connection factory. a ch URL chuyn cho phng thc java.microedition.io.Connector.open() ch nh giao thc s dng (SMS hoc CBS), v s in thoi ch, cng, hoc c hai. V d, y l nhng URL hp l: sms://+417034967891 sms://+417034967891:5678 sms://:5678 cbs://:5678 URL trong hai dng u tin m kt ni client, ng dng kt ni n mt server vi a ch thit b v cng ch nh. Nu cng khng ch nh, s dng cng nhn tin mc nh ca ng dng. Dng URL th ba m mt kt ni server trn thit b, cho php ng dng i v hi p tin nhn n t cc thit b khc. Dng cui cng cho php ng dng lng nghi tin nhn broadcast t ngi iu hnh mng. Sau y l mt v d n gin to mt kt ni SMS client: import java.microedition.io.*; import java.wireless.messaging.*; ..... MessageConnection conn = null; String url = "sms://+417034967891"; try { conn = (MessageConnection) Connector.open( url ); // thc hin cng vic g } catch( Exception e ){ // x l li } finally { if( conn != null ){ try { conn.close(); } catch( Exception e ){} } } gi tin nhn, s dng phng thc MessageConnection.newMessage() to mt tin nhn rng, thit lp payload ca n (d liu vn bn hoc nh phn gi), v triu gi phng thc MessageConnection.send(): public void sendText( MessageConnection conn, String text ) throws IOException, InterruptedIOException { TextMessage msg = conn.newMessage( conn.TEXT_MESSAGE ); msg.setPayloadText( text ); conn.send( msg ); }
Gi d liu nh phn cng hon ton tng t: public void sendBinary( MessageConnection conn, byte[] data ) throws IOException, InterruptedIOException { BinaryMessage msg =conn.newMessage( conn.BINARY_MESSAGE ); msg.setPayloadData( data ); conn.send( msg ); } D nhin, c gii hn lng d liu c th gi trong mt tin nhn. Thng thng, tin nhn vn bn SMS b gii hn n 160 hoc 70 k t, tin nhn nh phn b gii hn n 140 bytes. Nhn tin nhn thm ch cn n gin hn: Sau khi m mt kt ni server, ng dng gi phng thc receive() ca kt ni, phng thc ny s tr v tin nhn c trong cng xc nh. Nu khng c tin nhn, phng thc s ng (block) cho n khi c tin nhn, hoc cho n khi c mt thread khc ng kt ni: import java.io.*; import java.microedition.io.*; import java.wireless.messaging.*; MessageConnection conn = null; String url = "sms://:5678"; // khng c s in thoi! try { conn = (MessageConnection) Connector.open( url ); while( true ){ Message msg = conn.receive(); // blocks if( msg instanceof BinaryMessage ){ byte[] data =((BinaryMessage) msg).getPayloadData(); // thc hin cng vic g } else { String text =((TextMessage) msg).getPayloadText(); //thc hin cng vic g } } } catch( Exception e ){ //x l li } finally { if( conn != null ){ try { conn.close(); } catch( Exception e ){} } } bo m tnh n nh ca chng trnh, vic gi v nhn thng ip nn giao cho mt thread ring m nhn.
Tng bc lp trnh cho in thoi di ng J2ME - Phn 6
Lnh vc ng dng khng dy vi cng ngh Java Khi qut Cc ng dng Java cho cc thit b khng dy nh (MIDlet) s ng mt vai tr c th l nh, cng c th l ln trong cc h thng phn mm phn tn. Khi ,
n s sinh ra mt dng phn mm client mi. Chng rt thch hp vi khi nim thin-client, nhng do chng qu nh, yu cu phi c thm s phi hp lm vic hiu qu vi cc thng tin c cung cp bi cc servlet v JSP, v c th l EJB ng sau. Ta s xem xt cc cng ngh Java ch cht pht trin ng dng khng dy trong h thng doanh nghip. Ta cng s xt n cc kin trc h tr client khng dy trong cc h thng doanh nghip. Trong lc ny, dch v Web (Web service), c th s tr thnh mt phng tin vt tri h tr cho phn mm client khng dy trong mt vi nm ti. Cc phin bn Java 2 Nn tng Java 2 c chia thnh ba phin bn, mi phin bn h tr mt dng phn mm trn cc h thng khc nhau. Phin bn chun, hay J2SE (Java 2 platform, Standard Edition), l phin bn c nht v thng dng nht. N h tr cc ng dng Java, applet, lp trnh desktop v cc h thng ln hn ch yu l cho PC - c th c ni mng hoc khng ni mng. Ngi ta thng thng s dng J2SE cho cc ng dng GUI n v console, cc thnh phn middleware v cc dch v RMI. Phin bn doanh nghip, hay J2EE (Java 2 platform, Enterprise Edition), m rng phin bn chun vi cc API c cc tnh nng doanh nghip (enterprise features). J2EE h tr Web service thng qua cc servlet v JSP, d liu bng JDBC, v cc h thng giao tc ln thng qua EJB y l mt vi cng ngh chnh ca J2EE. Cc thnh phn J2EE gn cht vi pha server ca cc h thng ln: kh nng x l mnh, b nh v khng gian lu tr ln v c kh nng m rng. Phin bn mi nht trong ba phin bn l phin bn thu nh, hay J2ME (Java 2 platform, Micro Edition). N h tr cc thit b micro a dng, m J2ME gi l cc hin trng (profile) nhng tt c chng u km kh nng hn so vi my tnh c nhn. Trong J2ME, sc mnh CPU, b nh, lu tr v kh nng kt ni u b hn ch, c th l rt nghim ngt. S cn thit ca J2ME Th gii ca cc thit b di ng v cc thit b sub-PC khng c cc c tnh ging nh trong lnh vc PC v server. Ngoi ra, khng phi mi thit b trong lnh vc ny u cng lm mt vic. S khc nhau v thit k v mc ch gia PDA, in thoi, v my nhn tin l rt ng k. Bt k n mang li s i mi g cho th trng, th tnh a dng ca cc thit b ny l mt c mng i vi cc lp trnh vin. Nu ti mun xy dng mt ng dng cho in thoi di ng, ti c phi vit m li, xy dng li, v kim tra li cho mi thit b hay khng? Nu ti mun xy dng mt client c kt ni mng, ti phi xt n cc cng ngh kt ni no? v.v... J2ME ra i nhm mc ch chnh l thit lp mt chun n m thng qua cc nh pht trin c th to nn cc phn mm c tnh kh chuyn (portable) cho cc thit b micro. Ngn ng Java l s la chn ng nhin cho lnh vc ny, bi v v
c bn n hng nhiu v tnh kh chuyn. Bng cch ny, Sun m nhn bi ton ln v tnh a dng ca thit b mt mc tng qut, do cc nh pht trin khng phi quan tm n vn ny na. Nu mi nh cung cp PDA, in thoi v my nhn tin u thc hin J2ME cho thit b ca h, th chng ta c kh nng vit chng trnh vit mt ln, chy mi ni (write once, run anywhere) trong lnh vc micro, cng ging nh ta quen vi khi nim ny cc h thng my ln. Hin trng thit b thng tin di ng (Mobile Information Device Profile) Mc d khng phi ch c mt hng kin trc J2ME, nhng cc thit b di ng khng dy dng nh dn dn cng quan tm n J2ME. Bao gm: * * * * * in thoi di ng Tr t c nhn s (Personal Digital Assistant-PDA) My nhn tin Thit b c sch in t Cc thit b point-of-sale
J2ME c t chc thnh cc mc, mi mc xc nh mt nh ngha tng dn ca cc thit b ch. C nhiu la chn kin trc tn ti mi mc, v rng buc ty chn cc mc cao hn. Lp trnh vin ch cn quan tm n hin trng (profile), nh ngha cc API; cc nh thc hin J2ME cho thit b cn tp trung n mc VM (Virtual Machine). Hnh 1. Cc mc t chc J2ME
Cc c t cho cc thit b khng dy l Connected Limited Device Configuration hay CLDC, v Mobile Information Device Profile hay MIDP. MIDP nh ngha cc c tnh ti thiu ca thit b nh sau: * B nh khng bay hi c dung lng 128K (ngha l, b nh c trng thi c gi li khi thit b tt) dnh cho cc thnh phn MIDP, bao gm KVM, Core API v chng trnh MIDP. * 8K b nh khng bay hi dnh cho d liu bn vng ca ng dng. * 32K b nh bay hi cho b nh ca chng trnh. * Mn hnh hin th t nht l 96x54 pixel, c th ch l mt bit mu hay h tr nhiu mu hoc mu mc xm. * C ch nhp liu h tr t nht mt b phm s, hoc mt mn hnh cm ng c kh nng cu hnh h tr nhp liu s. * Kh nng kt ni mng khng dy hai chiu, vi bng thng hn ch v thng thng l khng lin tc. Nh vy cc thit b h tr MIDP cung cp mt nn tng chun cho cc phn mm Java:
Cc kiu ng dng MIDP Cc ng dng MIDP c gi l cc MIDlet. Hu ht cc MIDlet u mt trong hai dng sau: 1. ng dng n (standalone application) c np hon ton vo thit b v c th chy bt k lc no thit b c m, khng yu cu ti nguyn bn ngoi. Loi ny bao gm: * Cc ng dng PDA v ng dng organizer nh s a ch, danh sch cng vic v lch hn. * Cc cng c n gin nh my lm tnh (calculator) * Tr chi 2. ng dng ni mng (networked application) c chia thnh t nht hai thnh phn, mt thnh phn l client c trin khai trn thit b di ng. Thnh phn ny s t c dng nu khng c kt ni n t nht mt server trn h thng. Server thng l c t trong mi trng J2EE, v phc v bng Web hoc cc giao thc Internet khc. y, ta hy xt k thut ng client. Ta khng gi mt MIDlet l mt client ch n gin l v n s dng kt ni mng MIDP v lin lc n cc thnh phn khc. Cu hi l phn lun l li ca ng dng t u? MIDlet c m nhn hu ht vic suy ngh v ch quan tm n mng hay khng? khng phi l client, tht vy t nht l khng theo ng ngha trong ng cnh ca h thng enterprise. Mt client l mt MIDlet da vo mt server suy ngh, lu tr, ti, x l, hay ni cch khc l lm vic thay cho n. Java 2 Enterprise Edition Cc MIDlet client khng yu cu phi kt ni n cc server chy Java. Mt MIDlet c th c vit to HTTP request n mt trang web c t trc, v n khng cn quan tm l trang web c h tr bi ASP trn IIS, hay servlet trn Apache/Tomcat,... Tuy nhin, trn thc t, khi ton b h thng phn tn c pht trin mi, th Java nn c dng mi mc. Phin bn Java doanh nghip, Java 2 Enterprise Edition, hay J2EE l mt tp cc chun p dng cng ngh Java cho cc hot ng loi doanh nghip (enterpriseclass), v d nh: * * * * * * Dch v HTTP, bao gm ng dng Web v dch v Web (Web service) Lu tr v ly d liu t c s d liu quan h X l giao tc trc tuyn Thc hin i tng phn tn (bng CORBA) Truyn thng ip tin cy gia server v cc tin trnh X l ti liu XML
Ta xt thut ng Enterprise software (phn mm doanh nghip). y l mt thut ng c nh ngha khng cht. Ni chung, ta nh ngha cc h thng mc doanh nghip bng cc yu cu v nhu cu khi thc thi. * Trong bt k lnh vc v mc no, cc h thng doanh nghip thng phi chu p lc rt cao: x l hay lu tr nhiu d liu, x l nhiu yu cu, thng l thng xuyn, nhiu cng vic phi lm cho client. H thng phi c kh nng nng cp, v phi hot ng c hiu qu di p lc cao. * H thng phi c tnh sn sng (available). * Qun l d liu ng dng phi tha mn tt c tnh cht ca giao tc ACID: atomicity (tnh nguyn t), consistency (tnh ton vn), isolation (tnh tch bit), v durability (tnh bn vng). Ni chung, iu ny c ngha l server phi h tr mt chun tin cy rt cao trong vic x l d liu. * Cc chc nng d liu v ng dng phi an ton (secure): iu ny bao gm cn phi c xc thc, v chnh sch cp quyn. * Truyn thng ip gia cc thnh phn phi ng tin cy (reliable) iu ny cng ging nh tnh ACID ca giao tc, nhng y ta p dng cho cc thng ip ca ng dng. Kin trc Ba-tng (Three-tier) Mt ng dng J2EE nn thc hin theo kin trc ba tng (three-tier architecture), bi v n s phn chia r rng trch nhim cho tng tng khc nhau trong m hnh ng dng.
Hnh 3. Kin trc three-tier * Tng trnh din (presentation tier) ch m nhn phn biu din thng tin n server v thu thp d liu nhp ca ngi dng. N khng bit hoc khng quan tm n cch m thng tin c pht sinh, mc d n bit mt s iu v hnh dng (shape) ca thng tin. * Tng lun l nghip v (business logic tier) (hay i khi cn gi l domain, hay n gin l tng gia (middle tier) m nhn chc nng li ca ng dng: cc tnh nng v cc hm bin dch hay thay i d liu, cc lut phi c p dng cho d liu khi n thay i. Tng ny cung cp cho tng trnh din trc n, v cng l phng tin cho vic lu tr v nhn d liu ca tng sau n. * Tng persistent qun l lu tr bn vng v ly d liu ng dng. Tng ny c th bao gm m chng trnh cng vi h qun tr c s d liu quan h. M hnh mu c th biu din nh Hnh 4:
Hnh 4. M hnh mu kin trc three-tier * JavaServer page v servlet, qun l bi mt Web server J2EE, xc nh tng trnh din y l giao din do server qun l. * Mt lp xc nh ca Enterprise JavaBean c gi l session bean thc hin logic nghip v. * JDBC l mt loi khc ca EJB, entity bean, qun l d liu trn cc RDBMS. Tuy nhin client khng dy (wireless client) l mt dng client c bit. N cn phi c server phc v c bit: d liu phi c x l c bit cho loi client ny. H tr cc thit b MIDP thng qua tng mi gii (Mediation) Vic chun b c bit d liu t tng gia cho mt dng trnh din c bit c gi l s mi gii (mediation). Tng mi gii (mediator tier) l mt tnh nng thng thng ca cc h thng N-tng, thng c trin khai h tr vic dng nhiu khung (framework) trnh din khc nhau cho cng mt tng domain.
Hnh 5. V tr ca tng mi gii i vi cc MIDP client, s mi gii thng l dng mt gateway, bin dch ni dung mc PC sang ni dung mc micro, v c th x l chuyn i giao thc, v d nh: * Ni dung HTML c th c bin dch thnh Wireless Markup Language, hay WML * Giao thc c bn c th chuyn t HTTP sang Wireless Application Protocol hay WAP * Cc datagram s khng c cung cp bng User Datagram Protocol (UDP) m bng Wireless Datagram Protocol hay WDP. Kin trc cui cng s l mt trong hai bin th ca kin trc N-tng ca kin trc J2EE m ta thy trn.
* Mediation ca domain:
Hnh 7. Mi gii ca tng trnh din MIDP client s da nhiu vo phn mm J2EE v cc gateway hay tng mi gii n gin ha hay nh dng ni dung cho vic trnh din v x l ngi dng di ng. Cc dch v Web (Web service) ng dng Web dn dn ang chia s vi dch v Web, l mt thnh phn cung cp truy xut programmatic trc tip n tng business/domain, nhng vn s dng cc giao thc Web chp nhn v phc v yu cu.
Hnh 8. Dch v Web Cc MIDlet c th l cc client ca cc dch v Web, nhng vn cn phi c s mi gii. C hai n lc h tr MIDP truy xut cc dch v Web: * Mt tp con ca Java API for XML Processing ang c a vo MIDP 2.0 API * Mt c t mt Web-service gateway ang c pht trin, s trnh vic x l XML trong MIDlet.
Lp trnh Web Service vi MIDP Lp trnh mng MIDP trn HTTP client Khi qut c t MIDP 1.0 pht biu rng cc trin khai ca MIDP trn thit b di ng bt buc phi h tr t nht l kt ni HTTP 1.1 s dng khung kt ni chung (GCF Generic Connection Framework). S dng kt ni client HTTP 1.1 ngha l thit b gi mt yu cu (request) v server gi v mt hi p (response) tng ng.
Hnh 1. HTTP client request-response Bng cch ch dng kt ni HTTP client ngha l server khng th thit lp lin lc vi thit b ngoi tr bng cch hi p mt request. Mt MIDlet HTTP client thng thng s dng c hai phng thc HTTP GET v POST. c t MIDP 2.0 pht biu rng c HTTP v HTTPS bt buc phi c h tr. Thn ca thng ip HTTP Thng tin gi trong thn thng ip HTTP request v response n gin l mt lung byte. MIDlet v servlet chn kiu nh dng thng tin m ha cc byte ny. Thn ca thng ip SOAP/HTTP Cc im cui dch v Web da trn SOAP trao i cc thng ip SOAP vi nhau. HTTP l mt c ch mc nh dng truyn thng ip SOAP. Thng ip SOAP cha d liu theo nh dng XML. Thng ip XML c th dng c UTF-8 hay UTF-16 lm bng m v m ha. Khi qut v dch v Web (Web service), SOAP v WSDL Thut ng Dch v Web (Web service) ni n truyn thng ng dng-n-ng dng (application-to-application). Mt dch v Web n gin l mt dch v trn Internet c kh nng c truy xut thng qua giao din theo khun dng s dng cc giao thc Internet chun nh HTTP. World Wide Web Consortium (W3C) nh ngha dch v Web nh sau: Mt dch v Web l mt h thng phn mm c nhn dng bng mt URI (Uniform Resource Identifier), m cc giao din chung v s gn kt ca n c nh ngha v m t bng XML. nh ngha ca n c th c nhn ra bng cc h thng phn mm khc. Cc h thng ny sau c th tng tc vi dch v Web theo phng cch c m t trong nh ngha ca n, s dng cc thng ip theo XML c chuyn bng cc giao thc Internet. Hai c t quan trng v dch v Web l Ngn ng m t dch v Web (Web Services Description Language WSDL) v Giao thc truy xut i tng n gin (Simple Object Access Protocol SOAP). WSDL c dng m t mt dch v Web c trin khai. SOAP c dng nh ngha nh dng ca thng ip c trao i gia cc im cui (th d nh client v server) ca dch v Web trong sut qu trnh hot ng ca dch v Web . Mt dch v Web c th t ng k mt ni ng k thch hp (v d bng cch cung cp m t WSDL ca n) client c th nhn ra n. Cc tin trnh ny c gi l qu trnh ng k v nhn bit dch v. Java, Web service v SOAP Lnh vc dch v Web ang pht trin nhanh chng. Ti thi im ny y ban cng
ngh Java (Java Techonology Community) xy dng phin bn u tin ca Java API cho RPC da trn XML (Java API for XML-based RPC JAXRPC) cho J2SE. Mt gi ty chn cho dch v Web trn J2ME cng ang c xy dng. c t MIDP 1.0 v MIDP 2.0 khng xc nh bt k h tr no cho XML hay SOAP. Cc nh pht trin MIDP mun s dng XML hay SOAP thng phi s dng cc th vin bn ngoi. iu ny rt bt li v mi MIDlet phi cha cc th vin ny. Cc th vin nh vy thng khong 25 n 50 KB (kch thc file .class). iu ny c kh nng s lm gim khng gian cho ng dng MIDlet. Lun n ny c pht trin bng cc th vin m KXML v KSOAP. Mt vi th vin XML v SOAP khc nhm n thit b J2ME cng c th d dng c tm thy, v c th c s dng theo phng cch tng t. Ti u ha truyn thng Client/Server cho cc ng dng di ng ng dng di ng client/server Ngoi cc ng dng chy n trn thit b di ng khng cn tng tc vi ti nguyn bn ngoi, cn c nhu cu mt mi trng phn tn vi client c nhu cu lin lc vi server s dng kt ni IP. Ta s xt mt s vn in hnh v lin lc client/server c th pht sinh trong qu trnh kt ni gia Java 2 Platform, Enterprise Edition (J2EE), nn tng server v MIDlet. Tip theo s so snh cc giao thc khc nhau, c th c dng pht trin cc loi ng dng phn tn ny. Ngoi ra, lp trnh vin c th s dng thm cc tng tru tng gia giao thc chuyn vn, da trn HTTP, v chnh ng dng xy dng mt kin trc linh ng c th c ti u ha. Vi cch tip cn ny, giao thc chuyn vn c chn c th c chuyn i tng i d dng m khng cn phi hiu chnh logic ca ng dng. y ta s dng mt proxy servlet c th nng cao hiu qu ca cc ng dng di ng client/server. Trn thc t, v s ng dng Mobile Information Device Profile (MIDP) khng ch chy trn cc thit b di ng, m cng c truy xut n server, v do th hin mt ng dng phn tn. Nhiu ng dng di ng ch tht s hot ng khi kt ni n server. Kt ni c th lun lun m (always on) hay ch m khi ng dng cn lin lc vi server. S dng cch tip cn phn tn, ng dng di ng c th truy xut n cc c s d liu ngoi, v nhng cng vic qu phc tp i vi kh nng hn ch ca thit b MIDP c th c chuyn n cho mt server mnh hn. Do , li gii cho ng dng di ng doanh nghip ch c th thc hin thng qua tng tc gia J2EE v Java 2 Platform, Micro Edition (J2ME). Tuy nhin, trong qu trnh trao i d liu gia server v client di ng, cn phi quan tm n cc vn lin quan, c bit l cc vn lin quan n hiu sut truyn ti v x l d liu trn thit b. i vi gii php doanh nghip da trn cng ngh J2ME, cn phi quan tm n s hn ch ca c kt ni mng v ti nguyn ca thit b, khng ging nh mi trng thng thng ca my tnh c nhn vi kt ni mng c nh. iu ny c ngha l nh pht trin nn lng trc c cc khong thi gian tr di trn bng thng hn ch. Hn na, bt k trong tnh hung no cng khng nn cho rng thit b di ng lun lun c kt ni. V ti nguyn, ta phi i mt vi vn kh nng tnh ton hn ch cng vi kh nng lu tr tng i ca thit b. Do , trc khi pht trin mt ng dng phn tn cho client di ng, ta cn phi xem xt k cc yu t trc khi chn giao thc, bi v quyt nh ny c th c nh hng ln n hiu sut ca ng dng. HTTP l mt giao thc lin lc client/server l tng cho ng dng Java di ng. i vi mi c t, thit b tng thch MIDP 1.0 phi h tr HTTP. Cc giao thc khc nh TCP hay UDP l ty chn. Bi v khng phi tt c thit b MIDP u h tr truyn thng socket hay datagram, do trin khai HTTP trn thit b di ng cho php ti u kh nng chuyn i gia cc thit b t cc nh sn xut khc nhau.
Mc d mt s thit b, nh Nokia 6800 h tr kt ni socket, nhng tng thch ti a, nn s dng HTTP lm giao thc trao i gia client v server. Mt li im khc na l giao thc HTTP c hng truy xut khng li (troublefree access) thng qua tng la. Bi v server v client di ng hu nh c tch bit bng firewall, HTTP khng cn phi cu hnh thm. Mc d vy, ta cng nn qua tm n cc ri ro bo mt c th c khi m kt ni HTTP ra th gii bn ngoi. Java cung cp API lp trnh mng, h tr giao thc HTTP 1.1. Ta d dng to ra cc request GET, POST, v HEAD trong ng dng Java. Cc loi giao thc khc nhau By gi ta chn HTTP lm giao thc chuyn vn, vai tr ca ngi pht trin l phi quyt nh nh dng thng ip trao i d liu gia server v client. Nn tng J2ME khng a ra cc c ch c chun ha nh Java Remote Method Invocation (RMI) v Java API for XML-based Remote Procedure Call (JAX-RPC) (vn rt tn ti nguyn), ngi pht trin phi t mnh nh ngha nh dng v lp truyn thng trn lp chuyn vn HTTP. C nhiu s la chn, ta s xem xt chi tit di y. Ch yu c hai cch nh ngha nh dng thng ip: Mt l nh dng thun nh phn, c ti u ha bo m hiu sut cao nht. Hai l nh dng phc tp da trn XML, v d nh SOAP, cung cp kh nng c v kh chuyn cao, nhng hiu sut rt km, c bit l vi cc thit b di ng vi bng thng v tc x l hn ch. Ngi pht trin phi i mt vi th thch l phi la chn gii php tt nht cho ng dng. V c bn, kch thc ca giao thc tng tng ng vi kh nng t m t, do lm gim hiu qu truyn thng trn mng in thoi di ng bng thng hp. Tng kh nng human-readability, th ng thi cng gia tng cc nh dng da trn XML, cng nh hiu sut tnh ton pht sinh v phn tch cc thng ip n.
Hnh 2. Biu so snh cc giao thc lin lc khc nhau nh dng nh phn c quyn (Proprietary Binary Format) nh dng ny c kh nng linh ng cao v c th c pht sinh mt cch d dng
Tng bc lp trnh cho DTDD J2ME - Phn 8
Cc vn thit k ng dng Enterprise khng dy p dng cng ngh Java M hnh lp trnh c bn Hnh 1 biu din cu trc tng qut ca mt ng dng enterprise khng dy in hnh, bao gm mt thit b J2ME v mt server J2EE.
Hnh 1. Kin trc mc cao ca mt ng dng enterprise Java khng dy. Kin trc ca mt ng dng enterprise phc v cc client khng dy cng tng t nh ca mt ng dng J2EE chun: Mt client ng dng s dng MIDP hay c gi l MIDlet client, cung cp giao din ngi dng trn thit b di ng. MIDlet giao tip vi mt Java servlet, thng l thng qua HTTP, v trn mt knh truyn bo mt khi cn thit. Servlet dch yu cu t MIDlet, v ti lt n, gi yu cu n cc thnh phn EJB. Khi cc yu cu c tha mn, servlet pht sinh mt hi p cho MIDlet. Cc thnh phn EJB, hay cc enterprise beans, bao bc logic nghip v ca ng dng. Mt trnh cha EJB cung cp cc dch v chun nh giao tc, bo mt, v qun l ti nguyn cc nh pht trin c th tp trung vo vic thc hin logic nghip
v. Cc thnh phn servlet v EJB c th s dng cc API b sung truy xut d liu v dch v. V d, chng c th s dng JDBC API truy xut c s d liu quan h, hay JavaMail API gi e-mail cho ngi dng. H tr nhiu loi client Nn tng J2EE nhn mnh vo cc thnh phn c th ti s dng. ng dng c th dng cc thnh phn ny h tr nhiu loi client m khng (hay t) nh hng n logic nghip v chnh ca ng dng. Hnh 2 biu din kin trc ca mt ng dng vi client J2ME v client trnh duyt.
Hnh 2. Kin trc mc cao ca mt ng dng J2EE h tr client J2ME v client trnh duyt
constraint), thng ip (messaging), v trnh din (presentation). Rng buc thit k (Design Constraint) Hn ch ca cc thit b di ng dn n nhiu rng buc khi thit k cc ng dng khng dy. Cc ng dng ny phi cung cp cc giao din c ch v tin li trong khi phi i mt vi kch thc mn hnh, kh nng nhp liu, sc mnh x l, b nh, lu tr, v thi gian s dng ngun pin b hn ch. Nht l cc ng dng enterprise khng dy cng b rng buc, bi v chng da vo mng. Cc hn ch do mng di ng nh hng n ng dng di ng nhiu hn so vi trnh duyt Web thng thng. Ni chung, cc thit b di ng s gp phi cc vn sau: tr cao Bng thng hn ch Kt ni khng lin tc gii quyt cc rng buc ny, client MIDP c th s dng cc cch sau: Ch kt ni vo mng khi cn thit. Ch s dng d liu ng mc cn thit. Phi c kh nng s dng khi ngt kt ni. Truyn thng ip Mc d MIDP khng c cc c ch truyn thng client/server phc tp, nh Java Remote Method Invocation (RMI) hay Java API for XML-based Remote Procedure Calls (JAX-RPC), cc nh pht trin vn c th thit k mt giao thc truyn thng ip s dng nh dng v cch trao i theo mnh. i vi hu ht cc ng dng, HTTP xng ng l mt giao thc truyn thng ip c bn, v n c a chung hn so vi cc phng thc truyn thng khc (v d nh da trn socket hay datagram) v cc l do sau y: Tt c cc thit b MIDP phi h tr lp trnh mng MIDP. Do , cc ng dng ch da vo HTTP s c tnh kh chuyn trn cc thit b khc nhau. Mt khc, khng phi tt c cc thit b MIDP u h tr truyn thng da trn packet hay datagram, do cc ng dng s dng cc phng thc ny khng bo m tnh kh chuyn. HTTP c kh nng bo mt tng la (firewall). Hu ht server c tch bit khi client di ng bng firewall, v HTTP l mt trong s t cc giao thc m hu ht cc firewall u cho php i qua. Cc API lp trnh mng ca Java lm cho lp trnh HTTP d dng hn. MIDP h tr HTTP 1.1 v cc API pht sinh cc GET, POST v HEAD request, cc thao tc header c bn, v c ch lung cho thng ip. Trong khi , API cho Java servlet, cung cp kh nng x l HTTP request v sinh cc HTTP response kh mnh. Khi mt MIDP client lin lc vi mt Java servlet th cc s vic sau xy ra:
Client m ha application request v ng gi n vo mt HTTP request. Cc Content-Type v Content-Length header phi c thit lp bo m cc gateway trung gian x l request ng n. Servlet nhn HTTP request v gii m application request. Server hay mt thnh phn khc (v d nh enterprise bean) thc hin cng vic xc nh bi application request. Servlet m ha application response v ng gi n vo mt HTTP response. Content-Type v Content-Length header cng phi c thit lp ng bo m cc gateway trung gian x l response ng n. Client nhn HTTP response v gii m application response cha trong . Client c th thit lp mt hoc nhiu i tng v thc hin mt s cng vic trn cc i tng cc b ny. Thit k nh dng thng ip (Message Format) Cch nh dng application request v response l ty thuc vo lp trnh vin. Cc la chn ri vo hai cch sau: Mt cch l dng nh dng nh phn. Cc thng ip nh phn c th c c v ghi s dng cc lp DataInputStream v DataOutputStream trong gi java.io. Trn thc t, s dng cc thng ip ny t c hiu qu trao i bi v ti c rt gn. Ch rng tit kim khng gian, cc thng ip phi tha mn tnh t miu t (self-descriptive). Do , nh dng ca thng ip phi c bit c client v server, v do chng gn cht vi nhau. Cch khc l s dng Extensible Markup Language (XML). Trong khi nn tng J2EE cung cp rt nhiu h tr cho XML (c bit l trong Web service), th c t MIDP khng yu cu h tr XML, mc d cc nh pht trin c th thm h tr XML vo ng dng MIDP bng cch kt hp cc th vin b sung. phn tch v x l ti liu XML, cc nh pht trin c th la chn nhiu cch thc hin, bao gm hai m hnh x l ph bin, Document Object Model (DOM) v Simple API for XML (SAX). (SAX v cc b phn tch da trn s kin khc thch hp hn DOM khi p dng cho cc thit b di ng vi b nh v tc x l b hn ch). Cc th vin RPC da trn XML cng c cung cp, bao gm cc b phn tch da trn c t Simple Access Object Protocol (SOAP). Tuy nhin khi s dng nh dng XML, ngoi vic chi ph cho kch thc v bng thng, cn c chi ph khng nh v b nh, x l v lu tr. Lin quan n truyn thng ip, ta c cc vn sau: Lin lc an ton (Communicating Securely) Cc client MIDP c th da vo mt s c ch ging cc c ch dng h tr lin lc an ton gia cc ng dng J2EE v cc client trnh duyt Web. Server ng dng J2EE v nhiu thit b MIDP h tr HTTP trn Secure Sockets Layer (SSL). Cc thit b MIDP s dng secure HTTP xc thc vi server v tin hnh trao i an ton vi server . Khung kt ni tng qut (Generic Connection Framework) trong MIDP cho php ngi lp trnh m kt ni secure HTTP ch n
gin bng cch gi phng thc Connector.open() vi URL bt u bng https. xc thc pha client, cc MIDP client da vo vic xc nhn do ng dng qun l, c th da vo c ch t ng k. Ni cch khc, MIDP client gi thng tin y nhim (v d nh tn ng nhp v mt khu) n ng dng J2EE, v ng dng s xc nhn cc thng tin ny, c th bng cch s dng c s d liu. Qun l giao tc Nn tng J2EE h tr giao tc theo nhiu cch. Cc nh pht trin c th qun l giao tc mt cch th cng s dng Java Transaction API, hoc da vo server J2EE qun l cc giao tc mt cch t ng. Enterprise bean thng thng c thc hin giao tc, nhng cc thnh phn nghip v trong tng Web cng c th thc hin giao tc. Khi thit k mt MIDP client, nh pht trin nn quan tm n vic giao tc khng th tri qua nhiu HTTP request (Cc client trnh duyt cng b nh hng bi gii hn ny). Nu mt request xc nh bt k hot ng no yu cu mt giao tc, th cc hot ng c x l nh mt n v nguyn t; trc khi tr v response, tt c cc hot ng u c thc hin, hoc khng c hot ng no c thc hin. Do , nu mt MIDP client mun hon li mt request, th n khng th a ra mt rollback trong request k tip, bi v request k tip s nm trong mt ng cnh giao tc khc. Thay vo , ng dng phi s dng mt giao tc b (compensating transaction) hon li request . Qun l li Khi server J2EE khng th thc hin request cho MIDP client, n cn phi thng bo iu ny cho client. Mc d chng trnh ca server c th s dng c ch qun l ngoi l ca Java x l li cc b, n khng th s dng c ch ny thng bo li cho MIDP client khi lin lc trn mng. Ni cch khc, lp trnh vin khng th ci t mt khi try-catch trong m client bt trc tip ngoi l c nm ra t server. Thay vo , h phi t chc mt c ch thng bo li vo giao thc truyn thng ip ca h. Mt cch l dnh mt phn c nh trong mi response ca ng dng cho mt m trng thi th hin l request ca ng dng c thnh cng hay khng. V d, khi s dng truyn thng ip nh phn, hai byte u tin c th dnh cho m trng thi s nguyn. Khi s dng HTTP, cc nh pht trin ng dng c th dng m trng thi ca HTTP response th hin thnh cng hay tht bi mc truyn thng. V d, m trng thi ca 200 (OK) c th dng ch thnh cng, trong khi m trng thi 500 (Internal Server Error) c th dng ch tht bi. Cc chin lc v trnh din (presentation) Ngi dng tng tc vi ng dng cng tp trung v trc tip, th ngi dng cng c d dng s dng. iu ny c ngha c bit quyt nh cho cc ng dng khng dy do mn hnh hin th v kh nng nhp liu ca cc thit b di ng b hn ch. Cc nh pht trin c th s dng mt vi chin lc lm cho cc ng dng khng dy c kt ni mng tng tnh hu dng hn: thc hin kim tra pha client, cung cp biu th din tin, cho php ngt cc hot ng, v c nhn ha ng dng. Ta s nghing cu cc chin lc ny.
Thc hin kim tra pha client Vic kim tra nhp liu pha client l mt phng thc tt gim vic gi n server. Xt mt form t hng, c cc trng thng tin th tn dng. Mt MIDlet c th khng th kim tra thng tin ny mt mnh n c, nhng chc chn n c th p t mt s phng cch kim tra n gin xc nh thng tin c hp l hay khng. V d, n c th kim tra tn ch th khng th l null, hoc ch s th phi c cc con s. Nu d liu nhp c qua cc bc ny, client s chuyn chng n server. Server c th x l cc cng vic phc tp hn, v d nh kim tra s th tn dng c tht s thuc v ch th hay khng hoc ch th cn tin hay khng. Bng cch thc hin vic kim tra nhp liu pha client, cc MIDlet c th trnh vic lin lc khng cn thit n server. Cc MIDlet c th ch ng hn trnh vic nhp liu khng hp l. V d c th gii hn vic nhp s in thoi bng cch s dng trng nhp rng buc s, do cc s in thoi khng phi l s s khng th c gi n server. Cung cp biu th din tin (process indicator) Bi v cc hot ng kt ni mng tn nhiu thi gian, ng dng nn cung cp cho ngi dng mt thng tin phn hi v din tin ca hot ng . V d c th a ra mt hot hnh hoc gauge biu th din tin. Biu th din tin ny dng cho cc hot ng ko di, v d nh khi download danh sch cc trng trn mng. Cho php ngt hot ng Cho php ngi dng c kh nng ngt cc hot ng ko di gip h gi vic iu khin ng dng. Cc biu th din tin c th c thm mt nt nhn ngng. Biu th ny s lng nghe s kin ca nt nhn ngng, v khi nhn nt ngng mn hnh hin th s ngay lp tc chuyn sang mn hnh trc y. Cn ch rng, khng phi tt c cc hot ng u c th dng. V d, khng nn dng vic to mt ti khon ngi dng trn server v lu li trn client. Hai cng vic ny nn thc hin nh l mt hot ng chung hoc l khng thc hin c hai. Nu hot ng b ngt, s c th dn n s khng thng nht gia d liu ca client v server. C nhn ha ng dng Khi nim c nhn ha (personalization) ch kh nng mt dch v thch ng vi thng tin m n bit v ngi dng. Thng thng, nhiu thng tin ca ngi dng, chng hn nh a ch, m ZIP, hay mu sc a thch, s khng thay i t phin lm vic ny sang phin lm vic khc. Bi v cc d liu ny l n nh, ng dng c th dng n c nhn ha vic s dng ca ngi dng. Vic c nhn ha mt dch v l c li v hai l do sau: N gim vic yu cu nhp liu. Ngi dng s chn nu phi nhp i nhp li cc thng tin ny mi ln s dng dch v. N s rt ngn dng chy cng vic (workflow). Ngi dng c th nhp thng tin ti khon vo ln u, v client s gi li thng tin ng nhp ca h. Trong cc ln s dng sau , ngi dng c th la chn t ng ng nhp m khng phi qua mn hnh ng nhp. Trong khi trng thi phin lm vic c th xem l thng tin tm thi, th d liu c
nhn ha s c tnh bn vng. Lu d liu bn vng ny u l ty vo ngi pht trin ng dng. Khi quyt nh lu tr d liu c nhn ha, cc nh pht trin phi xem xt cc cu hi sau: D liu c nhn ha c thng xuyn nh hng n client request khng? V d, ng dng t v s lit k cc rp da vo m vng ca ngi dng. Server lu tr m vng ny, do client khng cn phi gi li m vng mi ln n gi yu cu. Tuy nhin cng nn cho php ngi dng c th b qua m vng ny, v d khi h sang thm mt vng khc. Thng tin c nhn ha c kh nng s dng gia nhiu loi client hay khng? V d, ngi dng s dng ng dng t v trn in thoi di ng c th mun truy xut cng ng dng qua Web. Khi , h c th mun d liu c nhn s c sn trnh vic nhp li n qua Web. Quyt nh ni lu d liu c nhn ha khng phi lun lun l mt quyt nh la chn mt trong hai. D liu c nhn ha c th c lu chng c client v server. Khi d liu c nhn ha c lu chng trn c client v server, ng dng c th cn phi c thm mt s tnh nng ng b ha d liu ny. Cc nh pht trin c khuyn l nn cn nhc n chi ph ca vic thc hin cc tnh nng ny.