41
b. Keyboard Keyboard adalah alat input yang biasanya didampingi dengan
alat tampilan display di layar monitor yang menampilkan apa yang ditekan di keyboard.
c. Mouse Mouse adalah alat input komputer yang digunakan oleh
berbagai program aplikasi GUI Graphical User Interface dengan petunjuk posisi yang ditampilkan melalui monitor.
2. Perangkat Lunak Perangkat lunak merupakan bagian dari sistem
pengolahan data yang digunakan untuk mengaktifkan fungsi dari perangkat keras komputer. Perangkat lunak yang penulis
gunakan adalah sebagai berikut: a. Sistem Operasi
Sistem operasi yang penulis sarankan adalah Microsoft Windows XP SP2.
b. Program aplikasi Merupakan perangkat lunak yang akan digunakan dalam
pembuatan program adalah server Apache Tomcat 5.5.17, J2SE 1.5, NetBeans IDE 6.7.1, MySql 5.
4.2. Planning
Dalam hal ini, penulis membangun aplikasi mobile learning secara individu. Adapun waktu yang diperlukan dalam penelitian pembuatan
42
aplikasi ini adalah selama 9 Minggu. Berikut ini adalah timeline yang penulis rancanakan selama membangun aplikasi mobile learning:
Tabel 4.1. Planning Pembuatan Aplikasi
Minggu ke-1
Minggu ke-2
Minggu ke-3
Minggu ke-4
Minggu ke-5
Minggu ke-6
Minggu ke-7
Minggu ke-8
Minggu ke-9
Communication Planning
Modelling Construction
Deployment
4.3. Modelling
4.3.1. Use Case Diagram
Gambar 4.1 Use Case Diagram Autentikasi User
Berikut ini adalah use case naratif dari use cese diagram di atas yang
menjelaskan urutan kegiatan yang dilakukan sistem dan user
Tutor
Autentikasi User
Login
Logout
Administrator
43
1. Use Case Autentikasi User
Tabel 4.2 Use Case Autentikasi User
Usecase Name
Autentikasi User
Actor s Administrator, tutor
Brief Description Usecase ini mendeskripsikan event dari administrator
dan tutor untuk login dan logout ke dalam sistem.
Precondition User haruslah sudah terdaftar sebagai pengguna sistem.
User haruslah seorang yang terdaftar sebagai administrator atau tutor.
Trigger Use case ini diinisiasi pada saat user membuka aplikasi
mobile learning.
Basic Flow 1. User memulai aplikasi mobile learning
2. User mengklik tombol [login]
Post condition
Aplikasi klien mengirimkan user dan password yang dimasukan oleh user ke server, dan mengecek apakah
username dan password cocok. Jika cocok maka aplikasi akan menampilkan menu utama, jika tidak
cocok maka aplikasi akan menampilkan login form kembali.
44
2. Use Case Manajemen User
Gambar 4.2 Use Case Diagram Manajemen User
Berikut ini adalah use case naratif dari use cese diagram di atas yang
menjelaskan urutan kegiatan yang dilakukan sistem dan user. Tabel 4.3
Use Case Manajemen User Usecase Name
Manajemen
User
Actor s Administrator
Brief Description Usecase ini mendeskripsikan event dari administrator
yaitu menambah data user.
Precondition User haruslah sudah terdaftar sebagai pengguna sistem.
Manajemen User
Administrator
Create User
View User
Manage own
account Delete
User Update
User
Tutor
Login
Logout
45
User haruslah seorang yang terdaftar sebagai administrator.
Trigger
Use case ini diinisiasi pada saat administrator memilih [menu add a user] pada user management.
Basic Flow 1. Administrator membuka list dengan memilih menu
[user management] 2. Administrator memilih menu [input user]
3. Administrator memasukan data User 4. Administrator mengklik tombol [save]
5. Administrator mengklik tombol [keluar]
Alternate flow 2a. Administrator memilih salah satu user kemudian
memilih menu [edit], maka aplikasi akan menampilkan data user tersebut ke dalam form dan kembali ke
langkah 3. 2b. Administrator memilih salah satu user kemudian
memilih menu [hapus], maka aplikasi akan menghapus data user yang dipilih dan menampilkan kembali daftar
user
Post condition
Aplikasi menyimpan data User yang telah dimasukkan ke dalam database, dan aplikasi menampilkan kembali
daftar user.
46
3. Use Case Materi
Gambar 4.3 Use Case Diagram Manajemen Materi
Tabel 4.4 Use Case Materi
Usecase Name
Materi
Actor s Administrator, Tutor
Brief Description Usecase ini mendeskripsikan event dari administrator
yaitu menambah,merubah dan menghapus Materi.
Precondition User haruslah sudah terdaftar sebagai tutor atau
administrator.
Trigger Use case ini diinisiasi pada saat administrator memilih
menu [materi].
Basic Flow 1. User membuka list dengan memilih menu [materi]
2. User memilih materi dari daftar 3. User memasukan data materi
4. User mengklik tombol [save]
Materi
Create
Materi
View
Materi
Upadate
Materi
Delete
Materi
Administrator
Tutor
Student
47
Alternate flow 2a. User memilih salah satu materi kemudian mengedit
data materi pada form, kemudian User mengklik tombol [save] untuk menyimpan hasil masukkan.
2b. User memilih salah satu course kemudian memilih menu [delete], maka aplikasi akan menghapus materi
yang dipilih.
Post condition Aplikasi menyimpan perubahan materi ke dalam
database, dan aplikasi menampilkan kembali daftar course.
4. Use Case Course
Gambar 4.4 Use Case Diagram Manajemen Course
Tabel 4.5 Use Case Autentikasi User
Usecase Name Course
Actor s Administrator
Course
Create
Course
View
Course
Upadate
Course
Delete
Course
Administrator
Tutor
Student
48
Brief Description Usecase ini mendeskripsikan event dari administrator
yaitu menambah,merubah dan menghapus Course.
Precondition
User haruslah sudah terdaftar sebagai pengguna sistem. User haruslah seorang yang terdaftar sebagai
administrator.
Trigger Use case ini diinisiasi pada saat administrator memilih
menu [managemen course].
Basic Flow
1. Administrator membuka list dengan memilih menu [course]
2. Administrator memasukan data course 3
.
Administrator mengklik tombol [simpan]
Alternate flow 2a. Administrator memilih salah satu course kemudian
mengedit data course pada form, kemudian user mengklik tombol [save].
2b. Administrator memilih salah satu course kemudian mengklik tombol [hapus], maka aplikasi akan
menghapus course yang dipilih.
Post condition
Aplikasi menyimpan perubahan course ke dalam database.
49
5. Use Case Manajemen File
Gambar 4.5 Use Case Diagram Manajemen File
Tabel 4.6 Use Case Manajemen File
Usecase Name
Manajemen File
Actor s Administrator, Dosen
Brief Description Usecase ini mendeskripsikan event dari administrator
dan Dosen yaitu menambah dan menghapus File.
Precondition User haruslah sudah terdaftar sebagai pengguna sistem.
User haruslah seorang yang terdaftar sebagai administrator atau Dosen.
Trigger Use case ini diinisiasi pada saat user memilih menu
[Upload File].
Basic Flow 1. User membuka list dengan memilih menu [Upload
File]. 2. User mengklik tombol [browse].
3
.
User memilih file yang akan diupload
Manajemen File
Administrator
Tutor
Upload File
Delete File
50
4. User mngklik tombol submit.
Alternate flow Post condition
Aplikasi menyimpan nama file ke dalam database, dan meyimpan file tersebut ke dalam folder pada server.
6. Use Case Manajemen Gambar
Gambar 4.6
Use Case Diagram Manajemen Gambar
Tabel 4.7 Use Case Manajemen Gambar
Usecase Name
Manajemen Gambar
Actor s Administrator, Dosen
Brief Description Usecase ini mendeskripsikan event dari administrator
dan Dosen yaitu menambah dan menghapus Gambar.
Precondition
User haruslah seorang yang terdaftar sebagai administrator atau Dosen.
Trigger Use case ini diinisiasi pada saat user memilih menu
[Image Manager].
Manajemen Gambar
Administrator
Tutor
Upload Gambar
Delete File
51
Basic Flow 1. User membuka list dengan memilih menu [Image
Manager]. 2. User mengklik tombol [browse].
3
.
User memilih gambar yang akan diupload 4. User mngklik tombol submit.
Alternate flow Post condition
Aplikasi menyimpan nama file ke dalam database, dan meyimpan gambar tersebut ke dalam folder pada server.
4.3.2. Entity Relational Diagram ERD
Entity Relational Diagram ERD adalah suatu model yang digunakan untuk menggambarkan data dalam bentuk entitas, atribut dan hubungan antar-entitas.
ERD dapat digunakan pada semua alat-alat pemodelan dan merupakan metode untuk menggambarkam sistem penyimpanan data. Hubungan antar tabel adalah
sebagai berikut :
Gambar 4.7 Entity Relational Diagram ERD
52
Berikut ini adalah kamus data dari tabel-tabel yang ada di dalam aplikasi:
1. Tabel User Nama Tabel : user
Keterangan : Berisi data user Primary Key : id
Tabel 4.8 Tabel user
Nama Field Tipe
Panjang Keterangan
id int 4
ID user
user_namaDepan Varchar 255
Nama depan user
user_namaBelakang Varchar 255
Nama belakang user
user_email Varchar 255
Email user
user_password Varcahr 255 Password
user User_type Varcahr
255 User
role
2. Tabel Materi Nama Tabel : materi
Keterangan : Berisi daftar-daftar materi berdasarkan mata kuliah yang diajarkan
Primary Key : materi_id
53
Tabel 4.9 Tabel Materi
Nama Field Tipe
Panjang Keterangan
materi
_id Int
4 Id
materi title varchar
255 Judul
materi content text
Isi materi
user int
4 Id User dengan role tutor yang
membuat materi matkul
int 4
Id dari mata kuliah
3. Tabel Mata Matkul Nama Tabel : matkul
Keterangan : Berisi daftar-daftar mata kuliah yang diajarkan Primary Key : matkul_id
Tabel 4.10 Tabel Matkul
Nama Field Tipe
Panjang Keterangan
matkul_id Int
4 Id mata kuliah
matkul_title varchar 50
Nama mata
kuliah
matkul_kode
varchar
8
Kode mata kuliah
matkul_semester varchar 2 Semester
mata kuliah
4. Tabel Kuliah Nama Tabel : kuliah
Keterangan : Berisi data-data perkuliahan Primary Key : kuliah_id
54
Tabel 4.11 Tabel Kuliah
Nama Field Tipe
Panjang Keterangan
Kuliah_id int
4 ID kuliah auto increment
Matkul int
4 Foreign key dari mata kuliah
User
int
4
Foreign key user
5. Tabel Images Nama Tabel : images
Keterangan : Berisi data-data gambar Primary Key : image_id
Tabel 4.12 Tabel image
Nama Field Tipe
Panjang Keterangan
image_id
int 4
ID image auto increment Image_path
varchar 255 Nama file gambar.
User
int
4
Foreign key user
6. Tabel File Nama Tabel : file
Keterangan : Berisi data-data file yang diupload Primary Key : file_id
Tabel 4.13 Tabel File
Nama Field Tipe
Panjang Keterangan
file_id
int 4
ID kuliah auto increment
55
File_path Varchar 255 Nama file
Materi
int
4
Foreign key materi
4.3.3 Pemodelan Antar Muka
Pada tahap perancangan antar muka penulis mempertimbangkan beberapa aspek. Berikut adalah beberapa aspek yang menjadi pertimbangan
penulis: a. Disain dibuat konsisten.
b. Navigasi mudah dimengerti. c. Penggunaan gambar yang sesedikit mungkin.
d. Perpindahan halaman dibuat seminimal mungkin. Berdasarkan pertimbangan di atas, maka penulis merancang antar muka
sebagai berikut: 1. Antar Muka Halaman Awal
Gambar 4.8. Perancangan halaman Login
Untuk admin dan tutor, saat pertama kali aplikasi ini dibuka di browser, aplikasi akan langsung menampilkan form login.
APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning
Copyright © 2010 All Right Reserved Gambar
Username Password
56
2. Antar Muka Halaman Kelas
Gambar 4.9. Perancangan halaman Kelas
Menu-menu yang penulis tampilkan berisi: Kelas, Kuliah, Mata Kuliah, Materi, User, dan Logout. Pada halaman kelas, penulis tampilkan tabel Daftar
kelas dan form untuk operasi create, update, dan delete kelas.
Kelas Kuliah
Mata Kuliah Materi
User Logout
APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning
Copyright © 2010 All Right Reserved
Tabel Kelas Nama Kelas
New Save
Delete
57
3. Antar Muka Halaman Kuliah
Gambar 4.10 Perancangan halaman Kuliah
Pada halaman kuliah, penulis tampilkan tabel Daftar kuliah dan form untuk operasi create, update, dan delete kuliah.
4. Antar Muka Halaman Materi
Gambar 4.11 Perancangan halaman Materi
Kelas Kuliah
Mata Kuliah Materi
User Logout
APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning Kelas
Kuliah Mata Kuliah
Materi User
Logout APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning
Tabel Kuliah Course
Kelas Tutor
New Save
Delete
Tabel Materi
New Save
Delete
Course Tutor
Title Content
58
Pada halaman materi, penulis tampilkan tabel Daftar materi dan form untuk operasi create, update, dan delete materi.
5. Antar Muka Halaman Mata Kuliah
Gambar 4.12 Perancangan halaman Mata Kuliah
Pada halaman Mata kuliah, penulis tampilkan tabel Daftar Mata kuliah dan form untuk operasi create, update, dan delete Mata kuliah.
Kelas Kuliah
Mata Kuliah Materi
User Logout
APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning
New Save
Delete
Tabel Mata Kuliah
Semester Kode
Title
59
6. Antar Muka Halaman User
Gambar 4.13 Perancangan halaman User
Pada halaman User, penulis tampilkan tabel Daftar User dan form untuk operasi create, update, dan delete User.
4.3.4 Pemodelan Kelas
Framework yang penulis gunakan dalam pengembangan aplikasi ini
Kelas Kuliah
Mata Kuliah Materi
User Logout
APLIKASI CONTENT MANAGEMENT SYSTEM m-Learning
Tabel User
New Save
Delete
Nama Depan Nama Belakang
Email Password
Konfirmasi Password NIP
Gelar Role
60
adalah framework hibernate yaitu framework yang melakukan pemetaan table- table pada database ke dalam objek-objek yang disebut object mappings. Setiap
object yang dibuat adalah representasi dari fields yang ada di database. Setelah mapping dilakukan, selanjutnya penulis membuat kelas-kelas yang
digunakan untuk mengakses data yang disebut DAO Data Access Object. Berikut adalah object mappings dan DAO Data Access Object yang penulis
buat.
61
a. Package entity Package entity berisi object mappings dari database, berikut adalah bentuk
class diagram beserta relasi dari objek-objek yang ada di package entity.
Gambar 4.14 Class Diagram pada package entity
62
b. Package DAO Berikut adalah class diagram dari package DAO yang penulis buat:
Gambar 4.9. Class Diagram Package DAO
4.4. Construction
Gambar 4.15 Class Diagram pada package DAO
63
4.4 Construction 4.4.1 Implementasi antar muka
Pada tahap ini, penulis memulai membuat aplikasi dari perancangan yang telah penulis buat sebelumnya. Bahasa pemrograman yang penulis
terapkan adalah bahasa pemrograman Java dengan framework Hibernate untuk relational database dan JMaki sebagai framework AJAX. Adapun
listing kode pemrograman dapat dilihat pada Lampiran B. Adapun tampilan aplikasi yang penulis buat bisa dilihat pada gambar
dibawah ini: 1. Tampilan Halaman Login
Gambar 4.16
Halaman Login
64
2. Tampilan Halaman Mata Kuliah
Gambar 4.17 Halaman Mata Kuliah
3. Tampilan Halaman Materi
Gambar 4.18 Halaman Materi
65
4. Tampilan Halaman User
Gambar 4.19 Halaman User
5. Tampilan Halaman Upload File
Gambar 4.20 Halaman Materi untuk Tutor
66
6. Tampilan halaman Image Manager
Gambar 4.21 Halaman Image Manager
7. Tampilan Halaman Materi untuk Tutor
Gambar 4.22 Halaman Materi untuk Tutor
67
8. Tampilan Halaman User untuk Tutor
Gambar 4.23 Halaman User untuk Tutor
9. Tampilan Halaman Frontend daftar Dosen
Gambar 4.24 Halaman Frontend daftar Dosen
68
10. Tampilan Halaman Frontend daftar Mata Kuliah
Gambar 4.25 Halaman Frontend daftar Mata Kuliah
11. Tampilan Halaman Frontend Profil Dosen
Gambar 4.26 Halaman Frontend Profil Dosen
69
12. Tampilan Halaman Frontend Materi
Gambar 4.27 Halaman Frontend Materi
13. Tampilan Hasil Pencarian
Gambar 4.28 Halaman Hasil Pencarian
70
Pengujian pada Handphone User
Penulis melakukan pengujian pada beberapa tipe Handphone. Penulis melakukan pengujian dengan menggunakan jaringan ad-hoc dari laptop ke
handphone. Berikut adalah hasil pengujian yang telah penulis lakukan:
Gambar 4.29 Pengujian pada handphone Nokia E63
Gambar 4.30 Pengujian pada handphone Nokia E51
4.4.
JUn a
Gamb
.2 Unit Tes
Berikut ad it yang terin
a. Class m
bar 4.31 Pe
sting
dalah hasil ntegrasi den
materi:
Gamba
engujian pad
unit testin ngan IDE N
ar 4.32 Has
da handphon
ng yang pen NetBeans 6.7
sil Unit Test ne Nokia C
nulis lakuk 7.1:
ting class m 3
kan dengan
materi 71
tools
72
b. Class matkul:
Gambar 4.33 Hasil Unit Testing class matkul
c. Class user:
Gambar 4.34 Hasil Unit Testing class user
d. Class file:
Gambar 4.35 Hasil Unit Testing class file
73
e. Class Image:
Gambar 4.36 Hasil Unit Testing class Image
4.4.3 System Testing
Pada tahap ini penulis melakukan serangkaian testing. Hasil dari testing yang telah penulis lakukan adalah sebagai berikut:
a. Recovery Testing Penulis membuat proses pemulihan dengan memanggil fungsi
rollback pada API Hibernate untuk mengatasi gangguan yang dapat menyebabkan kegagalan pada aplikasi.
Fungsi rollback akan membatalkan semua perubahan yang dilakukan semua perintah SQL sejak proses transaksional dimulai atau
sejak perubahan terakhir dibuat jika terjadi kegagalan. Pada tahap ini penulis melakukan langkah –langkah sebagai berikut:
1. Mematikan database Database dimatikan ketika aplikasi sedang dalam keadaan
berjalan. Dari log pada server terlihat bahwa fungsi rollback untuk mengatasi kegagalan akses database berjalan dengan baik.
74
2. Mematikan server Server dimatikan ketika aplikasi sedang dalam keadaan berjalan.
Dari log pada server terlihat bahwa fungsi rollback untuk mengatasi server yang mati berjalan dengan baik.
b. Security Testing Hasil dari security testing yang penulis lakukan menunjukkan tidak
terdapat link yang memungkinkan untuk diserang. Berikut pada tabel 4.14 dan tabel 4.15 adalah hasil pengujian yang telah penulis lakukan:
Tabel 4.14 Hasil Security Testing pada halaman frontend
Test Hasil
Jumlah Link 10
Kemungkinan serangan
Tabel 4.15 Hasil Security Testing pada halaman Administrator
Test Hasil
Jumlah Link 26
Kemungkinan serangan
75
c. Stress Testing Hasi dari stress testing yang penulis lakukan menunjukkan aplikasi
mampu berjalan dalam keadaan normal dengan beban yang berat. Berikut adalah hasil pengujian yang telah penulis lakukan:
Performance data: Tabel 4.16
Hasil Performance data pada Stress Testing
Pada tabel 4.16 di atas menunjukkan data yang diterima pengguna dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Pengguna masih bisa
mengakses total rata-rata 2,42 halaman dalam waktu 1 menit dengan jumlah rata- rata sukses 2,42 halaman atau 100 .
76
Response Time: Tabel 4.17
Hasil Response Time data pada Stress Testing
Pada tabel 4.17 di atas menunjukkan respon aplikasi terhadap permintaan halaman oleh pengguna selama 1 menit yang dihitung setiap 10 detik. Total
selama 1 menit pengujian, hasil rata-rata yang diperoleh adalah 1,8 detik per halaman.
77
Bandwith Usage: Tabel 4.18
Hasil Bandwith Usage data pada Stress Testing
Pada tabel 4.18 di atas menunjukkan penggunaan bandwith oleh aplikasi dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Total selama pengujian
adalah 9,96 kbits untuk penerimaan pada satu pengguna dan 1,68 kbits untuk
pengiriman pada satu pengguna.
78
Errors report: Tabel 4.19
Hasil Errors report data pada Stress Testing
Pada tabel 4.19 di atas menunjukkan error yang terjadi pada aplikasi selama stress testing dalam kurun waktu 1 menit yang dihitung setiap 10 detik.
Hasil yang didapat menunjukkan tidak ada error pada aplikasi selama stress testing dilakukan.
79
Performance Testing
Berikut adalah hasil pengujian yang telah penulis lakukan:
Performance data: Tabel 4.20
Hasil Performance data data pada Performance Testing
Pada tabel 4.20 di atas menunjukkan data yang diterima pengguna dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Pengguna masih bisa
mengakses total rata-rata 2,4 halaman dalam waktu 1 menit dengan jumlah rata- rata sukses 2,4 halaman atau 100 .
80
Response time: Tabel 4.21
Hasil Response time data pada Performance Testing
Pada tabel 4.21 di atas menunjukkan respon aplikasi terhadap permintaan halaman oleh pengguna dalam kurun waktu 1 menit yang dihitung setiap 10 detik.
Total selama 1 menit pengujian, hasil rata-rata yang diperoleh adalah 1,711 detik per halaman.
81
Bandwith Usage Tabel 4.22
Hasil Bandwith Usage data pada Performance Testing
Pada tabel 4.22 di atas menunjukkan penggunaan bandwith oleh aplikasi dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Total selama pengujian
adalah 2,0 kbits untuk penerimaan pada satu pengguna dan 0,54 kbits untuk
pengiriman pada satu pengguna.
82
Errors Report: Tabel 4.23
Hasil Errors Report data pada Performance Testing
Pada tabel 4.23 di atas menunjukkan error yang terjadi pada aplikasi selama stress testing dalam kurun waktu 1 menit yang dihitung setiap 10 detik.
83
Hasil yang didapat menunjukkan tidak ada error pada aplikasi selama stress
testing dilakukan. 4.5
Deployment 4.5.1
Deployment
Pada tahap ini penulis melakukan deployment aplikasi pada server Pusat Data Teknik informatika Fakultas Sains dan Teknologi PUSDATIN
FST. 4.5.2
Users Delivery Feedback
Untuk mendapatkan feedback mengenai aplikasi yang penulis kembangkan, penulis mendapat saran dari user mengenai aplikasi yang
penulis buat. Berikut adalah feedback yang penulis dapatkan: 1. Halaman yang tampil disarankan memiliki tampilan yang
menyesuaikan dengan lebar layar, sehingga tidak ada scroll pada bagian bawah halaman.
2. Pada setiap halaman materi disarankan untuk ditampilkan materi dari Dosen yang sama, sehingga memudahkan user dalam hal
navigasi. 3. Ukuran huruf pada aplikasi disarankan untuk diperbesar.
84
BAB V PENUTUP
5.1 Kesimpulan
Berdasarkan uraian dan pembahasan pada bab-bab sebelumnya, maka dapat ditarik kesimpulan bahwa :
1. Dengan mengembangkan aplikasi mobile learning berbasis web, pengguna tidak memerlukan aplikasi khusus untuk menggunakan aplikasi ini.
2. Berdasarkan pengujian yang dilakukan oleh pengguna, dengan adanya fasilitas-fasilitas untuk mengupdate content, aplikasi memiliki content
yang dinamis karena content dapat diisi sesuai dengan kebutuhan pengajar. 3. Berdasarkan pengujian yang dilakukan oleh penulis, aplikasi mobile
learning ini dapat berjalan sesuai dengan tujuan, analisis, dan desain yang telah dirancang, sehingga aplikasi ini dapat membantu pembelajar dalam
aktifitas belajar. Tabel 5.1 Rangkuman
Hasil pengujian Nama Testing
Hasil Security Testing
Dari 36 link kemungkinan serangan 0
Stress Testing Performance data
2,42 halaman per detik
Response Time
Rata-rata 1,8 detik halaman.
Bandwith Usage
Receive per user 9,96 kbits Sending per user 1,68 kbits
Errors report
Total errors 0
Performance Testing
Performance data
2,42 detik per halaman.
Response Time
Rata-rata 1,711 detik halaman.
Bandwith Usage
Receive per user 2,0 kbits Sending per user 0,54 kbits
Errors report
Total errors 0
5.2 Saran
Berdasarkan kesimpulan-kesimpulan yang telah dikemukakan, dapat diajukan beberapa saran untuk pengembangan lebih lanjut antara lain :
1. Disarankan adanya media player untuk file multimedia sehingga dapat dibuka dengan cara streaming.
2.
Aplikasi ini belum dapat menyimpan hasil yang didapat mahasiswa setelah mengerjakan soal. Disarankan adanya penyimpanan nilai bagi mahasiswa
yang telah mengerjakan soal-soal.
86
DAFTAR PUSTAKA
Ally , Mohamed. 2009. Mobile Learning Transforming the Delivery of Education and Training. Edmonton: AU Press.
Bauer , Christian And King , Gavin. 2005. Java Persistence with Hibernate. New York: Manning
Basaeed, Essa and Berri, Jawad.2007. Learner-Centric Context-Aware Mobile Learning.
Jogiyanto, H.M. 2008. Metodologi Penelitian Sistem Informasi. Yogyakarta: Andi Offset.
Kineo and UFI. 2009. Mobile Learning Reviewed. UK
Low , Leonard.2007. M-learning standards report. Canberra
MySQL Reference Manual. 2001. MySQL AB
Naik, Kshirasagar And Tripathy, Priyadarshi. 2008
.
Software Testing And Quality Assurance Theory and Practice.
New Jersey: A johnwiley sons,
inc., publication.
87
Naughton , Patrick and Schildt, Herbert . 2001. Java 2: The Complete Reference. California:OsborneMcGraw-Hill
Niazi , Razieh and Qusay H. Mahmoud. 2008. Design and Development of a Device-Independent System for Mobile Learning. IEEE Education Society
Students Activities Committee
Pressman, Roger S. 2001. Software Engineering: A Practitioners Approach. New York: McGraw-Hill. 2005. Software Engineering: A Practitioner’s
Approach. New York: Mc-Graw Hill.
Rachdian , Adhi. 2005 Mastering CMS dengan Mambo Joomla. Jakarta: PT. Elex Media Komputindo.
Stieglitz , Stefan and Fuchß, Christoph.2007. Mobile Learning by Using Ad Hoc Messaging Network.
LAMPIRAN A
WAWANCARA
Wawancara dilakukan kepada Bapak Imam M. Shofi sebagai Kepala Pusat Data Teknik informatika Fakultas Sains dan Teknologi PUSDATIN FST.
Adapun pertanyaan yang penulis ajukan adalah sebagai berikut: 1. Apakah aplikasi mobile learning dibuat terbuka dapat diakses oleh siapa
saja atau tidak? 2. Menu apa saja yang seharusnya ada pada aplikasi mobile learning?
3. File berformat apa saja yang biasanya dijadikan bahan mengajar? 4. Word processor pada aplikasi web seperti apa yang diperlukan untuk
mangakomodasi materi belajar?
Dari wawancara di atas, penulis menarik kesimpulan sebagai berikut: 1. Aplikasi dibuat terbuka dapat diakses oleh siapa saja.
2. Aplikasi menampilkan profil dosen yang mengisi konten belajar. 3. File yang sering digunakan adalah file dokumen berformat .doc, .ppt, .pdf dan
file multimedia seperti .mp3 dan .flv. 4. Word processor untuk mengisi konten memiliki fasilitas yang mirip dengan
aplikasi word processor pada aplikasi desktop seperti dapat membuat tabel, numbering, format huruf, dan memasukkaan gambar pada konten.
LAMPIRAN B USERS FEEDBACK
Kuesioner penulis sebarkan untuk mendapatkan feedback dari user. Responden kuesioner ini adalah mahasiswa dan dosen. Adapun hasil jawaban
kuesioner adalah sebagai berikut: No Pertanyaan
Jawaban Ya Tidak
1 Apakah tujuan dari aplikasi dapat tercapai?
87 13
2 Apakah disain menggunakan elemen-elemen standard
dan tidak menggunakan antarmuka dan elemen-elemen yang sulit dipahami?
93 7
3 Apakah seluruh bagian dari disain benar-benar
diperlukan? 93 7
4 Apakah disain aplikasi konsisten?
93 7
5 Apakah aplikasi dapat meningkatkan produktifitas
pembelajaran? 100 0
6 Apakah disain aplikasi mudah dipelihara?
93 7
7 Apakah faktor-faktor keamanan sudah terpenuhi?
93 7
Dari hasil kuesioner di atas, penulis menyimpulkan bahwa aplikasi telah memenuhi kebutuhan pengguna.
LAMPIRAN C LISTING SOURCE CODE
Hibernate.cfg.xml:
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐configuration PUBLIC ‐HibernateHibernate Configuration DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐configuration‐3.0.dtd
hibernate ‐configuration
session‐factory property name=hibernate.dialectorg.hibernate.dialect.MySQLDialectproperty
property name=hibernate.connection.driver_classcom.mysql.jdbc.Driverproperty property name=hibernate.connection.urljdbc:mysql:localhost:3306skripsi4property
property name=hibernate.connection.usernamerootproperty property name=hibernate.connection.passwordproperty
mapping resource=entityMateri.hbm.xml mapping resource=entityMatkul.hbm.xml
mapping resource=entityUser.hbm.xml mapping resource=entityFile.hbm.xml
mapping resource=entityImages.hbm.xml session‐factory
hibernate ‐configuration
Package dao:
Class DAO.java: import
java.util.logging.Level; import
java.util.logging.Logger; import
org.hibernate.HibernateException; import
org.hibernate.Session; import
org.hibernate.SessionFactory; import
org.hibernate.cfg.Configuration; public
class DAO { protected DAO {
} public static Session getSession {
Session session = Session DAO.session.get; if session == null {
session = sessionFactory.openSession; DAO.session.setsession;
} return session;
} protected void begin {
getSession.getTransaction.begin; }
protected void commit { getSession.getTransaction.commit;
}
protected void rollback { try {
getSession.getTransaction.rollback; log.logLevel.WARNING,rollback success;
} catch HibernateException e { log.logLevel.WARNING,Cannot rollback,e;
} try {
getSession.close; } catch HibernateException e {
log.logLevel.WARNING,Cannot close,e; }
DAO.session.setnull; }
public static void close { getSession.close;
DAO.session.setnull; }
private static final Logger log = Logger.getAnonymousLogger; private static final ThreadLocal session = new ThreadLocal;
private static final SessionFactory sessionFactory = new Configuration.configure.buildSessionFactory;
}
Class DAOFile.java: package
dao; import
entity.AdException; import
entity.File; import
entity.Materi; import
java.util.List; import
org.hibernate.HibernateException; import
org.hibernate.Query; public
class DAOFile extends DAO { public File getString file_id throws AdException {
try { begin;
Query q = getSession.createQuery from File where file_id= :file_id;
q.setStringfile_id, file_id; File kelas = File q.uniqueResult;
commit; return kelas;
} catch HibernateException e { rollback;
throw new AdExceptionCould not obtain the named category + file_id, e; }
}
public File createString path, Materi materi, byte[] file_file, String file_type throws AdException {
try { begin;
File file = new Filepath, materi, file_type; getSession.savefile;
commit; return file;
} catch HibernateException e { rollback;
throw new AdExceptionCould not create file + e; }
} public void deleteFile file throws AdException {
try { begin;
getSession.deletefile; commit;
} catch HibernateException e { rollback;
throw new AdExceptionCould not delete file, e; }
} public List list throws AdException {
try { begin;
Query q = getSession.createQueryfrom File; List list = q.list;
commit; return list;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the categories, e; }
} }
Class DAOImage.java: package
dao; import
entity.AdException; import
entity.Images; import
entity.User; import
org.hibernate.HibernateException; import
org.hibernate.Query; public
class DAOImage extends DAO {
public Images getString file_id throws AdException { try {
begin; Query q = getSession.createQuery
from Images where image_id= :file_id; q.setStringfile_id, file_id;
Images kelas = Images q.uniqueResult; commit;
return kelas; } catch HibernateException e {
rollback; throw new AdExceptionCould not obtain the named category + file_id, e;
} }
public Images createString path, User user throws AdException { try {
begin; Images file = new Imagespath, user;
getSession.savefile; commit;
return file; } catch HibernateException e {
rollback; throw new AdExceptionCould not create file + e;
} }
public void deleteImages image throws AdException { try {
begin; getSession.deleteimage;
commit; } catch HibernateException e {
rollback; throw new AdExceptionCould not delete file, e;
} }
} Class DAOMateri.java:
package dao;
import java.util.List;
import org.hibernate.HibernateException;
import entity.AdException;
import entity.Materi;
import entity.User;
import entity.Matkul;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Restrictions;
public class DAOMateri extends DAO {
public Materi getString materi_id throws AdException { try {
begin; Query q = getSession.createQuery
from Materi where materi_id= :materi_id; q.setStringmateri_id, materi_id;
Materi materi = Materi q.uniqueResult; commit;
return materi; } catch HibernateException e {
rollback; throw new AdExceptionCould not obtain the named category + materi_id, e;
} }
public Materi getByMatkulString matkul throws AdException { try {
begin; Query q = getSession.createQuery
from Materi where matkul= :matkul; q.setStringmatkul, matkul;
Materi materi = Materi q.uniqueResult; commit;
return materi; } catch HibernateException e {
rollback; throw new AdExceptionCould not obtain the named category + matkul, e;
} }
public List listBySearchString keyword throws AdException { try {
begin; Criteria crit = getSession.createCriteriaMateri.class;
Criterion title = Restrictions.liketitle, + keyword + ; Criterion content = Restrictions.likecontent, + keyword + ;
LogicalExpression orExp = Restrictions.ortitle, content; crit.addorExp;
List result = crit.list; commit;
return result; } catch HibernateException e {
rollback; throw new AdExceptionCould not list the categories, e;
}
} public Materi createString title, String content, User user, Matkul matkul
throws AdException { try {
begin; Materi advert = new Materititle, content, user, matkul;
getSession.saveadvert; commit;
return advert; } catch HibernateException e {
rollback; throw new AdExceptionCould not create advert, e;
} }
public void deleteMateri advert throws AdException { try {
begin; getSession.deleteadvert;
commit; } catch HibernateException e {
rollback; throw new AdExceptionCould not delete advert, e;
} }
public List list throws AdException { try {
begin; Query q = getSession.createQueryfrom Materi;
List list = q.list; commit;
return list; } catch HibernateException e {
rollback; throw new AdExceptionCould not list the categories, e;
} }
public List listByMatkulString cd throws AdException { try {
begin; Query q = getSession.createQueryfrom Materi where matkul= :cd;
List list = q.list; commit;
return list; } catch HibernateException e {
rollback; throw new AdExceptionCould not list the categories, e;
}
} public List listByUserString usId throws AdException {
try { begin;
Query q = getSession.createQueryfrom Materi where user= :usId; List list = q.list;
commit; return list;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the Materi + e; }
} public void updateMateri materi, String judul, String content, Matkul matkul, User user
throws AdException {
try { begin;
materi.setTitlejudul; materi.setContentcontent;
materi.setMatkulmatkul; materi.setUseruser;
getSession.mergemateri; commit;
} catch HibernateException e { rollback;
throw new AdExceptionCould not save the category, e; }
} }
Class DAOMatkul.java: package
dao; import
entity.Matkul; import
java.util.List; import
org.hibernate.HibernateException; import
org.hibernate.Query; import
entity.AdException; import
org.hibernate.Criteria; import
org.hibernate.criterion.Criterion; import
org.hibernate.criterion.LogicalExpression; import
org.hibernate.criterion.Restrictions; public
class DAOMatkul extends DAO { public Matkul getString matkul_id throws AdException {
try { begin;
Query q = getSession.createQuery from Matkul where matkul_id = :matkul_id;
q.setStringmatkul_id, matkul_id; Matkul category = Matkul q.uniqueResult;
commit; return category;
} catch HibernateException e { rollback;
throw new AdExceptionCould not obtain the named category + matkul_id, e; }
} public Matkul createString title, String kode, String sem
throws AdException { try {
begin; Matkul matkul = new Matkultitle, kode, sem;
getSession.savematkul; commit;
return matkul; } catch HibernateException e {
rollback; throw new AdExceptionCould not create advert, e;
} }
public void deleteMatkul matkul throws AdException { try {
begin; getSession.deletematkul;
commit; } catch HibernateException e {
rollback; throw new AdExceptionCould not delete advert, e;
} }
public List list throws AdException { try {
begin; Query q = getSession.createQueryfrom Matkul order by matkul_title asc;
List list = q.list; commit;
return list; } catch HibernateException e {
rollback; throw new AdExceptionCould not list the categories, e;
} }
public List listBySearchString keyword throws AdException { try {
begin; Criteria crit = getSession.createCriteriaMatkul.class;
crit.addRestrictions.likematkul_title, + keyword + ; List result = crit.list;
commit; return result;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the categories, e; }
} public List listTutor throws AdException {
try { begin;
Query q = getSession.createQueryfrom Matkul order by matkul_title asc; List list = q.list;
commit; return list;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the categories, e; }
} public void updateMatkul matkul, String judul, String kode, String sem throws AdException {
try { begin;
matkul.setMatkul_titlejudul; matkul.setMatkul_kodekode;
matkul.setMatkul_semestersem; getSession.mergematkul;
commit; } catch HibernateException e {
rollback; throw new AdExceptionCould not save the category, e;
} }
}
Class DAOUser.java: package
dao; import
org.hibernate.HibernateException; import
org.hibernate.Query; import
entity.AdException; import
entity.User; import
java.util.List; import
org.hibernate.Criteria; import
org.hibernate.criterion.Criterion; import
org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Restrictions;
public class DAOUser extends DAO {
public User getString user_id throws AdException { try {
begin; Query q = getSession.createQueryfrom User where user_id = :user_id;
q.setStringuser_id, user_id; User user = User q.uniqueResult;
commit; return user;
} catch HibernateException e { rollback;
throw new AdExceptionCould not get user + user_id, e; }
} public List list throws AdException {
try { begin;
Query q = getSession.createQueryfrom User; List list = q.list;
commit; return list;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the categories, e; }
} public List listBySearchString keyword throws AdException {
try { begin;
Criteria crit = getSession.createCriteriaUser.class; Criterion title = Restrictions.likeuser_namaDepan, + keyword + ;
Criterion content = Restrictions.likeuser_namaBelakang, + keyword + ; LogicalExpression orExp = Restrictions.ortitle, content;
crit.addorExp; List result = crit.list;
commit; return result;
} catch HibernateException e { rollback;
throw new AdExceptionCould not list the categories, e; }
} public List listForTutor throws AdException {
try {
begin; Query q = getSession.createQueryfrom User where user_type=2 order by
user_namaDepan asc;
List list = q.list; commit;
return list; } catch HibernateException e {
rollback; throw new AdExceptionCould not list the tutors, e;
} }
public void updateUser user, String nama_depan, String nama_belakang, String users_email, String
users_nip, String users_degree, String users_type, String users_cv, String users_pwd throws
AdException { try {
begin; user.setUser_passwordusers_pwd;
user.setUser_namaDepannama_depan; user.setUser_namaBelakangnama_belakang;
user.setUser_emailusers_email; user.setUser_nipusers_nip;
user.setUser_gelarusers_degree; user.setUser_typeusers_type;
user.setUser_cvusers_cv; getSession.mergeuser;
commit; } catch HibernateException e {
rollback; throw new AdExceptionCould not save the category + e;
} }
public void updateUser user, String nama_depan, String nama_belakang, String users_email, String
users_nip, String users_degree, String users_type, String users_cv throws AdException { try {
begin; user.setUser_namaDepannama_depan;
user.setUser_namaBelakangnama_belakang; user.setUser_emailusers_email;
user.setUser_nipusers_nip; user.setUser_gelarusers_degree;
user.setUser_typeusers_type; user.setUser_cvusers_cv;
getSession.mergeuser; commit;
} catch HibernateException e { rollback;
throw new AdExceptionCould not save the category + e; }
}
public void resetPwdUser user, String users_nip throws AdException { try {
begin; user.setUser_passwordusers_nip;
getSession.mergeuser; commit;
} catch HibernateException e { rollback;
throw new AdExceptionCould not save the category + users_nip, e; }
} public User createString user_namaDepan, String user_namaBelakang, String user_email,
String user_password, String user_nip, String user_gelar, String user_type, String user_cv throws
AdException {
try { begin;
User user = new Useruser_namaDepan, user_namaBelakang, user_email, user_nip, user_nip,
user_gelar, user_type, user_cv; getSession.saveuser;
commit; return user;
} catch HibernateException e { rollback;
throw new AdExceptionCould not create user + user_namaDepan + e; }
} public void deleteUser user throws AdException {
try { begin;
getSession.deleteuser; commit;
} catch HibernateException e { rollback;
throw new AdExceptionCould not delete user + user.getUser_namaDepan, e; }
} }
Package entity: Class AdException.java:
package entity;
public class AdException extends Exception {
public AdExceptionString message {
supermessage; }
public AdExceptionString message, Throwable cause { supermessage, cause;
} }
Class File.java:
package entity;
public class File {
private long file_id; private String file_path;
private Materi materi; private String file_type;
public FileString file_path, Materi materi, String file_type { this.file_path = file_path;
this.materi = materi; this.file_type = file_type;
} public String getFile_type {
return file_type; }
public void setFile_typeString file_type { this.file_type = file_type;
} public File {
} public long getFile_id {
return file_id; }
public void setFile_idlong file_id { this.file_id = file_id;
} public String getFile_path {
return file_path; }
public void setFile_pathString file_path { this.file_path = file_path;
}
public Materi getMateri { return materi;
} public void setMateriMateri materi {
this.materi = materi; }
}
File.hbm.xml:
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐mapping PUBLIC ‐HibernateHibernate Mapping DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐mapping‐3.0.dtd
hibernate ‐mapping
class dynamic‐insert=false dynamic‐update=false mutable=true name=entity.File optimistic
‐lock=version polymorphism=implicit select‐before‐update=false table=file id column=file_id name=file_id type=long
generator class=native id
property column=file_path name=file_path type=string property column=file_type name=file_type type=string
many‐to‐one class=entity.Materi
column=materi foreign
‐key=fk_file_materi name=materi
not‐null=true class
hibernate ‐mapping
Class
Images.java
package entity;
public class Images {
private long image_id; private String image_path;
private User user; public ImagesString file_path, User user {
this.image_path = file_path; this.user = user;
} public Images {
} public long getImage_id {
return image_id; }
public void setImage_idlong image_id {
this.image_id = image_id; }
public String getImage_path { return image_path;
} public void setImage_pathString image_path {
this.image_path = image_path; }
public User getUser { return user;
} public void setUserUser user {
this.user = user; }
}
Images.hbm.xml
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐mapping PUBLIC ‐HibernateHibernate Mapping DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐mapping‐3.0.dtd
hibernate ‐mapping
class dynamic‐insert=false dynamic‐update=false mutable=true name=entity.Images optimistic
‐lock=version polymorphism=implicit select‐before‐update=false table=images id column=image_id name=image_id type=long
generator class=native id
property column=image_path name=image_path type=string many‐to‐one class=entity.User column=user foreign‐key=fk_image_user name=user
not ‐null=true
class hibernate
‐mapping
Class Materi.java package
entity; import
java.util.HashSet; import
java.util.Set; public
class Materi { private long materi_id;
private String title; private String content;
private User user; private Matkul matkul;
private Set files = new HashSet;
public MateriString title, String content, User user, Matkul matkul { this.title = title;
this.content = content; this.user = user;
this.matkul = matkul; this.files = new HashSet;
} Materi {
} public Set getFiles {
return files; }
public void setFilesSet files { this.files = files;
} public String getContent {
return content; }
public void setContentString content { this.content = content;
} public String getTitle {
return title; }
public void setTitleString title { this.title = title;
} public User getUser {
return user; }
public void setUserUser user { this.user = user;
} public long getMateri_id {
return materi_id; }
public void setMateri_idlong materi_id { this.materi_id = materi_id;
}
public Matkul getMatkul { return matkul;
} public void setMatkulMatkul matkul {
this.matkul = matkul; }
}
Materi.hbm.xml
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐mapping PUBLIC ‐HibernateHibernate Mapping DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐mapping‐3.0.dtd
hibernate ‐mapping
class dynamic‐insert=false dynamic‐update=false mutable=true name=entity.Materi optimistic
‐lock=version polymorphism=implicit select‐before‐update=false table=materi id column=materi_id name=materi_id type=long
generator class=native id
property column=title name=title type=string property column=content name=content type=text
many‐to‐one class=entity.User
column=user foreign
‐key=fk_materi_user name=user
not‐null=true many‐to‐one class=entity.Matkul column=matkul foreign‐key=fk_materi_matkul
name=matkul not‐null=true
set cascade=delete inverse=true lazy=true name=files table=file key
column name=materi key
one‐to‐many class=entity.File set
set cascade=delete inverse=true lazy=true name=soals table=soal key
column name=materi key
set class
hibernate ‐mapping
Class Matkul.java
package entity;
import java.util.HashSet;
import java.util.Set;
public class Matkul {
private long matkul_id;
private String matkul_title; private String matkul_kode;
private String matkul_semester; private Set materis = new HashSet;
public Matkul { }
public Matkul String matkul_title,String matkul_kode,String matkul_semester { this.matkul_title = matkul_title;
this.matkul_kode = matkul_kode; this.matkul_semester = matkul_semester;
this.materis = new HashSet; }
public String getMatkul_semester { return matkul_semester;
} public void setMatkul_semesterString matkul_semester {
this.matkul_semester = matkul_semester; }
public String getMatkul_kode { return matkul_kode;
} public void setMatkul_kodeString matkul_kode {
this.matkul_kode = matkul_kode; }
public Set getMateris { return materis;
} public long getMatkul_id {
return matkul_id; }
public String getMatkul_title { return matkul_title;
} public void setMaterisSet materis {
this.materis = materis; }
public void setMatkul_idlong matkul_id { this.matkul_id = matkul_id;
}
public void setMatkul_titleString matkul_title { this.matkul_title = matkul_title;
} }
Matkul.hbm.xml
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐mapping PUBLIC ‐HibernateHibernate Mapping DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐mapping‐3.0.dtd
hibernate ‐mapping
class dynamic‐insert=false dynamic‐update=false mutable=true name=entity.Matkul optimistic
‐lock=version polymorphism=implicit select‐before‐update=false table=matkul id column=matkul_id name=matkul_id type=long
generator class=native id
property column=matkul_title name=matkul_title not‐null=true type=string property column=matkul_kode name=matkul_kode not‐null=true unique=true
type=string property
column=matkul_semester name=matkul_semester
not ‐null=true
type=string set cascade=delete inverse=true lazy=true name=materis table=materi
key column name=matkul
key one‐to‐many class=entity.Materi
set class
hibernate ‐mapping
Class User.java package
entity; import
java.util.HashSet; import
java.util.Set; public
class User { private long user_id;
private String user_namaDepan; private String user_namaBelakang;
private String user_email; private String user_password;
private String user_nip; private String user_gelar;
private String user_type; private String user_cv;
private Set materis = new HashSet; private Set images = new HashSet;
public UserString user_namaDepan, String user_namaBelakang, String user_email, String user_password,
String user_nip, String user_gelar, String user_type, String user_cv { this.user_type = user_type;
this.user_namaDepan = user_namaDepan; this.user_namaBelakang = user_namaBelakang;
this.user_email = user_email; this.user_password = user_password;
this.user_nip = user_nip; this.user_gelar = user_gelar;
this.user_cv = user_cv; this.materis = new HashSet;
this.images = new HashSet; }
public User { }
public String getUser_cv { return user_cv;
} public void setUser_cvString user_cv {
this.user_cv = user_cv; }
public Set getImages { return images;
} public void setImagesSet images {
this.images = images; }
public Set getMateris { return materis;
} public String getUser_type {
return user_type; }
public void setUser_typeString user_type { this.user_type = user_type;
} public String getUser_email {
return user_email; }
public String getUser_gelar { return user_gelar;
}
public long getUser_id { return user_id;
} public String getUser_namaBelakang {
return user_namaBelakang; }
public String getUser_namaDepan { return user_namaDepan;
} public String getUser_nip {
return user_nip; }
public String getUser_password { return user_password;
} public void setMaterisSet materis {
this.materis = materis; }
public void setUser_emailString user_email { this.user_email = user_email;
} public void setUser_gelarString user_gelar {
this.user_gelar = user_gelar; }
public void setUser_idlong user_id { this.user_id = user_id;
} public void setUser_namaBelakangString user_namaBelakang {
this.user_namaBelakang = user_namaBelakang; }
public void setUser_namaDepanString user_namaDepan { this.user_namaDepan = user_namaDepan;
} public void setUser_nipString user_nip {
this.user_nip = user_nip; }
public void setUser_passwordString user_password { this.user_password = user_password;
}
}
User.hbm.xml
?xml version=1.0 encoding=UTF‐8?
DOCTYPE hibernate‐mapping PUBLIC ‐HibernateHibernate Mapping DTD 3.0EN
http:hibernate.sourceforge.nethibernate ‐mapping‐3.0.dtd
hibernate ‐mapping
class dynamic‐insert=false dynamic‐update=false mutable=true name=entity.User optimistic
‐lock=version polymorphism=implicit select‐before‐update=false table=user id column=user_id name=user_id type=long
generator class=identity id
property column=user_namaDepan name=user_namaDepan type=string property column=user_namaBelakang name=user_namaBelakang type=string
property column=user_email name=user_email type=string unique=true property column=user_password name=user_password type=string
property column=user_nip name=user_nip type=string unique=true property column=user_gelar name=user_gelar type=string
property column=user_type name=user_type not‐null=true type=string property column=user_cv name=user_cv not‐null=true type=text
set cascade=delete inverse=true lazy=true name=materis table=materi key
column name=user key
one‐to‐many class=entity.Materi set
set cascade=delete inverse=true lazy=true name=images table=images key
column name=user key
one‐to‐many class=entity.Images set
class hibernate
‐mapping
File glue.js:
=========================matkul===================================== jmaki.subscribematkulTableonSelect,
functionargs{ var title= args.value.title;
var kode= args.value.kode; var sem= args.value.sem;
var id= args.value.id; document.getElementByIdsem.value=sem;
document.getElementByIdtitle.value=title; document.getElementByIdkode.value=kode;
document.getElementByIdid.value=id; };
jmaki.subscribebuttonSaveonClick, functionargs{
var val = document.getElementByIdtitle.value;
var kode = document.getElementByIdkode.value; var sem = document.getElementByIdsem.value;
var valId = document.getElementByIdid.value; ifval={
ifvalId={ var row = {
id : valId, title : val,
kode:kode, sem:sem
}; jmaki.doAjax{
method: POST, url: edit.jsp?title= + val+kode=+kode+sem=+sem+id=+valId
, callback: function_req {
jmaki.publishjmakimatkulupdateRow, { targetId: valId,
value:row };
} }
} else{
jmaki.doAjax{ method: POST,
url: add.jsp?title= + val+kode=+kode+sem=+sem }
refreshPage; }
document.getElementByIdid.value=; document.getElementByIdtitle.value=;
document.getElementByIdkode.value=; document.getElementByIdsem.value=;
} else{
alertAnda harus mengisi judul }
}; jmaki.subscribebuttonDeleteonClick,
functionargs{ var id = document.getElementByIdid.value;
ifid={ ifconfirmHapus data ?{
document.getElementByIdid.value=; document.getElementByIdtitle.value=;
document.getElementByIdsem.value=; document.getElementByIdkode.value=;
jmaki.doAjax{ method: POST,
url: delete.jsp?id= + id, callback: function_req {
jmaki.publishjmakimatkulremoveRow, { targetId: id
}; }
} }
} };
jmaki.subscribebuttonNewonClick, functionargs{
document.getElementByIdkode.value=; document.getElementByIdtitle.value=;
document.getElementByIdid.value=; document.getElementByIdsem.value=;
}; =====================user=========================================
jmaki.subscribeuserTableonSelect, functionargs{
var fn= args.value.fn; var ln= args.value.ln;
var email= args.value.email; var nip= args.value.nip;
var gelar= args.value.gelar; var type= args.value.type;
var pwd= args.value.pwd; var cv= args.value.cv;
var id= args.value.id; document.getElementByIdfn.value=fn;
document.getElementByIdln.value=ln; document.getElementByIdem.value=email;
document.getElementByIdnip.value=nip; document.getElementByIdgelar.value=gelar;
document.getElementByIdpwd.value=pwd; document.getElementByIdid.value=id;
tinyMCE.execCommandmceSetContent,false,cv; if type == 1 {
document.getElementByIdtype.options[1].selected = true }
else{ document.getElementByIdtype.options[2].selected = true
} };
jmaki.subscribeNewUseronClick, functionargs{
document.getElementByIdid.value=; document.getElementByIdfn.value=;
document.getElementByIdln.value=; document.getElementByIdem.value=;
document.getElementByIdnip.value=; document.getElementByIdgelar.value=;
document.getElementByIdpwd.value=; tinyMCE.execCommandmceSetContent,false,;
document.getElementByIdtype.options[0].selected = true;
}; jmaki.subscribeSaveUseronClick,
functionargs{ var fn=document.getElementByIdfn.value;
var ln=document.getElementByIdln.value; var email=document.getElementByIdem.value;
var pwd=document.getElementByIdpwd.value; var nip=document.getElementByIdnip.value;
var gelar=document.getElementByIdgelar.value; var type=document.getElementByIdtype.value;
var cv = tinyMCE.getFCKxeditor1.getContent ; var id= document.getElementByIdid.value;
iffn=ln={ ifid={
var row = { id : id,
fn : fn, ln : ln,
email : email, nip : nip
}; jmaki.doAjax{
method: POST, url: edit.jsp?fn= +
fn+cv=+cv+ln=+ln+em=+email+nip=+nip+gelar=+gelar+type=+type+id=+i d+act=1
, callback: function_req {
jmaki.publishjmakiuserupdateRow, { targetId: id,
value:row };
} }
} else{
jmaki.doAjax{ method: POST,
url: add.jsp?fn= + fn+cv=+cv+ln=+ln+em=+email+pwd=+pwd+nip=+nip+gelar=+gelar+type=
+type }
} }
document.getElementByIdfn.value=; document.getElementByIdln.value=;
document.getElementByIdem.value=; document.getElementByIdnip.value=;
document.getElementByIdpwd.value=; document.getElementByIdgelar.value=;
tinyMCE.execCommandmceSetContent,false,;
document.getElementByIdtype.options[0].selected = true document.getElementByIdid.value=;
refreshPage; };
jmaki.subscribeSaveTutoronClick, functionargs{
var fn=document.getElementByIdfn.value; var ln=document.getElementByIdln.value;
var email=document.getElementByIdem.value; var pwd=document.getElementByIdpwd.value;
var pwd2=document.getElementByIdpwd2.value; var nip=document.getElementByIdnip.value;
var gelar=document.getElementByIdgelar.value; var type=document.getElementByIdtype.value;
var id= document.getElementByIdid.value; var cv = tinyMCE.getFCKxeditor1.getContent;
ifpwd2={ ifpwd==pwd2{
jmaki.doAjax{ method: POST,
url: edit.jsp?fn= + fn+cv=+cv+ln=+ln+em=+email+pwd=+pwd+pwd=+pwd2+nip=+nip+gelar
=+gelar+type=+type+id=+id+act=1 }
document.getElementByIdfn.value=fn; document.getElementByIdln.value=ln;
document.getElementByIdem.value=email; document.getElementByIdnip.value=nip;
document.getElementByIdpwd.value=pwd; document.getElementByIdgelar.value=gelar;
document.getElementByIdtype.value = type; document.getElementByIdid.value=id;
}else{ alertpassword tidak sesuai;
} }else{
jmaki.doAjax{ method: POST,
url: edit.jsp?fn= + fn+cv=+cv+ln=+ln+em=+email+pwd=+pwd+pwd=+pwd2+nip=+nip+gelar
=+gelar+type=+type+id=+id+act=1 }
document.getElementByIdfn.value=fn; document.getElementByIdln.value=ln;
document.getElementByIdem.value=email; document.getElementByIdnip.value=nip;
document.getElementByIdpwd.value=pwd; document.getElementByIdgelar.value=gelar;
document.getElementByIdtype.value = type; document.getElementByIdid.value=id;
} };
jmaki.subscribeDeleteUseronClick, functionargs{
var id = document.getElementByIdid.value; ifid={
ifconfirmHapus data ?{ document.getElementByIdfn.value=;
document.getElementByIdln.value=; document.getElementByIdem.value=;
document.getElementByIdnip.value=; document.getElementByIdpwd.value=;
document.getElementByIdgelar.value=; tinyMCE.execCommandmceSetContent,false,;
document.getElementByIdtype.options[0].selected = true document.getElementByIdid.value=;
jmaki.doAjax{ method: POST,
url: delete.jsp?id= + id, callback: function_req {
jmaki.publishjmakiuserremoveRow, { targetId: id
}; }
} }
} };
jmaki.subscribeResetPwdUseronClick, functionargs{
var id = document.getElementByIdid.value; var nip =document.getElementByIdnip.value;
ifid={ jmaki.doAjax{
method: POST, url: edit.jsp?id= + id+act=3nip=+nip
} }
}; ========================upload
file================================= jmaki.subscribemateriTableUploadFileonSelect,
functionargs{ var id= args.value.id;
document.getElementByIdid.value=id; updateDivUploadFileid;
}; function
updateDivUploadFileid{ jmaki.doAjax{
method: POST, url: form.jsp?id=+id,
callback: function_req { document.getElementByIdcontent.innerHTML = _req.responseText;
}
} }
jmaki.subscribeuserTableImageonSelect, functionargs{
var id= args.value.id; document.getElementByIdid.value=id;
updateDivUploadFileImageid; };
function updateDivUploadFileImageid{
jmaki.doAjax{ method: POST,
url: form_image.jsp?id=+id, callback: function_req {
document.getElementByIdcontent.innerHTML = _req.responseText; }
} }
==========================materi======================================== jmaki.subscribenewMaterionClick,
functionargs{ tinyMCE.execCommandmceSetContent,false,;
document.getElementByIdid.value=; document.getElementByIdtitle.value=;
document.getElementByIdcourse.value=; document.getElementByIdtutor.value=;
}; jmaki.subscribemateriTableonSelect,
functionargs{ var content= args.value.content;
var title= args.value.title; var tutorId= args.value.tutorId;
var courseId= args.value.courseId; var id= args.value.id;
tinyMCE.execCommandmceSetContent,false,content; document.getElementByIdid.value=id;
document.getElementByIdtitle.value=title; updateDivMatericourseId,tutorId;
}; jmaki.subscribesaveMaterionClick,
functionargs{ var id= document.getElementByIdid.value;
var tutor= document.getElementByIdtutor.value; var course= document.getElementByIdcourse.value;
var title= document.getElementByIdtitle.value; var content = tinyMCE.getFCKxeditor1.getContent ;
ifid={ var row = {
id : id, tutor : tutor,
course : course, title : title
};
jmaki.doAjax{ method: POST,
url: edit.jsp?tutor= + tutor+course=+course+content=+content+title=+title+id=+id
, callback: function_req {
jmaki.publishjmakimateriupdateRow, { targetId: id,
value:row };
} }
} else{
jmaki.doAjax{ method: POST,
url: add.jsp?tutor= + tutor+course=+course+content=+content+title=+title }
} document.getElementByIdid.value=;
document.getElementByIdtitle.value=; document.getElementByIdcourse.value=;
document.getElementByIdtutor.value=; tinyMCE.execCommandmceSetContent,false,;
refreshPage; };
jmaki.subscribedeleteMaterionClick, functionargs{
var id = document.getElementByIdid.value; ifid={
ifconfirmHapusx data ?{ tinyMCE.execCommandmceSetContent,false,;
document.getElementByIdid.value=; document.getElementByIdtitle.value=;
document.getElementByIdcourse.value=; document.getElementByIdtutor.value=;
jmaki.doAjax{ method: POST,
url: delete.jsp?id= + id, callback: function_req {
jmaki.publishjmakimateriremoveRow, { targetId: id
}; }
} }
} };
function updateDivMatericourseId,tutorId{
jmaki.doAjax{ method: POST,
url: selectorMateri.jsp?courseId=+courseId+tutorId=+tutorId, callback: function_req {
document.getElementByIdselectorMateri.innerHTML = _req.responseText; }
} }
========================Login========================================= jmaki.subscribeLoginonClick,
functionargs{ var nip=document.getElementByIdlogin_name.value;
var pwd=document.getElementByIdlogin_password.value; jmaki.doAjax{
method: POST, url: login.jsp?nip= + nip+pwd=+pwd
} };
Frontend Pages: lectures.jsp
page import=dao.DAO page import=dao.DAOKuliah
page import=dao.DAOUser page import=entity.AdException
page import=entity.User page import=entity.Kuliah
page import=java.util.Iterator page import=java.util.List
page import=dao.DAOMatkul page import=entity.Matkul
taglib prefix=a uri=http:jmakiv1.0jsp DOCTYPE
html PUBLIC ‐W3CDTD XHTML 1.0 TransitionalEN http:www.w3.orgTRxhtml1DTDxhtml1‐transitional.dtd
html head
link rel=stylesheet href=jmaki‐standard.css type=textcsslink titleLecturestitle
meta http‐equiv=Content‐Type content=texthtml; charset=UTF‐8 head
body div id=outerBorder
include file=header.jsp try {
List users = new DAOUser.listForTutor; Iterator ci = users.iterator;
while ci.hasNext { User user = User ci.next;
String id = Long.toStringuser.getUser_id; Iterator ai = user.getMateris.iterator;
if ai.hasNext { out.printdiv id=level1img src=imagesarrow.png width=9 +
a href=lecture.jsp?id= + id + + user.getUser_namaDepan + + user.getUser_namaBelakang + abr div;
} }
DAO.close; } catch AdException e {
System.out.printlne.getMessage; }
div ‐‐ main ‐‐
div ‐‐ outerborder ‐‐ body
html
course.jsp:
page import=dao.DAO page import=dao.DAOMatkul
page import=entity.AdException page import=entity.Matkul
page import=java.util.Iterator page import=java.util.List
taglib prefix=a uri=http:jmakiv1.0jsp DOCTYPE
html PUBLIC ‐W3CDTD XHTML 1.0 TransitionalEN http:www.w3.orgTRxhtml1DTDxhtml1‐transitional.dtd
html head
link rel=stylesheet href=jmaki‐standard.css type=textcsslink titleCoursestitle
meta http‐equiv=Content‐Type content=texthtml; charset=UTF‐8 head
body div id=outerBorder
include file=header.jsp try {
List matkuls = new DAOMatkul.list; Iterator ci = matkuls.iterator;
while ci.hasNext { Matkul matkul = Matkul ci.next;
String id = Long.toStringmatkul.getMatkul_id; Iterator ai = matkul.getMateris.iterator;
if ai.hasNext { out.printdiv id=level1img src=imagesarrow.png width=9 +
a href=subjectListByCourse.jsp?id= + id + + matkul.getMatkul_title + abrdiv;
} }
DAO.close; } catch AdException e {
System.out.printlne.getMessage; }
div ‐‐ outerborder ‐‐ body
html
subject.jsp:
String idx = request.getParameterid; if idx == null || idx.equalsIgnoreCase {
jsp:forward page=index.jsp
} page import=dao.DAO
page import=dao.DAOMateri page import=dao.DAOFile
page import=entity.AdException page import=entity.Materi
page import=entity.Matkul page import=entity.File
page import=java.util.Iterator page import=java.util.List
page import=dao.DAOMatkul page import=entity.Matkul
page import=java.io. taglib prefix=a uri=http:jmakiv1.0jsp
DOCTYPE html PUBLIC ‐W3CDTD XHTML 1.0 TransitionalEN
http:www.w3.orgTRxhtml1DTDxhtml1‐transitional.dtd html
head link rel=stylesheet href=..jmaki‐standard.css type=textcsslink
titleSubjecttitle meta http‐equiv=Content‐Type content=texthtml; charset=UTF‐8
head body
div id=outerBorder div id=header
div id=bannerimg src=..imagesUIN_logo.jpg width=100 alt=UIN_logo div
div div id=main
div id=menu a href=..lectures.jspLecturesa |
a href=..course.jspCoursesabr div
String id = request.getParameterid; String Courseid = request.getParameterCourseid;
try { Materi materi = new DAOMateri.getid;
out.printlnb + materi.getTitle + bbr ; out.printmateri.getContent + br br br bAttachments:bbr ;
Iterator ai = materi.getFiles.iterator; while ai.hasNext {
File files = File ai.next;
if files.getFile_type.equalsIgnoreCase2 { out.printimg src=..imagesarrow.png width=9 + a href=..uploadfiles
+ files.getFile_path + + files.getFile_path + abr;
} }
DAO.close; } catch AdException e {
System.out.printlne.getMessage; }
div ‐‐ main ‐‐ div id=related
bMateri lain dari Dosen ini:bbr Matkul matkul = new DAOMatkul.getCourseid;
Iterator ai = matkul.getMateris.iterator; while ai.hasNext {
Materi advert = Materi ai.next; if advert.getMateri_id = Integer.parseIntid {
out.printdiv id=subject_listimg src=..imagesarrow.png width=9 + a href=subject.jsp?id=
+ advert.getMateri_id + Courseid= + Courseid + + advert.getTitle +
a; out.printlnbr Tutor : + advert.getUser.getUser_namaDepan +
brbrdiv; }
} DAO.close;
div ‐‐ related ‐‐ div ‐‐ outerborder ‐‐
body html
UNIVERSITAS ISLAM NEGERI UIN SYARIF HIDAYATULLAH
JAKARTA
Jln. Ir. H. Juanda No. 95 Ciputat 15412 Telp. 021 7402982, Fax. 021 7402982, website :
www.uinjkt.ac.id
, email :
infouinjkt.ac.id
NIM : 105091002893
I. DATA PRIBADI
Nama : Aditya Prasetio
Tempat Tgl. Lahir : Jakarta, 3 November 1987
Jenis Kelamin : Laki-Laki
Agama :
Islam Warga Negara
: Indonesia Negara Asal
: Indonesia Alamat Asal
: Jl. Petogogan I22 RT 00505 Gandaria Utara Keb. Baru Jakarta Selatan
Kode Pos : 12240
E-mail :
prasetio.adityagmail.com TeleponHP
: 081319960703 Asal sekolah SMA
: MA. Darunnajah Asal Propinsi SMA
: Jakarta Jurusan
: IPA
Alamat Sekolah : Jl. Ulujami Raya No. 86 Keb. Lama Jak-Sel
NEM : 20.84
Email : SDA
IPK terakhir : 2.91
II. DATA KELUARGA
Nama Ayah : Achmad Soeharto
Pekerjaan :
- Pendidikan Terakhir : STM
Nama Ibu : Sri Kadariyah
Pekerjaan :
- Pendidikan Terakhir : SMP
Alamat Sekarang : -
Kode Pos : -
Telepon :
- Penghasilan
: - Orang TuaWali
: Syamsuddin III. JENJANG PROGRAM : S1
IV. STATUS PROGRAM :
Reguler
V. PILIHAN FAKULTASPROGRAM STUDI
Fakultas : Fakultas Sains Teknologi
Program Studi : Teknik Informatika
Foto 3 x 4 Terbaru
Pas photo
PENGEMBANGAN APLIKASI CONTENT MANAGEMENT SYSTEM UNTUK MOBILE
LEARNING BAGI PENGAJAR BERBASIS JAVA
Aditya Prasetio
Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta
Tel : 021 823026 Fax : 021 8624025 Email : prasetio.adityagmail.com
ABSTRAK
Selama satu dekade terakhir, dunia pendidikan dan pelatihan sangat dipengaruhi oleh perkembangan teknologi. Fenomena ini akan semakin menguat mengingat teknologi ke depan
akan semakin kompleks, powerfull, dan terjangkau secara ekonomi. Sebagai contoh paling populer, internet kini sudah menjadi kebutuhan penting bagi siapa pun yang terlibat dalam
aktifitas pendidikan dan pelatihan, baik sebagai media maupun sumber belajar.
Pada penelitian sebelumnya setiap aplikasi hanya terbatas pada satu pelajaran saja sehingga pengguna memerlukan aplikasi berbeda pada setiap pelajaran. Disamping itu pengguna harus
mengunduh aplikasi tersebut ke handphone mereka, hal ini membuat content menjadi statis.
Oleh karena itu, dirasa perlu untuk memngembangkan aplikasi mobile learning yang memiliki content dinamis. Adapun metodologi yang penulis gunakan dalam membuat aplikasi ini adalah
menggunakan RAD, yang mempunyai lima tahapan, yaitu Communication, Planning, Modelling, Construction, dan Deployment. Penulis menggunakan bahasa pemrogaman Java, Framework
Jmaki untuk AJAX, ORM Hibernate dan database MySQL dalam membuat aplikasi ini. Dengan adanya aplikasi ini maka akan mempermudah pengajar dalam memberikan materi belajar
maupun soal latihan tanpa terbatas oleh ruang dan waktu sehingga diharapkan dapat meningkatkan efektifitas dalam belajar.
Kata Kunci : Mobile learning, Content Management System, web dinamis, RAD.
1. PENDAHULUAN
1.1. Latar Belakang