Professional Documents
Culture Documents
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.
* 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
Khng nh ngha:
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.
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.
Hnh 1. MIDlet
3) Hm to (Constructor)
4) startApp()
5) pauseApp()
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.
To (Created) Hm to MIDletExample() c gi mt mt ln
resumeRequest(): Yu cu vo ch hot ng
notifyPaused(): Cho bit MIDlet t nguyn chuyn sang trng thi tm dng
notifyDestroyed(): Sn sng hy
V d: X l nt nhn Exit
Cc trng yu cu
V d mt tp tin manifest.mf:
MIDlet-Name: CardGames
MIDlet-Version: 1.0.0
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
Tp tin JAD cha cng thng tin nh tp tin manifest. Nhng n nm ngoi tp tin
JAR.
Hnh 2 . Phn cp lp ha
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.
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
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
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
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
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(String str)
Hnh 1. Lu tr bn ghi
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.
Hnh 3. Lc bn ghi
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:
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.
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.
protocol:address;parameters
Connector.open(<protocol>:<address>;<parameters>);
Socket: Connector.open(socket://199.3.122.21:1511);
Datagram: Connector.open(Datagram://19.3.12.21:1511);
Files: Connector.open(file:/filename.txt);
HTTP: Connector.open(http://www.sonyericsson.com);
Tr v mt i tng Connection
Hnh 2 . Cc lp kt ni
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.
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}
c = Connector.open("datagram://192.365.789.100:1234"); // Ch client
c = Connector.open("datagram://:1234"); // Ch server
Giao din InputConnection dng thc hin mt lung nhp tun t d liu ch c.
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.
url = http://www.asite.com/cgi-bin/getlocation.cgi?location+name=abc&zip=12345
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
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 ){}
}
}
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 ){}
}
}
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.
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.
* 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
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.
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
* 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
* Mediation ca domain:
* 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.
c t MIDP 2.0 pht biu rng c HTTP v HTTPS bt buc phi c h tr.
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
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.
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.
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.
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.
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
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.
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
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.
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.