You are on page 1of 43

Find best mobile with best price

www.thongtinmobile.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

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- 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 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);

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

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:

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 (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 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 (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.

Find best mobile with best price


www.thongtinmobile.com

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

Find best mobile with best price


www.thongtinmobile.com
Cc vn khi thit k v thc hin
Ta xem xt mt s vn khi thit k v thc hin cc ng dng enterprise khng
dy.
Xy dng ng dng khng dy c nhng rng buc c th. V khi thit k cc ng
dng khng dy, ta s gp phi ba vn sau: rng buc thit k (design

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.

Find best mobile with best price


www.thongtinmobile.com

You might also like