Công cụ, công nghệ hỗ trợ

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 41)

Ứng dụng trên ñiện thoại di ñộng KaraMobile:

• Ứng dụng ñược phát triển trên nền tảng công nghệ J2ME, với cấu hính CLDC 1.1 và MIDP 2.0

• Sử dụng Eclipse 3.4 Ganymede với plug-in MJT 9.1.

• Chạy giả lập và debug với bộ công cụ Sony Ericsson SDK 2.5.0.3

• Chương trình BitmapFontCreator ñể tạo bộ font bitmap Tiếng Việt. ðây là chương trình mã nguồn mở, ñược tải về tại SourceForge.net

Hệ thống KaraServer

• Hệ thống ñược phát triển trên nền tảng công nghệ JSP/Servlet, phần KaraAdmin ñược phát triển dựa trên JSP, còn KaraService ñược phát triển dựa trên Servlet.

• Sử dụng Eclipse 3.4 Ganymede plug-in Web Development Tools • HTTP Server: Apache Tomcat 6.0.18

• Thư viện Log4j 1.2.15 ñể ghi lại toàn bộ hoạt ñộng của hệ thống, giúp cho việc bảo trì và sửa lỗi khi hệ thống ñã ñi vào hoạt ñộng.

• Thư viện MySQL Connector for Java 5.1.7, ñây là cầu nối chính với cơ sở dữ liệu

KaraDatabase:

• Sử dụng hệ quản trị Cơ sở dữ liệu MySQL 5.0.67 với bộ ứng dụng MySQL GUI, hỗ trợ quản trị cơ sở dữ liệu trực quan thông qua giao diện thân thiện

Trang 42

Chương 3 - Thiết kế, hiện thực hệ thống 3.1. ng dng KaraMobile – phía client

3.1.1. Gii thiu J2ME

J2ME ñược phát triển từ kiến trúc Java Card, Embeded Java và Personal Java của phiên bản Java 1.1. ðến sự ra ñời của Java 2 thì Sun quyết ñịnh thay thế Personal Java và ñươc gọi với tên mới là Java 2 Micro Edition. J2ME là nền tảng cho các thiết bị có tính chất nhỏ, gọn: Version 1 Version 2 PCs JDK 1.1.x Java 2 Platform. J2SE PDAs and Communicators PersonalJava Java 2 Platform. J2MSE/CDC

Phones and Pagers J2ME/CLDC

Embedded Devices EmbeddedJava J2ME/CLDC

Smart Cards JavaCard JavaCard

Lý do mà lập trình viên chọn J2ME

• Java ban ñầu ñược thiết kế dành cho các máy với tài nguyên bộ nhớ hạn chế.

• Thị trường của J2ME ñược mở rộng ra cho nhiều chủng loại thiết bị như:

o Các lọai thẻ cá nhân như Java Card

o Máy ñiện thoại di ñộng

Trang 43

o Các hộp ñiều khiển dành cho tivi, thiết bị giải trí gia dụng … Kiến trúc của J2ME

CLDC (Connected Limited Device Configuration)

ðịnh nghĩa về Configuration (Cấu hình): là ñặc tả ñịnh nghĩa một môi trường phần mềm cho một dòng các thiết bị ñược phân loại bởi tập hợp các ñặc tính, ví dụ như:

• Kiểu và số lượng bộ nhớ • Kiểu và tốc ñộ bộ vi xử lý • Kiểu mạng kết nối

Do ñây là ñặc tả nên các nhà sản xuất thiết bị như Samsung, Nokia… bắt buộc phải thực thi ñầy ñủ các ñặc tả do Sun qui ñịnh ñể các lập trình viên có thể dựa vào môi trường lập trình nhất quán và thông qua sự nhất quán này, các ứng dụng ñược tạo ra có thể mang tính ñộc lập thiết bị cao nhất có thể. Ví dụ

Trang 44 như một lập trình viên viết chương trình game cho ñiện thoại Samsung thì có thể sửa ñổi chương trình của mình một cách tối thiểu nhất ñể có thể chạy trên ñiện thọai Nokia, hoặc Motorola. Hiện nay Sun ñã ñưa ra 2 dạng Configuration:

CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết

nối giới hạn): ñược thiết kế ñể nhắm vào thị trường các thiết bị cấp thấp

(low-end), các thiết bị này thông thường là máy ñiện thọai di ñộng và PDA với khoảng 512 KB bộ nhớ. Vì tài nguyên bộ nhớ hạn chế nên CLDC ñược gắn với Java không dây (Java Wireless ), dạng như cho phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là Midlet.

CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC

ñược ñưa ra nhắm ñến các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy ñể bàn sử dụng J2SE. Những thiết bị này có nhiều bộ nhớ hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn. Các sản phẩm này có thể kể ñến như các máy PDA cấp cao, ñiện thoại web, các thiết bị gia dụng trong gia ñình … Cả 2 dạng Cấu hình kể trên ñều chứa máy ảo Java (Java Virtual Machine) và tập hợp các lớp (class) Java cơ bản ñể cung cấp một môi trường cho các ứng dụng J2ME. Tuy nhiên, chúng ta chú ý rằng ñối với các thiết bị cấp thấp, do hạn chế về tài nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hổ trợ tất cả các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng yêu cầu các phép tính toán dấu phẩy ñộng, nên máy ảo thuộc CLDC không ñược yêu cầu hỗ trợ kiểu float và double.

CLDC ñịnh nghĩa một bộ các giao tiếp cơ bản cho lập trình ứng dụng và máy ảo cho những thiết bị hạn chế về tài nguyên như mobile phones, pagers, và PDA (personal digital assistant). Khi kết hợp với profile như là MIDP, nó cung cấp Java platform vững chắc cho việc phát triển các ứng dụng mà liên

Trang 45 quan ñến bộ nhớ có giới hạn, sức mạnh xử lý, và khả năng về ñồ họa bị hạn chế.

CLDC là thành phần cơ bản của kiến trúc Java 2 Platform, J2ME. Công nghệ J2ME ñược phổ biến trong phạm vi API như configuration, profiles, and package tùy chọn. Môi trường ứng dụng J2ME bao gồm configuration như CLDC và profile như MIDP(Mobile Information Device Profile). Hơn nữa, các package tùy chọn cung cấp khả năng xác ñịnh cụ thể các chức năng như gửi thông ñiệp wireless, Mutimedia capture và chức năng phát lại (playback). Do việc tùy thuộc về phần cứng, cho nên các nhà thiết kế và phát triển sản phẩm phải chọn những gói thích hợp, sử dụng APIs hỗ trợ truy cập thuận lợi ñến các component.

CLDC ñược thiết kế ñể mang lại sự tiện ích trên Java platform cho các thiết bị kết nối mạng mà bị hạng chế về tốc ñộ xử lý, bộ nhớ, và khả năng về ñồ họa. Như các cấu hình sau:

• Bộ xử lý 16-bit hoặc 32-bit với tốc ñộ clock là 16MHz hoặc cao hơn. • Tối thiểu 160 KB ñể dùng thư viện CLDC và máy ảo.

• Tối thiểu 192 KB tiêu tốn cho Java platform.

• Tiêu thụ năng lượng thấp, hoạt ñộng nhờ vào năng lượng pin.

• Dùng kết nối wireless hoặc băng thông có giới hạn và không liên tục. MIDP (Mobile Information Device Profile)

ðịnh nghĩa về Profile: Profile mở rộng Configuration bằng cách thêm vào các class ñể bổ trợ các tính năng cho từng thiết bị chuyên biệt. Cả 2 Configuration ñều có những profile liên quan và từ những profile này có thể dùng các class lẫn nhau. ðến ñây ta có thể nhận thấy do mỗi profile ñịnh nghĩa một tập hợp các class khác nhau, nên thường ta không thể chuyển một ứng dụng Java viết cho một profile này và chạy trên một máy hỗ trợ một profile khác. Cũng với lý do ñó, bạn không thể lấy một ứng dụng viết trên J2SE hay J2EE và chạy trên các máy hỗ trợ J2ME. Sau ñây là các profile tiêu biểu:

Trang 46

Mobile Information Device Profile (MIDP): profile này sẽ bổ sung các

tính năng như hỗ trợ kết nối, các thành phần hỗ trợ giao diện người dùng … vào CLDC. Profile này ñược thiết kế chủ yếu ñể nhắm vào ñiện thọai di ñộng với ñặc tính là màn hình hiển thị hạn chế, dung lượng chứa có hạn. Do ñó MIDP sẽ cung cấp một giao diện người dùng ñơn giản và các tính năng mạng ñơn giản dựa trên HTTP. Có thể nói MIDP là profile nổi tiếng nhất bởi vì nó là kiến thức cơ bản cho lập trình Java trên các máy di ñộng (Wireless Java)

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

Foundation Profile: cho phép mở rộng các tính năng của CDC với phần

lớn các thư viện của bộ Core Java2 1.3

MIDP 2.0 là phiên bản chỉnh sửa từ MIDP 1.0, và bao gồm một số ñặc tính mới như là giao diện cho người sử dụng ñược hỗ trợ nhiều hơn, truyền thông ña phương tiện và game, kết nối tốt hơn, bảo mật hơn.

• Cải tiến giao diện: thông qua kinh nghiệm người dùng, cải thiện khả năng chuyển ñộng của ứng dụng, và có khả năng mở rộng hơn nữa. Như là các cải thiện về Screen và Item. Thêm nữa, là các cải tiến về cách bố trí (layout) ñộng cho việc di chuyển dễ dàng hơn.

• Hỗ trợ Media : âm thanh, video ñược cải tiến; cho phép âm thanh và video chạy liên tục.

• Hỗ trợ Game: MIDP 2.0 thêm Game API vào tiêu chuẩn xây dựng game. MIDP Game API bao gồm các chức năng game cụ thể, như là các sprite và tiled layer và hỗ trợ về ñồ họa. Các chức năng ñược làm ñơn giản hơn và cải thiện về ñiều khiển tốt hơn nhờ vào ñồ họa và hiệu năng.

• Mở rộng kết nối: thông thường thì theo chuẩn HTTP, MIDP 2.0 hỗ trợ thêm HTTPS, datagram, sockets, server sockét, và các serial giao tiếp

Trang 47 port. Mở rộng này làm cho khả năng kết nối ñơn giản hơn, là tiêu chuẩn ñể tương thích với các cấu trúc phần mềm ñã tồn tại.

• Bảo mật: MIDP 2.0 thêm vào model bảo mật end-to-end mạnh mẽ, ñược xây dựng theo các tiêu chuẩn mở, mà có thể bảo vệ mạng, các ứng dụng và thông tin trên các thiết bị di ñộng. Còn hỗ trợ cả HTTPS và các tiêu chuẩn ñã tồn tại như SSL và WTLS cho phép chuyển giao dữ liệu mã hóa. Các domain bảo mật chống lại các truy cập không ñược xác nhận và chức năng không hợp lệ cho ñến khi các truy cập, chức năng ñược cho phép và chứng thực.

Máy ảo KVM (K Virtual Machine) :

Cũng giống như trên PC, muốn thực thi một ứng dụng Java, chúng ta cần phải có một máy áo JVM (Java Virtual Machine). Khi bạn biên dịch mã nguồn Java thành một lớp (.class) và ñặt chúng vào trong file lưu trữ JAR của Java, máy ảo JVM sẽ biên dịch file .class này thành mã thự thi, và ñược ñiều khiển bởi JVM. Các mã trong file .class gọi là mã bytecode.

ðối với thiết bị cấu hình dạng CDC, máy ảo JVM có toàn bộ chức năng tương ñương với máy ảo phục vụ môi trường J2SE.

ðối với thiết bị cấu hình dạng CLDC, Sun cài ñặt một phiên bản thu nhỏ hơn dành cho JVM gọi là K Virtual Machine (KVM).

3.1.2. RMS và cu trúc lưu tr ca thư vin trên mobile

Tìm hiểu về RMS

Trang 48 RMS (Record Management System – hệ thống quản lý bản ghi) là một tập hợp các hàm API giúp cho một MIDlet có thể làm việc với hệ thống lưu trữ dữ liệu nội bộ của ñiện thoại di ñộng. Ở hầu hết tất cả các loại ñiện thoại có hỗ trợ chuẩn MIDP, RMS là nơi lưu trữ dữ liệu nội bộ duy nhất. Hiện nay, có rất nhiều loại ñiện thoại có hỗ trợ việc giao tiếp với bộ nhớ ngoài của ñiện thoại, nhưng việc thao tác với bộ nhớ ngoài của ñiện thoại có tốc ñộ tương ñối chậm, và hay gặp phiền phức với những hộp thoại xác nhận quyền truy cập, do nó có cơ chế bảo mật chặt chẽ và phức tạp hơn RMS. Chính vì những lý do ñó, chúng ta sẽ chọn cách thức lưu dữ liệu trên RMS.

Tiếp theo, chúng ta sẽ cùng tìm hiểu một số thuật ngữ chính trong hệ thống RMS:

•••• Record (bản ghi): là ñơn vị lưu trữ dữ liệu chính, duy nhất và nhỏ

nhất mà ta phải truy xuất trong RMS. ðiều quan trọng, RMS không quy ñịnh kiểu dữ liệu cho một record, record ñó có thể mang bất lỳ loại dữ liệu nào: từ một số nguyên, số thực, chuỗi, một tấm hình… nói chung là bất kỳ loại dữ liệu nào mà người lập trình có thể mã hóa sang chuỗi nhị phân theo một phương thức nào ñó. Tóm lại, dưới góc

Trang 49 ñộ lập trình, người lập trình sẽ làm việc với record dưới dạng mảng nhị phân, ñiều này sẽ giúp người lập trình chủ ñộng hơn rất nhiều trong việc quản lý, kiểm soát dung lượng của bộ nhớ lưu trữ nội bộ của ứng dụng MIDP theo một cách thức tối ưu về kích thước nhất – ñiều cực kỳ quan trọng trong việc phát triển ứng dụng cho ñiện thoại di ñộng.

•••• Record Store (Kho chứa bản ghi): một record không thể ñứng ñộc

lập và truy xuất trực tiếp ñược, mà nó phải thuộc vào một record nào ñó. Vậy Record Store là một tập hợp các record và ñược truy xuất bởi cùng một ứng dụng MIDlet. Người lập trình truy xuất một record thông qua Record Store, và Record Store sẽ ñảm bảo tính chính xác của dữ liệu cho thao tác ñọc và ghi 1 record.

Record Store quản lý record thông qua chỉ số, mỗi record có một số duy nhất và ñược Record Store gán trong quá trình thêm một record mới vào. Chỉ số nhỏ nhất của một record là 1, chỉ số tiếp theo là 2… Chỉ số của record là một số tự tăng, khi xóa một record, chỉ số ñó sẽ không ñược ñiều chỉnh lại. Vì thế, người lập trình nên quản lý chỉ số một cách cẩn thận và chặt chẽ.

Mỗi Record Store ñược xác ñịnh qua một tên, là một chuỗi Unicode có ñộ dài không quá 32 ký tự. Tên của Record Store phải là duy nhất trong một MIDlet suite, nó mang tính nội bộ, có nghĩa là 2 ứng dụng riêng biệt có thể ñặt tên Record Store trùng nhau.

Record Store còn chứa thông tin về phiên bản, và thời gian. Vì thế ứng dụng có thể biết ñược thời ñiểm cuối cùng mà RMS ñược truy xuất.

Trong quá trình lập trình, chúng ta sử dụng Record Store thông qua việc tạo 1 thể hiện (instance) của lớp

Trang 50 và tất cả các lớp sử dụng trong việc thao tác với RMS ñều ñược chứa trong gói

javax.microedition.rms.* Một sốñặc ñiểm cần lưu ý

Giới hạn dung lượng:

Giới hạn dung lượng của RMS cho tất cả các ứng dụng MIDP tùy thuộc vào từng dòng máy ñiện thoại. Bản mô tả ñặc ñiểm của MIDP yêu cầu thiết bị hỗ trợ phải dự trữ ít nhất 8K cho việc ñảm bảo tính ổn ñịnh của hệ thống lưu trữ. Các thư viện lập trình cung cấp cho người lập trình phương thức ñể lấy ra dung lượng của hệ thống lưu trữ, và nếu ứng dụng lưu trữ dữ liệu quá lớn trong khi bộ nhớ ñiện thoại không ñủ thì MIDP sẽ phát sinh lỗi ñể ñảm bảo an toàn cho hệ thống.

Tốc ñộ truy xuất

RMS ñược lưu trữ trong bộ nhớ ổn ñịnh (persistent memory – tức vẫn giữ dữ liệu ngay cả khi tắt máy), vì thế nó thường tru xuất chậm hơn so với bộ nhớ không ổn ñịnh (volatile memory – tức dữ liệu ñược duy trì nhờ ñiện). Và việc truy xuất ở một sô dòng ñiện thoại sẽ tốn rất nhiều thời gian. ðể tối ưu trong việc xử lý, người lập trình nên lưu trữ những giá trị thường thao tác vào volatile memory, và chỉ ghi lại vào RMS khi cần thiết.

Tránh cho ứng dụng rơi vào deadlock

Tình trạng deadlock là tình trạng ứng dụng ñang xử lý một công việc nào ñó, và làm cho ứng dụng rơi vào trạng thái bị “treo”, ở những thiết bị có tốc ñộ chậm, việc truy xuất sẽ làm cho ứng dụng “treo” rất lâu, tạo cảm giác sốt ruột và khó chịu cho người sử dụng. Do ñó, người lập trình thường ñược khuyến cáo nên ñưa thao tác truy xuất ra một luồng riêng, ñể ứng dụng có thể tiếp tục ñược thực hiện những công việc khác như hiển thị màn hình chờ ñang trong trạng thái “chuyển ñộng”, …

Trang 51

Lỗi ngoại lệ (Exception)

Khi thao tác với RMS, các lỗi ngoại lệ sau có thể ñược phát sinh, nhằm mục ñích ñảm bảo an toàn cho hệ thống:

InvalidRecordIDException ñược phát sinh khi người lập trình thực

hiện việc ñọc ghi lên một record thông qua một chỉ số không tồn tại trong Record Store.

RecordStoreFullException ñược phát sinh khi người lập trình thực

hiện ghi dữ liệu có dung lượng lớn hơn sức chứa hiện tại của RMS.

RecordStoreNotFoundException ñược phát sinh khi người lập trình

mở một Record Store không tồn tại trong RMS, thông thường trong trường hợp này, người lập trình chưa tạo Record Store ñó hoặc bị nhầm tên Record Store.

RecordStoreNotOpenException ñược phát sinh khi người lập trình ñọc

ghi vào một Record Store ñã ñóng lại.

RecordStoreException là lớp cao nhất, nó bao hàm những lỗi phát sinh

trên.

Cấu trúc lưu trữ trong RMS (Record Management System)

Cấu trúc tổng quan của Record Store như sau:

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 41)

Tải bản đầy đủ (PDF)

(94 trang)