Nghiên cứu Java Mobile và xây dựng ứng dụng minh họa.
Trang 1BỘ MÔN MẠNG MÁY TÍNH - VIÊN THÔNG
DANG NGUYEN KIM ANH - ĐÀO ANH TUẦN
NGHIEN CUU JAVA MOBILE
VA XAY DUNG UNG DUNG
MINH HOA
KHOA LUAN CU NHAN TIN HOC
TP.HCM, 2005
Trang 2BỘ MÔN MẠNG MÁY TÍNH - VIÊN THÔNG
DANG NGUYEN KIM ANH _ 0112424 ĐÀO ANH TUẦN - 0112451
NGHIÊN CỨU JAVA MOBILE
VÀ XÂY DỰNG ỨNG DỤNG
MINH HỌA
KHÓA LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN
Thay NGUYEN MINH TUAN
NIEN KHOA 2001-2005
Trang 3Sau hơn năm tháng tìm hiểu và thực hiện, luận văn “Nghiên cứu công nghệ Java Mobile và xây dựng ứng dụng minh hoạ” đã cơ bản hoàn thành Đề đạt được kết quả này, chúng tôi đã nỗ lực hết sức đồng thời cũng nhận được rất nhiều sự
quan tâm, giúp đỡ, ủng hộ của các thầy cô, bạn bè và gia đình
Trước hết, chúng em xin gởi lời cảm ơn chân thành đến Bộ môn Mạng máy
tính và Viễn thông, Khoa Công nghệ Thông tin, trường Đại học Khoa học Tự nhiên
và các thầy cô đặc biệt là Thầy Nguyễn Minh Tuấn đã tận tình giúp đỡ, hướng dan chúng em hoàn thành luận văn này
Chúng tôi rất cảm ơn các bạn bè trong khoa; các anh chị, các bạn trong cộng
đồng Java Việt Nam đã bên cạnh ủng hộ, đóng góp ý kiến cho chúng tôi trong quá
trình thực hiện luận văn
Và chúng con cũng xin chân thành cảm ơn gia đình đã luôn động viên, tạo
điều kiện tốt nhất cho chúng con học tập và hoàn tất luận văn
Luận văn đã hoàn thành với một số kết quả nhất định, tuy nhiên vẫn không
tránh khỏi sai sót Kính mông sự cảm thông và đóng góp ý kiến từ các thầy cô và
các bạn
Thành phô H6 Chi Minh, thang 7 nam 2005
Dang Nguyén Kim Anh - Dao Anh Tuan
Trang 4P0081) 0077 1
Phan 1: Kién thie nén tang J2ME .ccccscscssssssssssssssssssssessssssssssssssesssssssesens 5
Chuong 1: Tong quan về J2ME - 5-5 5< << SsxEsEseseEeessseseseseseeeree 5 1.1 Giới thiệu J2ME (Java 2 Micro EdIfion) << «<< sseeesessssssss 5 1.2 Lý do chúng ta cần J2ME - G6311 EE9E9 5E xxx cvccnt ng gerreg 6 1.3 Các thành phần của J2lME: - 6 SE kkSEEEEE9ESESEEE SE ctct cv gvrerree 7 IESNR6Ua vai 0 11 7 IESZu(0i 112.31 9 1.3.3 May 0.5 10 Chương 2: Giới thiệu CLDC và MIIDÏP 00G 5G G539 5565555656 13
“9° ?0Ô® ố.ố.ố 13 2.1.1 Yéu cau phan CỨTĐ:: cành HH HH 13 2.1.2 Yêu cầu phần mỀm:: =2 KẾ se HN xxx 13 2.1.3 May 0à 1 13
“X00 11 ¬ ố.ố 16 2.2.1 Yéu cau phan CỨTĐ:: cành KH HH re 16
"4:80 0u 8n .a 16 2.2.3.Cau tric MID Profile: .c.c.cdlcctesessbesessscsesscssessesesscssetsesesssavetsesesseaeens 16
“5/0001 20 18 2.2.5.Môi trường phát triển ứng dụng J2ME - - + + sex sEcxceexevced 22
Chương 3: Các van đề cơ bản của chương trình MIDIet 25 3.1 Cấu trúc cơ bản: :isx: à.cc 2t 2t t2 E2 12112211211211211111.11.11 xe 25
3.2 Xây dựng một ứng dụng MIDÏÌet: << < << c5 11113 SSSSSSSSssska 25 3.3 ru 00 26 3.4 Lớp MIDlIetStateChangeEXC€pfIOI: << <5 551 S13 Sa 28
SH aaaaáidđiiđiittaầầồỶỒỒ Ô 28
SN v09.) - -: 30 3.7 Quan ly cde sur kién (2,0 n na aố.ố 32 3.7.1:Command & CommandLLISf€nI€T << << << 5553 *++++sssssssssseessa 33 3.7.2 Item va ItemSfatelLISf€TI€T 1133333111111 11 111188111111 ng vn 38 Chương 4: Giao diện đồ họa cấp €ao << 5 5 5c scseeeeecscscseseseeee 40 4.] SCT€€N: QQ SH TT và 42 4.2 FOTI: cv 43
AB THOM .c‹3 45
"Ăn? ¡lan 46
“SUAC 0 48 AB.3 String [tems 1n ae 51 ABA TextField: oo cccccccccccccsssssscccecessessneceecceseeseeeeeceseeneeeeeesseesnaeeeesessessaeeseseees 53
A 3.5 CHOICCGLOUP:! o eeeceeeescssessssscceeeeecceeeeeeeseesssnneeaeeeeeecceeeseeeeeesnsaeaeeeeseeeeeeees 57
“SN Ni (00/80 14302 0n 61
4.4 UISẨ: Q0 nu 1 1 1 1 1x56 64
Trang 55.1.3 Bắt sự kiện trong các đối tượng TVAS: cv 82
co on na - 85
=5 5i 17a e 4a.a 87 5.2 Graphics: esecceeeessscesssssssceesscccccessssssessssssscecssccccccssesssessg@MMeccessccccccssessesessssseeees 89 5.2.1 Mau on G3 90 5.2.2 NẾT VỀ ng ng HT TH kh 93 0U na 98 5.2.4 Vẽ các đối tượng hình 200)00)0/72/202)0000//4 eens teateneeateneneees 101 5.2.5.Cac phuong thức tịnh tiến đối tượng: c6 x+k+x‡EeEeEsrsrerererees 105 5.2.6 Vùng xén (C]ipping T€Ø1OTNS): -c c1 61111201111 1n 311111 xk2 105
Chương 6: Lưu trữ thông tin với RÌMS 00G SG 35355555 653 106
6.1 toà 089/15 ố 106 6.2 Duyệt danh sách Record với ReeordEnumerafion - - - -<<< 115 6.3 Sắp xếp bang RecordComparator ccccccscscsssssssssssesssessssvecsesesesesesscncnees 117
6.4 Lọc record với RecordIÏ{€T -:: eeesceccccceessscccccceeessesccssseeesseseses 119
6.5 Nhận thông điệp khi Record Store thay đỔi + sex sxsxsxexd 121 6.6 Xử lý lỗi khi thao tác với Record Store sscscesesesessscesseseevesseeeeees 122 Chương 7: Kết nỗi mạng voi Generic Connection Framework (GCF) 124
TL Gi) thiGu GRC eee ccccccccssccccessssceceseneeeeesesseeecseeseeeesesseeeeseeeeseeseaeeees 124
7.2 Lược đỒ Ớp S111 51 1111111 10111111111 1111111 111111 cerkrkd 124
7.3 Kết nỗi HTTTP: -:-©5+ +22 221221121121122112111112112111111211 1 e0 127
7.3.1:Khởi tạo kẾt nối: . -¿-5c: 2tr2 22211221121 127
7.3.2.Các đặc điểm của kết nỗi HTTP bằng J2ME: . - +: 130 7.3.3 Thông số kết nói: - tk kSE 139191919 3 11111 1 111 1111111515113 137 7.4 Kết nối socket Datagram (UP) ¿6k k+E#E#E#E+EeEeEeEEkrkrkreeeeeeed 138 7.5 Kết nỗi TCP sOCkef - - + St x11 E111 111111115 11111111111 141 7.6 Gti va nhAn SMS woo ằe 144 Phân 2 : Web Serviee và Ứng dụng "Đăng Ký Học Phân"' 149
8.1 Ứng dụng phân tán (Distributed Application) << sssececxcxsxeed 149 8.1.1 GiGi thi 149 8.1.2.Cac van dé nay sinh trong hệ thông ứng dụng phân tán 150 8.1.3.Hạn chế của những mô hình ứng dụng phân tán trước đây 151
8.2 Web Service .ccccscccsecccsccceccccscccscccscccesccuscccesccesccescesccescesssecesscnssceencees 152
Trang 66.2.3 Hoạt động của Web S€TVICC - 0000011 v1 1 TH ng 00215111 kg 152
8.2.4.ƯUu điểm của web S€TVỈC - 5 s52 E111 11111111111 E xe 155
8.3 Các thành phần chính của Web Se€FViC€ - - -ccctsesEsEEEkrkrkrkeeeeeed 157
§.3.1.SOAP (Simple ObJect Access ProtocolÌ)) -cccccc++ssssssssssss2 157
§.3.2.WSDL (Web Service Definitlon LanØuàØ©) . -<<<<<<<<ss+2 162 Chương 9: Ứng dụng đăng ký học phân - 2-55 s-seseseeeses 172
VI N?, ái Noi 0ï 07 172
"vi 172 9.1.2 Các chức năng chính: . - 5-5 2221111111111 1111111111588 xx5 172 9.2 Kiến trúc chương trình: . - «+ sSsSxStSSk SE EEEEEESESEEkEkrkrkrkreeeeed 174
9.2.1 Mơ hình kết nối: ¿52 55c 2x2 174
9.2.2 Mơ hình bảo mật (mã hố pasSWOTCÌ): <<2-<s-cccsSss s55 x%2 176
9.3 Phân tích - thiẾt kế: .+ccc+rtHẾẾt tt v28 111 177
9.3.1 Mơ hình uS€ CaS€: TS HH TT ng nen 177
9.3.2 Đặc tả một số use case chính: c¿- is ca HỆ te te EeEvEreEerrerersrrres 178
9.4 Thiết kế mơ hình dữ liệu: - -22+c©5¿+5+2EEvEx+2EveExerrterkerrrrrkerrere 183
9.4.7 Thiết kế ÏỚp): stẾT- sex v31 11919191 3111111101111 H1 1101111111 xe 191
9.5 _ Cài đặt - thử nghiỆm: GG G10 000001111111199331 111111111 kg vv 192
9.5.1 Yêu cầu phần CỨng: -¿- - kkkx#E9E9E SE vcv cv E115 ereei 192 9.5.2 Yêu cầu phần mmÈïm: ⁄ - - kEE9E#E9EEEE SE eEEEEEeEeEeEerrerees 195 9.5.3 Giao điện chương trÌnh: 5 2 2 3222211111111 1111111111118 xx2 195 Chương 10: Tổng 0 205
HN a ên.::tỪ 205
10.2 Hướng phát triỀN: - «<< S31 E1119E5111 111111 11v ng greg 207
Tài liệu tham khảo << << <5 5 3 59 6 8 00 9 956968888889899999999956 210
Phụ Lục A: Hướng dẫn sử dụng cơng cụ Sun Wireless ToolKit 2.3 211
Phụ Lục C: Giới thiệu các thư viện JSIR . - 55555 s5SSSSs2 222
Trang 7Hình 1.1 Các thiết bị J2ME hỗ trợy ¿52222 22t2ExtEESESEEtErrrkrrrrrrrerrrre 6
Hình 1.2 Các thành phần của J2ME - - + 2S E+E#ESEEEE+EEESEEEEEEEEEEEEEEErkrkrrrreri 7
Hình 1.3 Configurations và các thiẾt bị, ¿+ k+x+ESEESk+kEESEEEEEEkEEEEErkrkrkrrrreee 9 Hình 1.4 Câu trúc chương trình J2ME ¿2 - + +EE+E+E£E+ESEEEEEEEESEeEErkrkrrereee II Hình 1.5 Cấu trúc chương trình MIIDP - - 6 E9E+E+ESESESEEEEEEEEeEeEekeereeeeree 11
Hình 2.1 Cau tritc thiết bị IMITD -5¿5+5++2++2Y+2EEtEESEESEEEEErrrkerkrrrrrkervres 17
li: 08 N0 0ì)ii:ii053 7777 a 34 Hình 3.2 Commaand LabeÏ - 1111111118 8883113119898895311 1111111111118 x.2 36
Hình 3.3 Ánh xạ sof†-buffon - 5 tt Sa S 113211811 E5151115118 1151111511111 E111 Erred 36
Hình 4.1 Sơ đồ các lớp giao diện đồ hoạ, ¿- - Sa HẾT tt tk Erkrkrrereee 40
Hình 4.2 Giao diện đối tượng DateField - - <Ế sỆks sac ekekeeeree 46
Hình 4.3 Giao diện đối tượng Gauge chế độ tương tác ‹z vs 555cc sesesescee 48 Hình 4.4 Giao diện đối tượng Gauge chế độ không tương tác . - +: 49 Hình 4.5 Giao diện đối tượng Stringlfem -c Ềkss EEEEckcekekekekeeeeeree 52
Hình 4.6 Giao dién d6i tuong TextField 2 cu esescscstdesscsssssssscsescscsescscscssesseevevens 56
Hình 4.7 Giao diện đối tượng ChoIceGroup chế độ một lựa chọn - 59 Hình 4.8 Giao diện đối tượng ChoIceGroup chế độ nhiều lựa chọn - 60
Hình 4.9 Giao diện đối tượng List dạng menu - - - + + + Sex £k+kexeeeeeesree 67
Hình 4.10 Giao diện đối tuong List cho phép chọn nhiều lựa chọn - 68
Hình 4.11 Giao diện đối tượng TextOx - - 6 E133 SESEEEExSkckckekekekrererree 71
Hình 4.12 Giao diện đối tượng Á Ï€FẨ .:s¿ - c3 3 SE SE SEEEEx ket gkrerree 76
Hinh 4.13 Giao diện TIICK@Y::::: c5 << E331 181113030 11111 3 1v ve ree 77
Hình 5.I Các phương thức vẽ đường cong . - << 111 ereeeesesssssss 94 Hình 5.2 Các phương thức vẽ hình chữ nhật .- <5 5S + **++SSsssrrssssss 95
Hình 5.3 Các phương thức hỗ trợ vẽ 'Tex( + - + - E13 xxx EErreree 97
Hình 5.4 Các định dạng trong Text Graphic << +11 seeeeeeesesssssss 97 Hình Š.5 Các phương thức tạo ÍOI G1 12211 111119111111 111111 ng, 100 Hình 5.6 Vẽ bằng đối tượng Immutable Image . 2-2-6 + +E+E+EsEsEeEerereei 101 Hình 5.7 Vẽ bằng đôi tượng Mutable Image .- ¿6 6 k+k‡E‡EvEeEsEererrerees 102
Hình 5.8 Các định dạng vị trí trong GraphiCS 55 c++**55eeeeesss 103
Hình 7.1 Lược đồ các lớp trong thư viện GCF 2 6k k+k£E#EeEeEeEererererees 125
Hình 7.2 Kết nối UP - ¿+ 22222+‡E+SEE221221211211271211211711211211111211 1c 138 Hình 7.3 Kết Nối TCP - ¿6-52 222 1221221121122121121117121121111121121111.11 1 c0 141
Hình 7.4 Lược đồ lớp thư viện WIMA - 5+ 2S SE+E‡E+ESEEEEEEEEEEEErkrkrkerererkrkd 145
Hình 8.I Hoạt động của Web S€TVIC€ c1 HH HS SH HH9 20011111 nen 152 Hình 8.2 Một client truy xuất đến nhiều web services cùng lúc -. «- 154
Hình 8.3 Một web service có thê triệu tập đến các web services khác 155
Hình 8.4 Web Service EndpOITIT - - - - - - - << << 10000111 111111 1111198825111 11111 re reg 162 Hình 9.1 Kiến trúc chương trình ứng dụng 6xx k+E#E#EeEeEeEererererees 174 Hình 9.2 Mô hình mã hoá paSSWOT( < << <5 5511 11333333111153555555555555Exeree 176
Trang 8Hình 9.6 M6 hinh co sO dif 1i@u we ee eecccccccceesssccccseeeesesccsseeessescsssseeeesesseess 190
Hinh 9.7 M6 hinh LOp cee -+ 192
Hinh 9.8 So d6 cdc man hin oo cecceecseessesssessseeseeesecseecseeseceneeseeeneeseeeseeeneesneeneeesees 194
Hình 9.9 Màn hình weÏCOImG 1101133332211 111 111181111111 1 ng 11 nen 195 Hình 9.10 Màn hình đăng nhập - - (<< << << 551111113313 331311338855555155551xexee 196 0n ¡0886000 - a 197 Hình 9.12 Menu chức năng - 111311310111 1111 1111111198523 1 11111 re rre 198
Hình 9.13 Màn hình đăng ký học phần lý thuyẾt - ¿6 s+s+EsE+EsEsrerererees 199 Hình 9.14 Màn hình đăng ký học phần thực hành 2-5-5 2 2+s+E+s+£s£erezxd 200
Hình 9.15 Màn hình xem thời khoá biỂu - c22⁄6%25+cccc+rxesrvsrresrxrrrrree 201
Hình 9.16 Màn hình xem kết quả học tập « sếẤ tk k+k‡k‡EeEsEsEsrerererees 202
Hình 9.17 Màn hình xem phiếu đăng ký - <Ê% se SÖ‡%xk‡xeEeEeEsEererererees 203
Hình 9.18 Màn hình xem thời khoá biỂu é«c¿ .-c65cccc+2EEsrxesrvsrresrxesrrree 204
Hình 10.1 Hướng phát triển thực tẾ s- 5 + +2 SÖ#x Sex +keEeEeErkrkrkerererered 207
Hình A.I Công cụ Sun Wireless Toolklf 2.3 .- c2 rreees 211 Hình A.2 Man hình chính của công CỤ - -c 2226552555511 1 1111113113335 1xsrrrree 212 Hình A.3 Tạo prOJ€Cf TỚI .- 6 1 2112222239851 11 1111111111111 111111 ke rrg 212 Hình A.4 Các options cho DrOJ€CẨ - cZ c0 0001111111111 1191233111111 1 re 213 Hình A.5 Chỉnh sửa nội dung file Jad và ÌÏar . << << ssseeeesss 214 Hình A.6 Biên dich DFOJ€CẨ 22 2022221113101 1 1111111111111 1880235111111 kg 215 Hình A.7 Đóng gói Ứng dỤụng ¿ 00111111111 1 000 01111 1 kh rrg 216 Hình B.I Tạo proJect Web S€TVIC© ‹ 11H 1 ng khen 217 Hình B.2 Khai báo lớp và hàm - - - - - c5 11322210111 11111318811 1111 1188111111 re 218 Hình B.3 Export nhiều hàm cùng lÚc - + 2 2E k+E+E£EE+E+E+EeEeEeEEzErkerererered 219
Hình B.4 Màn hình thực thị Web Service của ÏIE -cc c2 219
80005 n8 À)á4190 16a ae 220 Hinh B.6 Cong cu Stub CienerafOT - - - -< << c 11113 1111111111588535351 111111 errrree 221 Hình B.7 Các options của công cụ Stub CenerafOr << << << ssseessss 221
Trang 9Bảng 2.2 Cấu trúc file JAA D -¿- - 11113919 5E E191 1111151511111 xxx 20
Bang 3.1 Lop MIDIet i —- dda ốc 27
Bang 3.2 Lop Display ga 29
Bảng 3.3 Lớp DisplayabÌ€ 5 1 1212212111111 111111111111 10003511 1 kg ng 0v 32 Bảng 3.4 Các Command ÏÌYpe - - - - - - - - << << 111111131311131119993311 111111111 ng v2 37 Bảng 3.5 Command và CommandL,1Sf€n€r - << << 1+ #seeeeeeesesssssss 38 Bảng 3.6 Item và ItemSfateL,IS†€TI€T -GGG Q13 000301131119993111 1111111111 kg ng xu 39 0g 8E vi 42
0g 003800 0 44
05g 860i 01 45
015g 8.0003 i0 46
0g Pu a 49
Bảng 4.6 Lớp StringÏfem 1010 Ấn t1 TT ng ngờ 51 Bang 4.7 Cac Rang Buc cua TextField ooo ccccccceessstaccecccceeeeessessssnceeeeeeeeeeeeees 53 Bang 4.8 Lop TextField oo - ` 55
Bảng 4.9 Lớp ChoIceTrOUpD T666 k ng g0 1 ng ng và 58 0g 0080030022117 62
Bảng 4.11 Định dạng [mageÏfem c2 25555 5 2222222313391 1 111EESsssesrsse 62 0g 900380430051 0117 63
Bảng 4.13 So sánh List và CholceOTOUD - c5 5522222202221 1111 11 EESsesesrsse 65 Bang 4.14 LÓP LLISẮ - 26565 0 102000061111191111111 10111111 1111111000311 1k kg v4 66 Bang 4.15 So sánh TextF1eld và TextOX - 111 se 69 0g 080300154 2a aố cá e 79
05g ưu on a.': ằ a 73
05g 6020 5xiJA, na sa 75 05g 68000810 ‹511 218 77
Bang 5.1 Truy van kich thur6c Canvas .c.cccscscsscscscscsscssesssessssssvecsescstsesecscscasasasavevens 79 l0 5m 000i 81
Bảng 5.3 Giao tiếp với Application Manager .ccccccccccscsssssssssesesesesesescececesssevevens 81 in 8n 0 83
0 nha vii0 s0 (6i a ằe Ả 84
0n i0 s06 11 .Ả 85 Bang 5.7 Bat su kién trong Game Action .cccscscccsscscscssssssssescsesessscscscscesasasevevens 86 Bảng 5.8 Sự kiện COIN ẨFỎ G5 2200002222211 1 1111111111111 111111 0 v4 87 Bang 5.9 LOp Graphics 5 i34 90
Bang 5.10 Cac phurong thure V6.0 ccccccccccceeeesssessssnsaeeeeeecceceeesseesessnaaeeeeeeeeeeeeees 93 0i n8 990011 a a 96
ồn 6.82 0 20 .ố.ố a.Ả 96 Bang 5.13 Xu ly Font Chữ 000000 00111111 1111118803111 111kg ng và 98 Bang 5.14 Cac gia tri FOTI{ - 2001010010110 1011311111111 11 11111 ng ng và 99 Bang 5.IŠ Vẽ hình ảnh - 2101011110111 111111 11111180230 6111111 ng ng v2 101
Trang 10Bang 5.18 Vung 017 105 Bang 6.1 M6 hinh Record Store ccccssssssccccccccceeseseesessnsccceeeeeccceeeeseeesesssnaeeeeees 107 l?0158 0928 Pu csviih3i 0777 ^ 109 Bang 6.3 Lop RecordEnumeration . << c5 c s3 3333333333 %%3355555555555sxrres 117 Bảng 6.4 Các giá trị hằng để sắp xẾp r€€OTC cv EEEESEsEererererees 118 Bảng 6.5 Lớp RecordListenes .cccccessssccceccccceeeesseessssnscceceeeccceeeeeseeeessssaeaaeeees 121 Bang 7.1 LOp Comme ctor .cccccccccccccccccceeeeeeeeeeeeeeeeeeceeeeeeeeeeeeeeeeceseeeeeeeeeeseeeseeeeeeeeess 128
Bang 7.2 Mode Kết Nối - - G1111 1191915151311 1111101 1 1101110111101 re 128
Bảng 7.3 Các Request Method chính << 5-5 2 3323333333333 xxxxes 130 Bang 7.4 Các phương thức set/get Request Method -«-<<<<<<++++2 131 Bang 7.5 Các phương thire truy van HTTP Header cccccesdeecssssessssseseseeeeseeeeee 134 Bang 7.6 Lay thong s6 két n6i ccc ccccecccccsccssssssssseescscscesdbensscecscsssssssvevsretevseeeeees 137 Bang 7.7 Lop DatagramConnection .cccccccccccccceesessnsbbecsccceestbecceeeeesseessssnaaeeeees 139 Bang 7.8 Lop Datagram .ccccccccccccccceeeeeeeeeeeeeeeeeecadeeaneceecccccececesececeeeeseeeeeeeeeeeeass 140 Bảng 7.9 Thuộc tính của SocketConnecCfIOT ¿ - s65 5522333 *++*35555555555exeess 142 Bảng 7.10 Lớp SocketConn€CfIOTi 955cc 11130111111 111118553531 1111111 re ree 143 Bang 7.11 Các interfaces chính của WÌMA c 2216641 c0 0001 H HH 11111 re reg 144 Bảng 9.1 Danh sách các se ae .z¿ - c2 2c cc c0 0111311111111 1118333311111 1 11 rrrrree 178 Bảng 9.2 Table ChuyenNganh c0 11H SH ng 000111 1 khe 184 Bảng 9.3 Table SV HN HT HH ng g0 T000 6 1 ke 184 Bang 9.4 Table MonH0e a 185 015g T58; 560.1 ae 185 lồn 50 NJN;1 400 nnnndạ acc 185 Bảng 9.7 Table Lop_ Mon L/T” - - c1 011 1111111111111188823311 1111111 re ree 186 Bảng 9.8 Table Lop_MonÏTÌH - c1 11 1113111111111188853311 1111111 rrrree 187 Bảng 9.9 Table PhanCongTÌH-‹‹ - ( ( -c02010101011111111111111115858343511 111111 rrrre 187 Bảng 9.10 Table DangKyT - 0111011111111 13111 1111111885551 111111 errrree 187 Bảng 9.11 Table DangKy TH - - (<< <11011111111111 1111115588535 erree 187 Bang 9.12-Table ThongBao . 0030010101 11111 1111111118002 11 11k khe 188
Trang 11
API Application Program Interface
CDC Connected Device Configuration
CLDC Connected Limited Device Configuration
Đặc tả qui định cõc thư viện gốc J2ME phải hỗ trợ cho một dúng Configuration `
phón cứng
DES Thuật toõn mọ hụa khụa bợ mật 64 bits
GCF General Connection Framework
IIS Internet Information Services-Web server chuan trờn Windows J2EE Java 2 EnterpIse Edition, phiởn bản Java cho những dự õn lớn
J2ME Java 2 Micro Edition, phiờn ban Java cho những thiết bị nhỏ
Java 2 Standard Edition, phiđờn ban Java ra doi dau tiờn, danh cho
xẻ PC thừng thường
JCP Tổ chức Java Community Prựcess
JDK Java Development Kits
Java Specification Requests, nhitng yờu cau can bố sung cho cõc
IS phiờn ban Java
JSR-172 Thư viện truy xuất web service cho ngừn ngữ J2ME
JSR-177 Thư viện mọ hụa vỏ bảo mật cho ngừn ngữ J2ME
KVM Mõy ảo Java cho mừi trường CLDC
MIDlet Tởn gọi chung cho cõc ứng dụng J2ME
MIDP Mobile Information Device Profile
Multimedia Message Service, tin nhan hinh anh, 4m thanh, video
Wms cho di động
PDA Personal Digital Assistant
Profile Cac tap thu viờn cap cao dinh nghia trờn nờn Configuration
RMS RecordStore Management System, cơ chế lưu trữ của J2ME
Trang 12
SOAP Simple Object Access Protocol, dinh dạng thông điệp cua Web
Service
Symbian Hệ điều hành cho điện thoại di động của hãng Symbian
UDDI Universal Description, Discovery, and Integration
Web Service | Giao thic goi ham tu xa dua trén XML va HTTP
WMA Wireless Message API
WSDL Web Service Definition Language
XML Extensible Markup Language
Trang 13
A)»⁄
Lời Nói Đâu
Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và
theo thời gian, số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động tại Việt Nam ngày càng tăng Cùng với sự phát triển của số lượng thuê bao di động là
sự đa dạng hoá các dịch vụ hướng đến thiết bị di động Ngày nay điện thoại di động
không chỉ còn mang chức năng gọi điện hay nhắn tin thông thường mà còn là một
thiết bị giải trí, tra cứu thông tin rất tiện lợi Do đó, xây dựng các ứng dụng cho điện
thoại di động đang là một yêu cầu tất yếu trong xu thế hiện nay Ngành công nghiệp
phan mém cho cac thiét bi di dong duoc xem nhu mot manh đất màu mỡ và hứa hẹn
đem lại nhiều tỉ đô la doanh thu
Hai hướng phát triển ứng dụng trên điện thoại di động phô biến hiện nay là
sử dụng ngôn ngữ C++ trên nền hệ điều hành Symbian và J2ME Các ứng dụng viết trên nền Symbian có các ưu thế truy cập trực tiếp các tài nguyên của điện thoại cũng
như hỗ trợ hệ thống tập tin, thứ mục như máy tính cá nhân vì được hỗ trợ trực
tiếp bởi hệ điều hành Tuy nhiên hệ điều hành Symbian lại có kích thước khá lớn
nên chỉ có ở các thế hệ điện thoại tương đối cao cấp, và xây dựng ứng dụng dùng
Symbian API cũng phức tạp hơn
Đối trọng với Symbian API là công nghệ J2ME với kích thước nhỏ gọn,
tiện dụng, được hỗ trợ bởi hầu hết các thế hệ điện thoại mới ra đời, kế cả các điện
thoại có hệ điều hành Symbian J2ME không những là một ngôn ngữ hướng đến các
thiết bị di động mà còn là ngôn ngữ chính để lập trình trên các thiết bị gia dung, the
tín dụng điện tử và các thiết bị thông minh khác Chúng ta có thể nói đối tượng của ngôn ngữ J2ME là rộng hơn rất nhiều so với C++ trên nên Symbian Tai thoi diém
hiện tại, ngôn ngữ J2ME không hỗ trợ được nhiều tính năng như C++ trên Symbian
nhưng lại có những ưu điểm trội hơn
J2ME là một ngôn ngữ nhỏ, gọn nhưng rất chặt chẽ và dễ năm bắt, với những lập trình viên đã có kinh nghiệm với Java việc lập trình với J2ME trở nên rất
Trang 14dễ dàng J2ME còn là một ngôn ngữ được các tổ chức mã nguồn mở ủng hộ mạnh
mé và phát triển rất nhanh chóng JCP (Java Community Process- http://www.jcp.org) la một chương trình do Sun thành lập luôn tiếp thu các ý kiến
và đưa ra các đặc tả mới dành cho Java nói chung và J2ME nói riêng Các đặc tả này thường có tiếp đầu ngữ JSR và là các tính năng bố sung mới cho J2ME
Những JSR quan trọng có thể được nhắc đến như JSR-82 (Bluetooth), JSR
205 (Gui tin nhan SMS, MMS), JSR-172 (Web service), JSR-177 (Security and Trust Services), JSR 184 (3D Game) Các đặc tả này ngày càng phong phú và phan nào phát triển nhanh hơn cả sự phát triển của phần cứng
Thật khó so sánh giữa các dòng ngôn ngữ lập trình với nhau vì mỗi loại đều
có ưu và khuyết điểm riêng Trong luận văn của mình, chúng tôi chọn nghiên cứu
về J2ME vì những ưu điểm khá rõ ràng đã nêu trên, mặt khác chúng tôi cũng muốn thử sức ở một lãnh vực khá mới mẻ là tiếp cận với phần mềm mã nguồn mở
Về chương trình ứng dụng, tính khả thi và thực tế ngày cảng được đề cao Chúng tôi nhận thấy xu hướng mở rộng các ứng dụng trên web sang điện thoại di động đang được chú trọng Thương mại điện tử (e-commerce) đang tiễn dần sang thương mại di động (m-commerce): Với thực trạng Việt Nam hiện nay, số người sở hữu máy vi tính cá nhân, đặc biệt là máy tính xách tay chưa nhiều nhưng tỉ lệ số
người có điện thoại đi động lại khá cao Việc chuyển các ứng dụng thương mại từ
môi trường web sang môi trường di động sẽ khiến sự tiện dụng tăng cao, số người
sử dụng dịch vụ trực tuyến chắc chăn sẽ tăng nhanh vì đối với nhiều người chiếc điện thoại di động dễ sử dụng hơn rất nhiều so với chiếc máy tính "phức tạp và khó
hiểu"
Ứng dụng chúng tôi chọn thực hiện để bước chân vào lãnh vực khá mới mẻ
này là ứng dụng "Đăng Ký Học Phần" qua mạng di động Đối với sinh viên khoa công nghệ thông tin, hệ thống đăng ký hoc phan SMS qua môi trường web là một ứng dụng rất quen thuộc Chúng tôi muốn phát triển ứng dụng của mình như một
mở rộng của hệ thống đăng ký học phân này trên điện thoại di động nhằm hỗ trợ các bạn sinh viên có thê sử dụng các tiện ích của hệ thông mà không cân phải có máy
Trang 15tính kết nối mạng Với ứng dụng nảy, tính tiện dụng của hệ thông đăng ký học phần
SMS đã được mở rộng Chỉ cần có một điện thoại di động hỗ trợ GPRS các bạn sinh
viên có thế đăng ký học phần ngay cả khi đang về quê ăn tết ở những vùng internet chưa phố biến nhưng đã phủ sóng di động hay khi đang di chuyên trên tàu xe Vì
một số điều kiện đặc biệt của điện thoại, hiện nay ứng dụng này chỉ chạy trên
chương trình giả lập Tuy nhiên, chúng tôi hi vọng trong một tương lai rất gần, khi
các thế hệ điện thoại mới có giá thành vừa phải ra đời và hỗ trợ một số công nghệ
như WebService, mã hoá mà chúng tôi đang sử dụng để xây dựng phần mềm thì ứng dụng này có thể được áp dụng rộng rãi trong thực tế cho sinh viên của khoa
Cần phải nói thêm, ứng dụng hiện tại hoàn toàn có thể sử dụng được trong thực tế
Việt Nam nhưng có một số đòi hỏi về thiết bị khá đắt tiền (xin xem thêm Chương
10, phần Kết Luận), chứ không chỉ mới là lý thuyết trên giấy tờ
Với việc xây dựng thành công hệ thống đăng ký học phần qua mạng điện
thoại di động, chúng tôi rất tự tin về việc xây dựng các hệ thống thương mại di động
lớn hơn Trong tương lai gần, khách hàng có thể ngôi trên taxi mua vé máy bay, đặt chỗ khách sạn, xem lại tài khoản ngân hàng với chiếc điện thoại di động nhỏ bé
Chiếc điện thoại di động sẽ trở thành một công cụ giao dịch không thể thiếu trong thời đại mới, thời đại của thương mại điện tử toàn cầu
Luận văn được trình bày thành hai phần lớp:
Phần 1: Giới thiệu về lý thuyết nên tảng của J2ME, các thư viện, các kỹ thuật lập
trình, đóng gói ứng dụng di động
Chương 1 Tổng quan về J2ME : Giới thiệu tong quan về J2ME, các đặc điểm và
các thành phần con
Chương 2 Giới thiệu CLDC và MIDP: Trình bày chỉ tiết về hai thành phần quan
trọng của J2ME dành cho điện thoại di động, môi trường phát triển ung dung J2ME
Chương 3 Các vẫn dé cơ bản của chương trình MIDIet: Chương này sẽ trình bảy những đặc điểm quan trọng nhất của một ứng dụng J2ME, các bước cơ bản để xây dựng ứng dụng này
Trang 16Chương 4 Giao diện đồ họa cấp cao: Trình bày về thư viện đồ họa cấp cao như Form, LIst, TextBox trong J2ME
Chương 5 Giao diện đồ họa cấp thấp: Trình bày vẻ lập trình đỗ họa cấp thấp, các phương thức vẽ, xử lý font, game action trong J2ME
Chương 6 Lưu trữ thông tin với RMS: Trình bảy về Record Management System, một cơ chế lưu trữ riêng của J2ME
Chương 7 Lập trình mạng vơi GCE: Trình bày về khả năng lập trình mạng trong J2ME
Phần 2: Giới thiệu về Web Service, một công nghệ rất mới để xây dựng các ứng
dụng thương mại điện tử phân tán và giới thiệu chỉ tiết về ứng dụng cùng những đánh giá, tổng kết
Chương 8 Giới thiệu về ứng dụng phan tan va web service
Chương 9 Trình bày chỉ tiết về ứng dụng "Đăng Ký Học Phan"
Chương 10 Đánh giá, tổng kết các kết quả đạt được và hướng phát triển trong tương lai
Tuy đã đầu tư khá nhiều thì giờ và công sức vào luận văn này nhưng chắc chắn chúng tôi cũng không tránh khỏi những sai sót Rất mong nhận được ý kiến đóng góp và sự thông cảm của quý thây cô và các bạn! Xin chân thành cảm on!
Kim Anh — Anh Tuấn
Trang 17Phân 1: Kiến thức nên tảng J2ME
Chương 1: Tổng quan về J2ME
J2ME là một nhánh của ngôn ngữ lập trình JAVA được phát triển nham hướng
tới việc lập trình cho các thiết bị “nhỏ” (micro) có bộ nhớ, khả năng hiển thị và xử
lý hạn chế
Ban đầu Java được xây dựng chỉ gồm một phiên bản duy nhất, ngày nay được
biết đến với tên J2SE (Java 2 Standard Edition), với phương châm là “viết một lần,
chạy trên mọi môi trường” (“Write once, run anywhere”) Java được hình thành trên
ý tưởng xây dựng một ngôn ngữ mà lập trình viên chỉ cần viết một lần duy nhất nhưng ứng dụng có thể chạy trên bất cứ môi trường nảo có hỗ trợ máy ảo Java (Java
Virtual Machine) Để làm được việc này, Java sử dụng một phương thức biên dịch
mã nguồn tương đối khác so với các ngôn ngữ lập trình truyền thống Bộ biên dịch Java không biên dịch mã nguồn trực tiếp sang mã máy mà biên dịch sang một dạng
mã trung gian mà máy ảo Java hiểu được (mã bytecode) Khi có nhu cầu sử dụng ứng dụng, máy ảo Java sẽ đọc mã trung gian này và dịch ra mã máy và thực thi; nhờ vào quá trình trưng gian đó một ứng dụng Java có thể chạy trên bất kỳ môi trường nào có cài đặt máy ảo Java tương thích
Được giới thiệu lần đầu vào năm 1995, ngày nay mục tiêu Java nhắm đến cũng
đã thay đối khá nhiều Java hiện nay không chỉ nhắm đến họ máy tính để bàn đơn
thuần; hai năm sau ngày đầu được ra mắt, một phiên bản Java mới là J2EE (Java 2
Enterprise Edition) đã được giới thiệu nhăm tới việc phát triển các ứng dụng có qui
Trang 18đem lại nhiều tỉ đô la doanh thu Một thực tế đặt ra cho các nhà phát triển phần
mềm trên các thiết bị này là hiện nay không có một chuẩn hóa nào dành cho các nhà sản xuất phần cứng Các thiết bị trên thị trường hiện nay rất đa dạng và mang nhiều
đặc điểm cũng như cầu hình khác nhau Trước thực tế đó, việc có thể chạy trên
nhiều môi trường là một lợi thế rất lớn của ngôn ngữ Java Các nhà phát triển Java
đã cho ra đời ngôn ngữ J2ME hướng đến việc phát triển phần mềm cho các thiết bị
di động Ngôn ngữ J2ME thực sự là một ngôn ngữ nhỏ gọn, dễ năm bắt, chặt chẽ và
thích hợp cho các thiết bị.eó khả năng hạn chế Các thiết bị di động trên thị trường hiện nay, đặc biệt là điện thoại di động hầu hết đều hỗ trợ rất tốt ngôn ngữ J2ME và
J2ME thực sự đã trở thành một trong những ngôn ngữ phố biến nhất trong lãnh vực
2 & Ƒ lập trình di động
Cellular phones
navigational systems
Automobile entertainment
TV set-top boxes systems | Point-of-sale
systems
Hình 1.1 Các thiết bị J2ME hỗ trợ
Trang 191.3 Các thành phân của J2ME:
có kích thước vật lý khác nhau nhiều lần và cho dù cùng kích thước những thiết bị
này vẫn có khả năng xử lý cũng như hiến thị khác nhau ( những chiếc điện thoại
hiển thị 12,000 pixels cho đến những chiếc PDA 20,000 pixels) Để đáp ứng được
nhu cầu khác nhau của những thiết bị này, bản thân ngôn ngữ J2ME cũng được chia thành những thành phần nhỏ hơn
Ching ta sé tim hiéu hai khainiém mdi la Configurations va Profiles
1.3.1 Configuration:
Đề đáp ứng nhu cầu cho nhiều chủng loại thiết bị khác nhau Sun đã đưa ra khái niệm Configuration Khái niệm Configuration có mối liên hệ chặt chẽ với máy ảo Java Nói chính xác hơn, một Configuration qui định những thành phần và những thư viện gốc của ngôn ngữ Java mà máy ảo phải hỗ trợ cho configuration đó
Việc phân chia thành những Configurations khác nhau chủ yếu dựa vào khả
năng bộ nhớ, năng lực hiển thị, năng lực xử lý và khả năng kết nói mạng của các
thiết bị Như chúng ta đã biết, các thiết bị di động rất khác nhau về nguôn tải
nguyên, về khả năng phần cứng Với những thiết bị có năng lực hạn chế, nếu ta đưa
Trang 20quá nhiều thư viện hỗ trợ vào máy ảo trên thiết bị đó sẽ gây chậm hệ thống và dư thừa không cần thiết Với những thiết bị có khả năng cao hơn, chúng ta sẽ đưa thêm nhiều thư viện hỗ trợ vào máy ảo giúp ích cho công việc lập trình của các nhà phát triển Do đó, nhu cầu phân chia thành nhiều Configurations là việc cần thiết
Hiện nay Sun đã đưa ra hai loại Configurations khác nhau:
CDC (Connected Device Configuration):
e 512 kb (minimum) bộ nhớ để chạy Java
e 256 kb (minimum) bộ nhớ cấp phát động
e© Kết nối mạng liên tục, băng thông rộng
CLDC(Connected Limited Device Configuration):
e 128 kb (minimum) bé nho dé chay Java
32 kb (minimum) bộ nhớ cấp phát động
Giao diện người dùng hạn chê
Năng lượng tiêu tốn ít (chủ yếu dùng pin)
Kết nỗi mạng Wireless, chậm
Việc phân chia này thực chất cũng chỉ mang tính tương đối Công nghệ hiện nay đang phát triển khá nhanh, và việc phát triển này cảng làm cho ranh giới giữa các loại Configuration này trở nên không rõ ràng
Trang 21Ta có thể xem Profile là một mở rộng của khái niệm Configuration Profile định
nghĩa các thư viện giúp lập trình viên phát triển phát triển ứng dụng cho một dạng thiết bị nào đó Ví dụ Mobile Information Device Profile (MIDP) định nghĩa các
hàm API cho các thành phan giao diện, nhập liệu và xử lý sự kiện, lưu trữ, kết nối
mạng và xử lý thời gian, phù hợp với màn hình hiển thị và khả năng xử lý của các
thiết bị di động Profile MIDP được định nghĩa trên nền tảng của CLDC Ngoài ra
chúng ta còn một số Profile tiêu biểu khác như
— PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với màn hình và bộ nhớ lớn hơn
Trang 22— Foundation Profile: cho phép mở rộng các tính năng của CDC với phan lớn
các thư viện của bộ Core Java2 1.3
— Ngoai ra con co Personal Basis Profile, Personal Profile, RMI Profile, Game
Profile
Luận văn chủ yếu chỉ dé cập đến Profile MIDP và các thư viện liên quan dé
phục vụ cho việc viết ứng dụng trên điện thoại di động
Như chúng ta đã biết, một chương trình Java sẽ được biên dịch thành mã trung
gian sau đó chính máy ảo Java sẽ biên dịch phần mã này sang mã máy để thực thi Máy ảo Java sẽ chịu trách nhiệm việc cung cấp tính năng bảo mật, cấp phát và thu
hồi bộ nhớ và quản lý việc điều phối các tiễn trình Chúng ta có thể nói chính máy
ảo Java làm cho chương trình của chúng ta “chạy”
Voi CDC, may ảo Java có cùng các đặc tính như J2SE Tuy nhiên, với CLUDC, Sun đã phát triển riêng một dạng máy ảo chuyên biệt được gọi là K Virtual Machine, gọi tắt là KVM Chính những hạn chế về tải nguyên của các thiết bị di động đã đề ra nhu cầu về sự ra đời của KVM KVM không phải là một máy ảo Java
“truyền thống”:
e Máy ảo chỉ cần 40-80 kb.bộ nhớ
e Chỉ đòi hỏi 20-40 kb bộ nhớ động (heap)
e Có thể chạy với bộ vi xử lý 16-bit và xung nhịp 25 MH¿
Đến đây chúng ta có thể hình dung phần nảo cấu trúc tổng thể của một chương
trình J2ME như sau:
10
Trang 23Profile
Configuration
lava Virtual Machine
Host Operating System
Hình 1.4 Cấu trúc chương trình J2ME
Nếu chương trình được biên dịch với CDC, chương trình sẽ chạy trên các máy
ảo “truyền thống” và mang các đặc tính như chương trình J2SE
Nếu chương trình được biên dịch với‹CLDC, chương trình sẽ chạy với máy ảo chuyên biệt KWM và những đặc tính riêng do CLDC đòi hỏi
Với chương trình xây dựng bởi MIDP, chúng ta có câu trúc chuyên biệt sau:
Trang 24môi trường nào” của Sun không còn đúng hoàn toàn vì đã xuất hiện máy ảo chuyên biệt KVM Một số chương trình viết bằng MIDP sẽ không chạy trên môi trường J2SE và ngược lại Tuy nhiên chúng ta phải cảm kích các nỗ lực của Sun đã giúp cho Java trở thành một trong những ngôn ngữ có khả năng độc lập với môi trường
bên dưới nhất hiện nay, điều này đúng với cả môi trường thiết bị di động
Ở những phần tiếp theo chúng ta sẽ tìm hiểu kỹ hơn về hai thành phần cơ bản của J2ME là Configuration va Profile
12
Trang 25Chương 2: Giới thiệu CLDC và MIDP
2.1.1 Yêu cầu phân cứng:
Khi đề ra yêu cầu về phần cứng việc xem xét các chi tiết như bộ xử lý, bộ nhớ
và các phần mềm hiện có trên các thiết bị di động là việc vô cùng quan trọng Nhằm mục đích phục vụ tối đa các thiết bị hiện có trên thị trường, CLDC chỉ đề ra các yêu
cầu về bộ nhớ và không đề ra yêu cau nao cho các thành phần khác Yêu cầu tối thiểu để có thể sử dụng CLDC như sau:
e 128 kilobytes dé chay JVM và các thư viện cửa CLDC Không phân biệt loại
bộ nhớ sử dụng (Rom, Flash, ), bộ nhớ của thiết bị phải bảo lưu được nội
dung lâu dài, ngay cả khi ngắt điện Bộ nhớ này thường được gọi là nonvolatile memory
e 32 kilobytes bộ nhớ trống để cấp phát các đối tượng (objects) Bộ nhớ này thường được gọi la volatile memory (hay la “heap’’)
2.1.2 Yéu cau phanmém:
CLDC có yêu cầu tối thiểu về mặt phần mém Hệ điều hành phải tương thích với
JVM và có chức năng quản lý các ứng dụng Java, bao gồm:
e Cho phép chọn và kích hoạt ứng dụng
e Cho phép gỡ bỏ ứng dụng khỏi thiết bị
2.1.3 May ao Java:
Do các thiết bị di động dùng CLDC thường có tài nguyên hạn chế nên Sun đã đề
ra máy ảo Java KVM phục vụ riêng cho các thiết bị này Máy ảo KVM thực chất là
một bộ phận con của các máy ảo trên môi trường J2SE và J2EE nên cũng có nhiều hạn chê và khác biệt so với hai phiên bản trên
13
Trang 26Một số hạn chế:
e Không hỗ trợ kiểu dữ liệu float: Việc sử lý số float đòi hỏi nhiều tài
nguyên xử lý, ngoài ra các thiết bị di động không có những câu hình phần cứng dành riêng cho việc xứ lý số float nên trong J2ME chúng ta không thể khai báo các biến, mảng float, các hàm cũng không nhận tham số va trả về các số float
e Phương thức finalize: Trong J2SE, chúng ta có thể khai báo phương thức finalize (trong tu nhu phuong thuc destructor) Garbage Collector sé gọi phương thức này trước khi hủy bỏ một đối tượng, phương thức này thường được dùng để thu hồi các tài nguyên hệ thống như sockets, file
handles trước khi đối tượng bị “phá hủy” Tuy nhiên trong J2ME chúng
ta không có phương thức finalize
e Error Handling: Trong J2ME chúng ta vẫn được hỗ trợ các công cụ về bẫy lỗi (chủ yếu thông qua try và éatch) Tuy nhiên khả năng về xử lý lỗi của J2ME cũng hạn chế hơn với hai phiên bản còn lại
e Không hỗ trợ việc sử đụng code của các ngôn ngữ lập trình khác
e Khong hé tro Reflection: Trong J2SE và J2EE, chúng ta có thể dùng các lớp Reflection để tìm hiểu thông số môi trường máy ảo Java đang thực thi
e Không hỗ trợ ThreadGroup: mỗi thread được quản lý riêng biệt, không còn lớp ThreadGroup Nếu muốn điều khiển một lúc nhiều threads chúng
fa có thê dùng mảng hoặc Vector
J2ME cũng còn một số điểm khác biệt so với J2SE và J2EE, một trong những khác biệt chính là quá trình Class Verify (tạm dịch là “kiểm tra lớp”) Các lớp trước khi được load sẽ thông qua một quá trình “kiểm tra” về sự hợp lệ và tính nguyên vẹn Đây là một cơ chế quan trọng để bảo đảm an toàn (security) của Java Quá trình này trong J2SE và J2EE có thể chiếm dén 50 kbytes bộ nhớ, trong J2ME chúng được chia thành 2 giai đoạn:
14
Trang 27e Tiền kiểm tra (Pre-verification): Trước khi một lớp được nạp vào thiết bi,
một phần mềm sẽ được sử dụng để thêm vào một số thông số bố sung vảo file class Quá trình này giảm thời gian và bộ nhớ cần thiết để máy ảo thực hiện giai đoạn 2 trong quá trình kiểm tra File class sau khi được “tiền kiểm tra” sẽ tăng dung lượng khoảng 5%
e© Kiểm tra nội thiết bị (In-device verification): Khi thiết bị nạp các file class
đã được tiền kiểm tra, công cụ kiểm tra trong thiết bị sẽ thực hiện một vài kiểm tra để xác nhận tính hợp lệ của đoạn code Nếu phát hiện một lỗi nào
đó bộ kiểm tra sẽ phát sinh báo cáo và từ chối nạp lớp đối tượng vào bộ
nhớ Quá trình này đòi hỏi ít bộ nhớ và tài ngúyên hơn nhiều lần so với
trong J2SE va J2EE
CLDC không hỗ trợ tất cả các lớp và thư viện được hỗ trợ trong ngôn ngữ Java
truyền thống mà chỉ hỗ trợ những thư viện thật sự cần thiết đối với thiết bị di động
Ngoài ra trong CLDC chúng ta cũng được hỗ trợ việc truy vẫn một số thuộc tính của hệ thống:
e Lay thong tin về platform của thiết bị:
Svstem.getProperty("microedition.platform”) e© Lấy thông tin về bảng mã mặc định:
System.getProperty("microedition.encoding") e© Lấy trông tin về Version và tên của configuration:
System.getProperty("microedition.configuration")
e Lay thong tin vé Profile:
System.getProperty("microedition profiles") Ngoài ra chúng ta có thể truy cập lớp Runtime để lấy các thông số về thiết bị như:
Runtime rtime= Runtime.getRuntime();
System.out.printIn("Total memory: " + rtime.totalMemory());
//thông tin về tổng bộ nhớ
System.out.printIn("Free memory: " + rtime.freeMemory());
//thông tin về bộ nhớ trông
15
Trang 282.2 MIDP:
2.2.1 Yêu cầu phần cứng:
e Màn hình ít nhất phải có 96 x 54 pixels
e Có ít nhất một thiết bị nhập liệu: bản phím hoặc màn hình cảm ứng
e Có ít nhất 128 kilobytes bộ nhớ non-volatile để chạy các thành phần của MID
e Có ít nhất 8 kilobytes bộ nhớ non-volatile để lưu các cầu hình chương trình và dữ
liệu
e Có ít nhất 32 kilobytes để chạy Java
e Có kết nối không dây (wireless network)
2.2.2 Yêu cầu phần mềm:
Mặc dù hệ điều hành của từng thiết.bị có thể khác nhau nhưng phải đáp ứng
được các yêu cầu tối thiểu sau:
e Hệ điều hành phải hỗ trợ việc xử lý ngắt, xử lý exception và hỗ trợ xử lý đồ
hoa bitmap để xuất dữ liệu ra màn hình
e Hệ điều hành phải nhận được tín hiệu nhập liệu (input) và chuyển dữ liệu đó cho máy ảo Java
e Hệ điều hành phải hỗ trợ việc đọc/ghi vào bộ nhớ non-volatile Không đòi hỏi
hệ điều hành phải định nghĩa file system nhưng phải cho phép ghi dữ liệu dạng persistent (không bị mắt đi khi tắt máy, ngắt điện)
e© Phải hỗ trợ truy xuất mạng đặc biệt phải có tính năng đọc/phi dữ liệu thông
qua mạng không dây (wireless network)
2.2.3 Cấu trúc MID Profile:
16
Trang 29
MIDP OEM-Specific Native Applications Applications Applications
^ ` A OEM-Specific ` ly mà
Classes
Mobile Information Device Profile (MIDP)
Connected Limited Device Configuration (CLDC)
-
Hình 2.1 Cấu trúc thiết bị MID
Tầng dưới cùng là phần cứng của thiết bị đi động Bên trên phần cứng ta có hệ
điều hành điều khiến các hoạt động
Bên trên hệ điều hành ta có thể chia thành 2 phần riêng biệt Chúng ta sẽ thấy phan bên phải là các chương trình native application (tam dịch là “chương trình nguyên gốc”) Trước khi J2ME ra đời, thông thường đây là loại chương trình duy nhất có trên các thiết bị Đây là loại chương trình được nhà sản xuất đưa sẵn vào máy di động lúc sản xuất như chương trình chọn tiếng chuông, chỉnh thông số điện thoại, chỉnh giờ Chính nhờ J2ME ra đời chúng ta mới có chức năng cài đặt thêm
các chương trình được viết thêm vào điện thoại
CLDC là nền tảng cơ bản cho MID Profile, các chương trình MIDP (MIDP
Applications) có thể sử dụng các lớp được cung cấp bởi cả CLDC và MIDP Ngoài
ra chúng ta còn có các lớp OEM (original equipment manufacturer) là các lớp do các nhà sản xuất cung cấp thêm cho điện thoại (các hãng như Nokia, Samsung, Motorola thường có thêm nhiều lớp cấp cao hỗ trợ cho lập trình viên) và bên trên
là các ứng dụng được xây dựng từ các lớp này, các ứng dụng này thường chỉ chạy trên các điện thoại của hãng đã cung cấp thư viện lơp OEM
17
Trang 302.2.4 MIDIet Suite:
Chúng ta gọi chương trình Java chạy trên thiết bị di động là một MIDlet MIDlet
sẽ sử dụng các lớp cung cấp bởi CLDC và MIDP Một MIDIet Suite (một bộ MIDIet) chứa một hay nhiều ứng dụng MIDIet được nén chung trong một file JAR (Java Archive)
Cau truc file Jar:
Ngoài các file lớp và resource, trong file ]ar còn có một tập tin được gọi là
manifest Day la tap tin mo tả nội dung của toàn file Jar Tap tin nay có tên manifest.mf va ban than no cting duge nén trong file Jar Trong file manifest chung
ta có thể định nghĩa các thuộc tính của file jar nhưng quañ trọng nhất là 6 thuộc tính sau:
MIDlet-Vendor Cho biết người tạo MIDIet Suite Có
MIDIet-<n> Tham chiếu đến từng MIDIet trong bộ | Có
MIDIet (trong file Jar), mỗi một MIDIet cần một mẫu tin này, mẫu tin này gồm 3 mẫu tin con:
Tén MIDlet
18
Trang 31
File leon MIDIet (có thể không cân) Tên lớp sẽ được nạp khi thực thi MIDlet này
MicroEdition- Tên profile cân thiết để chạy MIDIet nay, | Co
Profile thường là MIDPI1.0 hoặc MIDP2.0
MicroEdition Configuration cân để chạy MIDIet (thường | Có
Configuration là CLDC 1.0)
MIDlet-lcon File Icon (.pgn) của bộ MIDlet Không
MIDlIlet-Description | Mô tả (text) cua bo MIDlet Không
MIDIet-Info-URL_ | Địa chỉ trang web nhà phát triển MIDIet Không
Bang 2.1 Cau truc file manifest
Day la mot vi du don gian cua file manifest:
MIDIet-Name: Todo List
MDlet-Version: 1.0
MMIDIet-Vendor: Core J2ME
MMIDlet-I: TodoList, /„úmages/Todo.png, Todo TlodoMIDIet
MicroEdition-Profile: MIDP-1.0
MicroEdition-Configuration: CLDC-1.0
File JAD (Java Application Descriptor File):
Bên cạnh file Jar, một bộ ứng dụng MIIDlet còn có thêm file JAD (.jad) để cung
cấp thông tin về các MIDIet trong file JAR Việc đặt ra file JAD có một số mục đích sau:
e Cung cấp thông tin về nội dung file Jar Từ thông tin nảy, bộ quản lý ứng dụng
trên thiết bị mới quyết định ứng dụng này có thích hợp để chạy trên thiết bị hay
không
e Cung cấp các tham số dùng cho MIDIet để tránh thay đối file JAR File JAR chứa mã ứng dụng nên cần tránh bị thay đổi
19
Trang 32Danh sách các thuộc tính trong file Jad:
MIDlet-Vendor Cho biết người tạo MIDIet Suite Có
MIDIet-<n> Tham chiếu đến từng MIDIet trong bộ | Có
MIDIet (trong file Jar), mỗi một MIDIet cần một mẫu tin này, mẫu tin này gồm 3 mẫu tin con:
Tên MIDIet File Icon MIDlet (co thé khong can) Tên lớp sẽ được nạp khi thực thi MIDlet này
MIDIet-Jar-URL Dia chi URL cua file Jar Có
MIDIet-Jar-S1ze Kích thước file Jar tính băng byte Có
MIDIet-Data-Size | Kích thước tôi thiểu tính băng byte để ghi | Không
các dữ liệu của chương trình (persistent đata)
MIDlet-Description | Mô tả MIDIet (dạng text) Không
MIDIet-Delete- Thông báo nhặc nhở khi xóa MIDIet Không
Confirm
MIDlet-Install- URL nhận thông báo về quá trình cài đặt Không
Notify
Bang 2.2 Cau tric file JAD
Ta cũng có thể định nghĩa thêm các thuộc tính riêng, bắt đầu bằng “MIDIet-“ tùy theo mục đích của lập trình viên Những thuộc tính sau phải giống nhau ở file Jad
và file manifest (năm trong file Jar):
- MIDIlet-Name
- MIDlet-Version
20
Trang 33- - MIDlet-Vendor
- MIDlet-<n> for each MIDlet
- MIDlet-Jar-URL
Nếu các thuộc tính này không giống nhau, ứng dụng sẽ bị thiết bị từ chối Với
các thuộc tính còn lại, nếu file Jad và file manifest khác nhau thì thuộc tính trong file Jad sẽ được ưu tiên hơn
Sau đây là một ví dụ đơn giản về file Jad:
MIDlet-Name: Todo List
MIDlet-Version: 1.0
MIDIlet-Vendor: Core J2ME
MIDIlet-Jar-URL: http://www.corej2me.com/TodoMIDIlet.jar
MIDlet-Jar-Size: 17043
MIDIlet-1: TodoList, /images/Todo.png, Todo TodoMIDIlet
O day có một câu hỏi được đặt ra: Tại sao phải ghép nhiều ứng dụng MIDIet thành một file nén dạng JAR Mục đích của việc kết hợp này giúp cho các ứng dụng MIDlet được nén chung này có thể chia xẻ chung các tài nguyên với nhau Một ví
dụ có thé dé cập đến là việc chia sẻ chung các Record Store: trong môi trường
J2ME chúng ta không có khái niệm file system; mọi nhu cầu lưu trữ dữ liệu được
thông qua các Record Trong một bộ MIDlet Suite thì tên các Record phải phân biệt
và các ứng dụng MIDIet cùng chung trong một bộ sẽ có thể chia sẻ các Record này với nhau Điều này khá thuận lợi, nó có thể giúp chúng ta viết các games cùng chia
sẻ danh sách người chơi, danh sách các người chơi có điểm cao nhất
Khi nạp ứng dụng vào thiết bi ta cling lic nap hai file Jar va Jad; file Jad sé la
file thực thi va file Jar chtra ma thuc thi cua chuong trinh
21
Trang 342.2.5 Môi trường phát triên ứng dụng J2ME
Phan nay chúng ta sẽ tìm hiểu về các phần mềm cân thiết dùng để phát triển một ứng dụng J2ME, cách cài đặt và cầu hình các phần mềm này Ngoài ra chúng ta sẽ
nghiên cứu về các tools phát triển được hỗ trợ thêm
Đề viết một ứng dụng J2ME chúng ta cần ít nhất 3 chương trình sau:
Java Development Kit (JDK) , version 1.3 hodc cao hơn (phiên bản mới nhất tính
đến lúc luận văn được thực hiện là phiên bản 1.42)
Ghi chi: O đây xem Microsoft Windows như hệ điều hành mặc định được sử dung,
nếu người dùng sử dụng hệ điều hành khác thì phải có một số điều chỉnh phù hợp
Việc sét biến môi trường giúp chúng ta chạy trình biên dịch từ bất cứ vị trí nào, không cần phải gõ tên và đường dẫn đây đủ của trình biên dịch
— Vao Control Panel, Chon System
— Chon Environment (hodc Advanced/Environment)
— Tim muc PATH, thém thu muc \bin cua thu muc JDK (vi du C:\JDK\bin)
vào biến môi trường PATH (PATH= :¢:\jdk\bin;)
e Cai dat CLDC va MIDP:
File CLDC va MIDP co dang zip, ta giai nén vao chung mot thư mục (vi du C:\J2ME)
22
Trang 35Thư mục J2ME có dạng:
C:\J2ME
j2me_cldc (thu muc chtta CLDC)
midp1.0.1.fcs (thu muc chua MIDP)
Sau cùng ta set hai biễn môi trường PATH và CLASSPATH như sau:
PATH=C:\jdk1.3.1\bin;C:\j2me\j2me_cldc\bin;C:\j2me\midp1.0.3fcs\bin;
CLASSPATH=C:\j2me\midp1.0.3fes\classes; (dau "." chi thu muc hién hanh) Lúc này ta đã đủ công cụ để xây dựng ứng dụng J2ME Chúng ta có nhiều công cụ
hỗ trợ cho quá trình biên dịch và thực thi MIDIet nhưng ban đầu chung ta sé tim
hiểu cách sử dụng những công cụ cơ bản nhất và là công cụ chuẩn của J2ME
Quá trình biên dịch và thực thi ứng dụng J2ME phải qua một số thao tác bằng dòng lệnh (command lines), ching ta gia sử thư mục chứa mã nguồn là thư mục C:\Midlets
Ta sẽ xây dựng một ứng dụng J2ME đơn giản để mô phỏng quá trình biên dịch và
thực thi, ứng dụng có tên Welcome và file source code có tên Welcome.Java
C:\Midlets\Welcome\Welcome.java
e Qua trinh bién dich va Pre-verify:
Đề biên dịch ta chuyển đến thư mục chứa ứng dụng (C:\Midlets\Weleome\) và
gọi lệnh:
javac -bootclasspath c:\j2me\midp1.0.3fcs\classes Welcome.java
hoặc
javac —bootclasspath %CLASSPATH% Welcome.java
(CLASSPATH là biến môi trường đã duoc định nghĩa trước thay cho c:\j2me\midp1.0.3.fcs\classes;.)
Javac là chương trình biên dịch của bộ JDK, thông số -bootclasspath ra lệnh cho
chương trình dich lẫy các file lớp cơ sở tại thư mục c:\j2me\midp1.0.3fes\elasses (Đây là file lớp cơ sở của MIDP) Nếu không có thông số này, file lớp cơ sở của
JDK sẽ được sử dụng, file lớp cơ sở này khác với file của MIDP nên J2ME có thể không sử dụng được
23
Trang 36Sau quá trình này file Welcome.class sẽ được tạo ra và mặc địch ở chung thư mục
với file mã nguồn
Sau khi có file class ta cần thực hiện việc “pre-verify” (đã được đề cập ở phần trước của luận văn)
Ta thực thi dòng lệnh:
preverify -classpath c:\j2me\midp1.0.3fcs\classes; -d Welcome
hoặc
preverify —classpath %CLASSPATH% —d Welcome
Tương tự, thông số classpath chi ra vi chi cac file» class tai thư mục
c:\j2me\midp1.0.3fes\classes va thu muc hién hanh (dau '“”) Thông số -d chỉ ra thư muc output két qua 1a thu mục hiện hành
Quá trình Pre-verify này là bắt buộc, nếu không thực hiện công đoạn này thiết
bị di động sẽ từ chối thực thỉ ứng dụng
e© Thực thi ứng dụng MIDIct:
Ta thực thi câu lệnh:
midp -classpath Welcome
Thong s6 class path chỉ ra thư mục chứa file cần thực thi, ở đây là thư mục hiện
hành, tén ing dung 1a Welcome (file Welcome.class da dugc pre — verify)
Trên đây là quá trình cơ bản nhất để biên dịch và thực thi một ứng dụng J2ME,
để sử dụng những tính năng cao hơn (tạo MIDIet Suite chứa nhiều MIDIet, tạo file Jad, file Jar) xin vui long xem file hướng dẫn trong đĩa CD đính kèm hoặc xem tài liệu của các bộ biên dịch Đề tiết kiệm thời gian, chúng ta thường dùng các công cụ
tiện ích như Sun Wireless Toolkit, xin xem phan phu luc đề biết cách sử dụng
24
Trang 37Chương 3: Các vấn đề cơ bản của chương
trinh MiDIet
3.1 Câu trúc cơ bản:
Chúng ta gọi chung các chương trình J2ME là MIDlet Các chương trình MIDlet này đều được kế thừa từ lớp MIDIet Không giỗng như chương trình trên máy PC, các chương trình MIDIet không cần hàm mainQ để thực thi Trước hết chúng ta sẽ xem xét về “vòng đời” (lifeeycle) của các ứng dung MIDIet
Một chương trình MIDIlet khi được nạp vào thiết bị có những trạng thái sau:
—_ Paused: Một chương trình MIDlet sẽ được đưa vào trạng thái paused sau khi
thực hiện phương thức khởi tạo (constructor) và trước khi được chương trình quản lý ứng dụng (application manager) trên thiết bị gọi thực thi Trong quá trình hoạt động, chương trình MIDIet cũng có thể bị đưa trở lại trạng thái
paused bởi thiết bị (khi cần trả lời cuộc gọi đến .) hoặc bởi chính chương
trình MIDlet
— Active: Chuong trinh MIDlet dang thuc thi
— Destroyed: Chuong trinh MIDIet đã giải phóng tất cả tài nguyên và đã được tắt bởi trình quản lý ứng dụng trên thiết bị
3.2 Xây dựng một ứng dụng MIDIet:
Chúng ta xây dựng một ứng dụng MIDIet bằng cách kế thừa (extends) lớp MIDIet Lớp này thực chất là một interface và chúng ta phải khai báo ba hàm sau đây: startAppQ, pauseAppQ và destroyApp(Q Đây là một ví dụ về một chương trình MIDlet don giản:
public class Shell extends MIDlet
{
25
Trang 38// phương thức khởi tạo (constructor) không bắt buộc phải có
public Shell(){ }
// Được application manager gọi trước khi thuc thi MIDlet
public void startAppQ{ }
// Được gọi trước khi tạm dừng MIDlet
public void pauseAppQ){ .}
// Được gọi trước khi kết thúc chương trình
public void destroy App(boolean unconditional){ }
3.3 Lop MIDlet:
Như đã đề cập, mọi ứng dụng của ta đều kế thừa từ lớp MIDIet Lơp nảy được
khai báo như sau:
public abstract class MIDlet {
)
protected abstract void startApp()
throws MIDletStateChangeException;
protected abstract void pauseApp();
protected abstract void destroy App(boolean
Trang 39
trước khi tạm dừng chương trình
abstract void startApp() Được gọi khi MIDlet sắp được đưa vảo trạng thái
thực thi (active state)
final void notifyDestroyed() Bao cho application manager biét chuong trinh
MIDIet đã giải phóng tài nguyên và cần được tắt
(sau khi gọi destroyApp)
final void notifyPause() Báo cho application manager biết chương trình
MIDIet đã giải phóng tải nguyên và muốn vảo trạng
thái tạm dừng (sau khi gọi paúseApp)
final void resumeRequest() Báo cho application manager ta can dua MIDlet
vào trạng thái hoạt động tro lai (Sau do application
manager sé goi startApp)
final String getAppProperty
(String key) Lấy các thông số của chương trình (từ file jad và
file manifest)
Bang 3.1 Lop MIDlet
Ở đây chúng tôi xin mô tả hai quá trình quan trọng nhất của một ứng dung MIDlet
là quá trình khởi nạp và quá trình thoát ứng dụng:
— Quá trình nạp:
e User chon kich hoat tng dụng MIDIet
e Application manager khdi tao cdc biến, gọi phương thức khởi tạo (constructor)
e Ung dụng MIDlet sau khi được nạp vào bộ nhớ sẽ được đưa vào trạng thái
paused (nhung ham pauseApp() sẽ không được goi)
e Application manager goi ham startApp() Thuc chat ham startApp() sé
được gọi mỗi khi ứng dụng được đưa vào trạng thái thực thi (active); khi ta
tạm ngưng ứng dụng và có nhu câu kích hoạt trở lại hàm này cũng được
gol
— Qua trinh thoat:
e User chon thoat chuong trinh
27
Trang 40e Hàm destroyApp(Q được gọi, hàm này phải bảo đảm việc giải phóng tài nguyên
e© Hàm notfifyDestroyedQ được gọi để báo cho application manager ứng dụng
đã giải phóng hết tài nguyên và sẵn sàng bị tắt
3.4 Lớp MIDIetStateChangeException:
Khi tìm hiểu về package javax.microedition.midlet, còn một lớp quan trọng chúng ta phải chú ý đến là lớp MIDIetStateChangeException Ứng dung MIDlet có hai hàm có khả năng tạo ra (throw) Exception này là hàm destroyAppQ và hàm startApp()
Như chúng ta đã biết, trước khi ung dung duoc dua vao trang thai active thi ham
startApp() sé duoc goi Néu trong qua trinh goi ham nảy dẫn đến phát sinh lỗi (thiết
bị hết tài nguyên, tài nguyên cần dùng đáng-bị ứng dụng khác chiếm ) thì MIDIetStateChangeException sẽ được tạo ra Trong quá trình thoát, hàm destroyAppQ cũng có thể phát sinh exception này, ví dụ như khi chúng ta thoát mà chương trình đang nhận dữ liệu hết sức quan trọng từ network ta có thể phát sinh exception để dừng việc thoát
Ta xem xét hàm destroyApp(boolean condition):
Tham số condition ở đây có một ý nghĩa khá thú vị, nễu tham số này là true dù chúng ta có phát sinh exception MIDIetStateChangeException thì ứng dụng vẫn thoát; chỉ khi nào tham số nảy là false thì exception MIDIetStateChangeException mới có khả năng hủy việc thoát chương trình
3.5 Display
Ung dung của chúng ta chắc chăn có nhu cầu xuất dữ liệu ra màn hình Việc này trong một ứng dụng MIDIet do một đối tượng thuộc lớp display đảm nhiệm Lớp này năm trong package javax.microedition.ledui, package này chứa hầu như tất
cả các lớp phục vụ cho việc phát triển giao diện của ứng dụng
Chúng ta sẽ xem xét một số hàm quan trọng nhất của lớp Display:
28