You are on page 1of 44

Tng bc lp trnh cho in thoi di ng J2ME - Phn 1

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 hp-
Intergrated 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


1/ MIDlet
Cc ng dng J2ME c gi l MIDlet (Mobile Information
Device applet).

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-<n> 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


Bi 3: ha trong J2ME
1 ha (Graphic)
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 . 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);

Ticker(String str)

public class Ticker extends Object

Tng bc lp trnh cho in thoi di ng J2ME - Phn 4

1 Lu tr bn ghi (Record Store)


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

Hnh 1. Lu tr bn ghi

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(<protocol>:<address>;<parameters>);

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/getlocation.cgi?location+name=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:

Hnh 2. Trin khai h thng J2ME

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 (enterprise-
class), 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 6. Mi gii ca tng domain

* Mediation/Translation ca tng trnh din:

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.

Tng bc lp trnh cho in thoi di ng J2ME - Phn 7


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 (trouble-free


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.


N c th c gi bng HTTP GET hay HTTP Post request n mt server J2EE, v
d nh Tomcat ca Apache Software Foundation.

S khc bit chnh gia GET v POST request l vi HTTP GET, tt c cc tham s
hay d liu c chuyn n server c cha trong chnh a ch URL. iu ny c
ngha l ta c th gi trc tip cc th tc ca server t xa thng qua URL v cc tham
s ca n. Tuy nhin, chuyn cc tham s, ta b gii hn bng nh dng vn bn
n gin vi di cc tham s b gii hn bi kch thc ln nht ca chiu di dng
request ca my ch Web. V d, trn server Web Tomcat, kch thc ti a mc nh
ca dng request c t l 8190 bytes v c th c thay i.

HTTP POST thch hp hn i vi vic truyn lng d liu ln hay thm ch d liu
nh phn t thit b di ng n server, bi v d liu c gi n server c lp vi
URL. Vic ny c u im l lng d liu khng b hn ch, nh trong trng hp
ca phng thc GET. Trn Java, vic ny c th thc hin bng cch m mt lung
(stream) tch bit, trn c cc phng thc cn thit ca Java cho stream. Do
ta c th truyn d liu nh phn n server m khng gp vn g. D liu trao i
gia client v server c th c t chc hon ton bng cc lung.

u im chnh ca vic lin lc dng nh dng d liu nh phn trn HTTP l hiu
sut truyn cao v kch thc phn ti (payload) c ng. Mt khc, khuyt im ca
n l n khng c tnh t m t (self-descriptive), v iu kin tin quyt l phi bit
trc nh dng, c hai pha client v server, trc khi c th bt u pht trin ng
dng. iu ny dn n vn l bt k thay i no n nh dng thng ip phi
c nht qun gia client v server. Ngoi ra, vi s gia tng s lng cc thng
ip khng tng t nhau m server cn phi x l, m chng trnh tr nn phc
tp.

S tun t ha i tng

Mt cch tip cn hay khc phc cc kh khn ny l s dng cc i tng c


tun t ha. Ngoi cc kiu d liu chun c h tr bi cc phng thc c v ghi
trong cc lp lung, ta c kh nng thc hin tun t ha cc i tng bt k vic
truyn d liu gia client v server c d dng. Vn l MIDP 1.0 khng ging
nh mi trng hon chnh J2SE, mc nh MIDP khng h tr tun t ha
(serialization) v phn nh (reflection) i tng. Do thiu mt c ch tng qut, mi
lp phi a ra s thc hin tnh nng ny theo cch ca ring mnh.

Tun t ha c c thng qua mt giao din ph hp i hi i phi cung cp cc


phng thc cn thit cho vic tun t v gii tun t n. Cn ch l cc lp vi c
ch tun t c quyn ca n phi hin din vi cc phin bn ging nhau c hai
pha client v server.

Trao i thng ip bng XML

XML th hin nh dng thng ip t m t. XML khng yu cu bt buc phi trin


khai mt giao thc RPC ging nh SOAP da trn XML. Nh pht trin c th ch xy
dng nh dng thng ip ph hp da theo c s ca XML thc hin vic trao
i d liu gia client v server. u im c tnh quyt nh ca XML l n c
chun ha v do c tnh kh chuyn cao. Hn na, n da vo vn bn, d liu c
cu trc c th c m t theo phng cch c tnh t gii thch (self-explanatory).
Trong lnh vc doanh nghip, XML chim c u th so vi cc giao thc thng
ip khc ch yu l do s h tr tt ca nn tng J2EE.

Ngoi vic truyn lng d liu ln hn khi dng XML cng nh tng thm phn d
tha ca XML, ta cn gp vn khc vi cc thit b di ng. Trong khi nn tng
J2EE h tr XML, th mi trng MIDP 1.0 khng cung cp h tr tch hp no cho
vic phn tch XML. Cc gii php da trn XML cn phi bao gm b phn tch XML
trn MIDP client. Mc d c nhiu b phn tch m ngun m, chng hn nh
NanoXML, TinyXML, hay kXML, c th c dng cho mc ch ny v c thit
k s dng ti thiu ti nguyn, tuy nhin d sao th vn yu cu khng gian lu tr
trn thit b, vn thng rt t chia s.

y ta s dng KXML ca Enhydra, bi v n ch chim 21 KB b nh.

phn tch ti liu XML, cn phi c thm b nh v kh nng tnh ton tng ng.
Trong hu ht trng hp, thng ip XML ln hn nhiu so vi thng ip nh phn
ch yu l do tnh di dng ca nh dng XML.

Nn nh phn XML

nh dng WBXML gip gim kch thc ti liu XML mt cch ng k, trong nh
dng vn bn ca ti liu XML c chuyn sang mt dng nh phn. nh dng ny
cng c dng chuyn cc trang WML, kch thc c gim xung rt nhiu
bng cch thay cc th, thuc tnh, v cc gi tr thng dng bng mt tp cc th bi
(token) c th cu hnh c. Cng hon ton ging nh vic m ha v gii m cc
thng ip trong thit b WAP c thc hin thng qua mt WAP gateway, vic lin
lc gia thit b MIDP v server J2EE cng c th tng t. B phn tch m nhn
vic m ha v gii m thng ip mt cch ph hp, b phn tch phi h tr
WBXML. V d, b phn tch KXML ca Endydra h tr giao thc ny v cho php
truyn d liu mt cch hiu qu gia client v server. Server ng nhin cng cn
phi hiu nh dng WBXML. Mt cch thay th l, vic lin lc phi c x l thng
qua mt proxy hay mt WBXML gateway.

XML-RPC

XML-RPC l mt giao thc truyn thng ip cc nh cho php thc thi cc th tc t


xa trn mng thng qua HTTP. Client gi mt thng ip XML thng qua HTTP POST
n server phn tch. Mt th tc ni ca server tr v kt qu l response, cng
dng mt thng ip XML, tr v cho client.

Do XML-RPC c c cc u im ca XML. N xy dng rt t tnh nng, cho


php xc nh v truyn cc kiu d liu ging nh cc tham s triu gi cc th tc
t xa theo cch tip cn trung lp nn (platform-neutral). Phm vi ca nh dng ch
cng nh cng tt bng cch gii hn su loi kiu d liu gc (primitive): int, boolean,
string, double, datetime v base64 v hai kiu lin hp (complex): struct v array. iu
ny lm cho giao thc c bit thch hp vi cc ng dng J2ME v kt ni mng in
thoi di ng bng thng hp.

Nhc im y, cng ging nh vi XML, l nn tng J2ME khng cung cp bt k


h tr tch hp no cho XML-RPC, v n cn phi da vo cc gi b sung nh KXM-
RPC ca Enhydra trin khai ng dng trn thit b. Gi KXML-RPC c xy dng
trn nn ca KXML v chy kh tt vi ch 24KB ti nguyn thit b bao gm KXML.
Cc m ngun lin quan ca XML-RPC cng cung cp cho vic ci t im lin lc
tng ng ti server. Mt v d ca n l Apache XML-RPC da trn nn tng Java
ca T chc phn mm Apache (Apache Software Foundation), c th c p dng
vi Tomcat Servlet engine.

SOAP
Simple Object Access Protocol (SOAP). u tin Microsoft pht trin giao thc ny
cng vi Useland p ng nhu cu ca cc nh pht trin mun pht trin cc ng
dng phn tn vi cc cng ngh ca Microsoft. SOAP v cc phin bn trc ca
XML-RPC c cng ngun gc. Tuy nhin, khng ging nh SOAP, XML-RPC c
ci tin v khng gia tng tnh phc tp. Vic nh ngha phc tp gip cho cc giao
thc m rt linh ng, iu ny gii thch v sao n l chun trong thc t cho vic gi
hm t xa bng XML trn HTTP.

ng tic l, vi cc nhc im vn c ca lnh vc di ng, n dn ti nhiu d liu


tha m khng lun lun cn n, nhng chim nhiu ti nguyn. c t giao thc
hin ti l 1.2 v ngoi tp tnh nng ca XML-RPC, n cung cp cc tnh nng thm
nh tnh quan tm khng gian tn (namespace awareness), c ch nh kiu d liu,
v vic truyn d liu header b sung. SOAP cng c cng mt hn ch, J2ME khng
cung cp bt k h tr no cho n. Cc client cn h tr SOAP cn phi tch hp trong
cc chc nng ca ng dng. Trn u cui client, mt gii php l dng Enhydra ME
project-kSOAP. Tuy nhin, gi kSOAP yu cu t nht 41 KB b nh, l mt gnh nng
cho ng dng trn thit b.

Trong trng hp ny, ta phi bo m b nh v bng thng yu cu c th tha


mn. ng nhin server cng cn phi h tr SOAP. Pha server th c nhiu gii
php, c th dng d n m ngun m Apache SOAP (c) hoc d n Axis mi hn,
Axis nn dng cho cc d n mi. Axis cng thuc Apache.

Ti u ha bng Proxy

Ta kho st nhiu ty chn khc nhau cho vic trao i d liu client/server thng
qua HTTP. Ty thuc vo mc ch ca ng dng, ta c th quyt nh s dng gia
giao thc nn theo mnh vi cc giao thc linh ng nhng di dng tr thnh
chun c s dng rng ri. Nu ta mun kt hp cc u im ca cc phng php
i lp ny, th c mt gii php kh th v s dng mt proxy server hoc mt
gateway gia MIDP client v server J2EE. Nh ta cp trn, thng ip XML c
th c nn thng qua WBXML gateway.

Tng t nh vy, ta cng c th thc hin mt proxy cho giao thc c quyn,
chuyn n thnh giao thc chun nh XML-RPC hay SOAP. Nh vy, d liu c
chuyn t MIDP client n proxy bng mt giao thc nh chng hn nh mt giao thc
nh phn hay WBXML, ti thiu ha kch thc thng ip v tn dng tt hn bng
thng hn ch. Proxy, n lt n, ng vai tr nh mt client n server J2EE v dch
request ca giao thc nh thnh giao thc da trn XML ca server v ngc li.

Dng proxy, ta c kh nng kt ni ng dng n mt server ang tn ti vi s gip


ca giao thc c ti u ha, v d server c th ang h tr SOAP hay XML-
RPC. iu ny c u im l kh nng lin kt v hiu sut u c nng cao. Mt
khc, cn phi xem xt mt vn l s gia tng phc tp ca ton b h thng s
gy kh khn cho qu trnh pht trin ng dng.

Hnh 3. M hnh mu dng Proxy

You might also like