ADITYA PRASETIO
105091002893
SKRIPSI
Sebagai Salah Satu Syarat untuk Memperoleh Gelar
Sarjana Komputer
Oleh :
Aditya Prasetio
105091002893
ii
PENGEMBANGAN APLIKASI CONTENT MANAGEMENT SYSTEM
UNTUK MOBILE LEARNING BAGI PENGAJAR BERBASIS JAVA
Skripsi
Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana Komputer
Pada Fakultas Sains dan Teknologi
Universitas Islam Negeri Syarif Hidayatullah Jakarta
Oleh:
ADITYA PRASETIO
105091002893
Menyetujui,
Pembimbing I, Pembimbing II,
Mengetahui,
Ketua Program Studi Teknik Informatika
iii
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.
v
HALAMAN PERNYATAAN
Aditya Prasetio
105091002893
vi
KATA PENGANTAR
Segala puja puji dan syukur penulis panjatkan kehadirat Allah SWT atas
System Untuk Mobile Learning Bagi Pengajar Berbasis Java ini dengan baik.
Shalawat serta salam penulis sanjungkan kepada Baginda Nabi Muhammad SAW,
terima kasih kepada pihak-pihak yang telah membantu penulis, baik berupa
1. Bapak DR. Syopiansyah Jaya Putra, M.Sis, selaku Dekan Fakultas Sains
Hidayatullah Jakarta.
5. Mama (Almh. Sri Kadariyah) dan Papa (Alm. Achmad Soeharto) yang
vii
6. Kakak (Putri Mira Gayatri, S.Psi) yang senantiasa memberikan dorongan
Ale, Ipul, Shodik, Ery, Fahmi, Rindy, Deni, Lia, Yusup, Novan, Mukhlis,
Zanba, Bayu, Randy. Teman-teman satu angkatan yang tidak dapat penulis
8. Rekan-rekan di DNP Webdesign, Pak Dipto, Pak Dicky, Pak Anam, Mba
Penulis menyadari bahwa dalam skripsi ini tentu masih jauh dari
sempurna, seperti kata pepatah ”Tak Ada Gading Yang Tak Retak”. Oleh karena
itu penulis mengharapkan kritik dan saran yang bersifat membangun agar
Akhir kata, semoga skripsi ini bermanfaat khususnya bagi penulis sendiri
Penulis
viii
DAFTAR ISI
BAB 1 PENDAHULUAN
1.1 Latar Belakang .................................................................................. 1
1.2 Rumusan Masalah ............................................................................. 3
1.3 Batasan Masalah ............................................................................... 3
1.4 Tujuan dan Manfaat Penelitian ......................................................... 4
1.4.1 Tujuan Penelitian ...................................................................... 4
1.4.2 Manfaat Penelitian .................................................................... 4
1.5 Metodologi Penelitian ....................................................................... 5
1.5.1 Metode Pegumpulan Data ........................................................ 5
1.5.2 Metode Pengembangan Perangkat Lunak ................................ 5
1.6 Sistematika Penulisan ....................................................................... 6
ix
2.4 JAVA ................................................................................................ 12
2.5 Hibernate 3 ......................................................................................... 12
2.6 Framework JMaki .............................................................................. 13
2.7 Database MySQL .............................................................................. 16
2.8 Sekilas tentang IDE Netbeans ........................................................... 17
2.9 Unit Testing ....................................................................................... 18
2.10 System Testing ................................................................................ 19
2.10.1 Recovery Testing ................................................................... 19
2.10.2 Security Testing ..................................................................... 20
2.10.3 Stress Testing ......................................................................... 21
2.10.4 Performance Testing .............................................................. 21
2.11 Desain Antar Muka .......................................................................... 22
2.12 Rapid Application Development ...................................................... 22
2.13 Studi literatur Sejenis ....................................................................... 24
x
4.3.1 Use Case Diagram .................................................................... 42
4.3.2 Entity Relational Diagram (ERD) ............................................. 51
4.3.3 Pemodelan Antar Muka ............................................................. 55
4.3.4 Pemodelan Kelas ....................................................................... 59
4.4 Construction ...................................................................................... 63
4.4.1 Implementasi Antar Muka ........................................................ 57
4.4.2 Unit Testing .............................................................................. 71
4.4.3 System Testing .......................................................................... 73
4.5 Deployment ....................................................................................... 83
4.5.1 Deployment .............................................................................. 83
4.5.2 Delivery Feedback .................................................................... 83
BAB 5 PENUTUP
5.1 Kesimpulan ....................................................................................... 84
5.2 Saran .................................................................................................. 85
xi
DAFTAR TABEL
xii
DAFTAR GAMBAR
xiii
Gambar 4.25 Halaman Frontend daftar Mata Kuliah .................................... 68
Gambar 4.26 Halaman Frontend Profil Dosen .............................................. 68
Gambar 4.27 Halaman Frontend Materi ........................................................ 69
Gambar 4.28 Halaman Hasil Pencarian ......................................................... 69
Gambar 4.29 Pengujian pada handphone Nokia E63..................................... 70
Gambar 4.30 Pengujian pada handphone Nokia E51 .................................... 70
Gambar 4.31 Pengujian pada handphone Nokia C3 ...................................... 71
Gambar 4.32 Hasil Unit Testing class materi ................................................ 71
Gambar 4.33 Hasil Unit Testing class matkul................................................ 72
Gambar 4.34 Hasil Unit Testing class user .................................................... 72
Gambar 4.35 Hasil Unit Testing class file ..................................................... 72
Gambar 4.36 Hasil Unit Testing class Image ................................................. 73
xiv
BAB I
PENDAHULUAN
secara ekonomi. Sebagai contoh paling populer, internet kini sudah menjadi
kebutuhan penting bagi siapa pun yang terlibat dalam aktifitas pendidikan dan
Hal yang sama pun terjadi pada teknologi bergerak (mobile technology).
Perkembangan baik dalam hal jaringan (Wi-Fi, 3G, WiMAX) maupun peralatan
(smart phones, pocket PCs, tablet PCs, serta PDA) telah menyebabkan teknologi
ini berkembang cepat. Tak heran bila kemudian pengguna telepon bergerak saat
peralatan bergerak lainnya seperti smart phone dan PDA mulai dieksplorasi
1
2
Terhitung dari tahun 2006 muncul ketertarikan yang tinggi pada potensi
tentangnya. Cobcroft, Towers, Smith & Bruns (2006) menyatakan lebih dari 400
sebuah Content Management System untuk mengisi materi, agar content aplikasi
dapat disesuaikan dengan kebutuhan dan tidak terbatas dengan satu mata pelajaran
dapat leluasa mendapatkan materi belajar. Untuk mengakses aplikasi yang penulis
mereka.
Masalah yang dapat dirumuskan dalam tugas akhir ini sebagai berikut :
ada.
3. Pengajar memiliki hak untuk menambah isi materi yang sesuai dengan
4. File yang diperbolehkan untuk diupload adalah file berformat .doc, .docx,
6. Pembelajar bebas memilih materi apa saja yang ada pada aplikasi m-
Netbeans 6.7.1.
maupun soal latihan tanpa terbatas oleh ruang dan waktu sehingga diharapkan
a. Bagi Penulis :
menerapkannya langsung.
b. Bagi Pengguna :
c. Bagi Universitas :
b. Studi Pustaka
penelitian ini.
1. Communication.
2. Planning.
3. Modelling.
4. Construction (Implementation).
5. Deployment
Penelitian ini terdiri dari lima bab, dengan penjelasan tiap-tiap bab sebagai
berikut :
BAB I : PENDAHULUAN
Pada bab ini berisi tentang Latar Belakang, Rumusan Masalah, Batasan Masalah,
Penelitian.
Pada bab ini menjelaskan tentang teori perangkat keras dan perangkat lunak,
definisi sistem, analisa sistem, definisi perancangan sistem dan jenis program
yang digunakan.
Pada bab ini akan menjelaskan mengenai pembuatan sistem dan pengujian sistem.
BAB V: PENUTUP
Bab ini berisi kesimpulan dari pembahasan masalah dan saran-saran berkenaan
LANDASAN TEORI
sistem yang lama secara keseluruhan atau perbaikan pada sistem yang telah ada
dengan harapan bahwa sistem yang baru dapat mengatasi sistem yang lama.
Pengembangan sistem dapat berarti menyusun suatu sistem yang baru untuk
2. Throughput, yaitu jumlah dari pekerjaan yang dapat dilakukan suatu saat
tertentu.
8
9
dan waktu untuk belajar. Semua manusia memiliki hak yang sama dalam
terlepas dari asal, status, dan budaya mereka (Mohamed. 2009: 1).
diakses melalui web browser pada mobile devices yang dijelaskan oleh W3C
Mobile Web Initiative (MWI) yang merupakan sebuah kolaborasi industri dan
teknologi yang bertujuan untuk meningkatkan produksi content web dan akses
Mobile Web Best Practices 1.0 (W3C 2006a) adalah spesifikasi standard
adalah garis besar rekomendasi yang dikeluarkan oleh W3C (W3C 2006a).
web bisa saja melebihi rekomendasi ini jika content dirancang untuk diakses
digunakan untuk mengatur alur kerja. Prosedur-prosedur ini dapat bersifat manual
data.
Pada sebuah CMS, content yang diatur bersifat industri spesifik. Sebagai
contoh, content multimedia akan berbeda dengan desain dokumen untuk pesawat
melakukan aktifitas belajar seperti mengakses konten dan materi yang dibuat oleh
kepada siswa-siswanya.
2.4 JAVA
Frank, dan Mike Sheridan dibawah Sun Microsystem, Inc pada 1991.
pemrograman ini awalnya diberi nama Oak tapi kemudian diganti Java pada 1995.
Diantara implementasi awal dari Oak pada 1992 dan berganti nama menjadi Java
pada 1995, banyak orang yang berkontribusi dalam desain dan evolusinya. Bill
Joy, Arthur van Hoff, Jonathan Payne, Frank Yellin, dan Tim Lindholm adalah
perangkat lunak yaitu J2SE, J2EE, J2ME, dan yang terakhir adalah JavaFX.
Sebuah profile memberikan library tambahan untuk suatu kelas tertentu pada
2.5 Hibernate 3
perlu mengikuti semua aturan dan disain hibernate ketika membuat logika bisnis
dan kelas-kelas.
tapi juga menyediakan fasilitas untuk query dan data retrieval dan secara
handling secara manual pada SQL dan JDBC. Tujuan Hibernate adalah untuk
jMaki adalah framework ringan untuk membuat aplikasi Web centric 2.0
proxy generik untuk berinteraksi dengan web eksternal RESTful web services.
widget JavaScript dan CSS yang dibuat mudah diakses sehingga bisa
server-termasuk PHP, Java (JSP / JSF), dan Phobos dalam teknologi-server cara
netral.
14
Berikut ini adalah modul klien dan server yang membentuk jMaki.
unik untuk setiap widget, dan JavaScript runtime akan memastikan bahwa
masing-masing widget.
15
ditentukan. The transfer Injector script dan CSS dengan konten halaman
masalah.
pada HTML, JavaScript dan CSS. Anda dapat menggunakan struktur ini
untuk membuat widget sendiri atau widget wrapper dari toolkit yang
diberikan. jMaki menyediakan default widget wrapper dan server tie untuk
widget yang sering digunakan seperti Dojo, Yahoo UI, Prototipe, dan
Komponen server:
melakukan tracking dan merender semua script dan CSS berdasarkan jenis
library yang digunakan untuk memastikan bahwa script duplikat dan link
CSS tidak diduplikasi. Runtime server juga akan memastikan API kunci
domain aplikasi web. Service tersebut termasuk RSS feed, layanan Yahoo
seperti geocoding, pencarian gambar Flickr, dan masih banyak lagi yang
MySQL merupakan Open Source SQL database yang paling popular, MYSQL
dibuat oleh MySQL AB. MySQL AB adalah sebuah perusahaan komersil yang
17
menyimpan data pada tabel yang terpisah, hal ini dapat meningkatkan kecepatan
tabel sesuai dengan permintaan, melalui SQL yang telah menjadi bahasa standar
Java maupun bahasa pemrograman lain. Netbeans IDE memiliki text editor,
18
Unit testing berfokus pada verifikasi di unit terkecil dari disain perangkat
penting akan dites untuk mendapatkan error di dalam batas modul. Kompleksitas
dari pengujian tergantung pada batas yang ada untuk unit testing. Unit test
berubah. Setiap class dan objek memiliki data dan operasi (methods) yang
memanipulasi data-data ini. Unit testing tidak lagi dilakukan pada modul-modul
terpisah, tetapi dilakukan pada class atau objek. Hal ini dikarenakan sebuah kelas
bisa memiliki sejumlah operasi berbeda dan beberapa operasi tersebut dapat
berada pada kelas-kelas yang berbeda, artinya unit testing berubah secara dramatis
(Pressman, 2002:664).
Kita tidak dapat lagi melakukan test pada satu operasi secara terpisah
operasi X tersebut digunakan oleh beberapa kelas, maka Unit test pada operasi X
2002:525). Berikut ini adalah serangkaian test yang termasuk dalam system
testing.
Sistem yang berbasis komputer harus dapat pulih dari kesalahan dan
beberapa kasus, sistem harus fault tolerant, yaitu pengolahan tidak boleh
kegagalan system harus dikoreksi dalam jangka waktu tertentu atau kerugian
Recovery Testing adalah tes sistem yang memaksa perangkat lunak untuk
dengan benar. Jika pemulihan otomatis (dilakukan oleh sistem itu sendiri),
yang ada pada system akan mampu melindungi dari serangan. Sistem
dapat menelusuri melalui data tidak aman. Dengan cukup waktu dan sumber
daya, pengujian keamanan yang baik pada akhirnya akan menembus sistem.
Peran perancang sistem untuk membuat penetrasi biayanya lebih dari nilai
perilaku perangkat lunak ketika beban yang ditawarkan lebih dari kapasitas
ditentukan. Hal ini dilakukan untuk memastikan bahwa sistem dapat tetap
lainnya dijalankan,
Antar muka pada aplikasi berbasis web adalah kesan pertama. Terlepas dari
isi, kepuasan pelayanan, dan keseluruhan keuntungan dari aplikasi tersebut, disain
yang kurang baik akan membuat User meninggalkan web tersebut (Pressman,
a. Menu navigasi harus konsisten dan harus tersedia di setiap halaman yang
b.Menu navigasi harus terlihat jelas oleh User. User tidak perlu mencari link
yang sederhana lebih baik daripada tombol dengan gambar atau icon yang
RAD berada pada fase panulisan kode software itu sendiri. Pengurangan porsi
perencanaan secara umum membuat penulisan kode program lebih cepat, dan
Learning ini adalah model RAD. Penulis memilih model RAD yang merupakan
yang sangat pendek (kira-kira 60 sampai 90 hari). RAD cocok diterapkan pada
generasi ketiga yang konvensional. Pada semua kasus, alat-alat bantu otomatis
telah diuji. Hal ini mengurangi keseluruhan waktu pengujian, tetapi komponen
baru harus diuji dan semua interface harus dilatih secara penuh.
memerlukan biaya yang lebih sedikit, mementingkan dari segi bisnis dan teknik,
kesesuaian yang kecil antara kebutuhan user dan spesifikasi sistem, waktu, biaya,
Dalam hal ini, penulis membaca dan memahami literatur ilmiah yang sejenis
Abstrak:
Waktu yang tersedia bagi guru dalam mengajar di dalam kelas sangat kurang
sehingga dalam mengajar guru hanya dikejar target mengajar atau ketuntasan
kurang diperhatikan.
merupakan salah satu penyebab mengapa nilai matematika selalu lebih rendah
dari pada mata pelajaran yang lain. Selain itu, guru jarang memberikan soal-soal
latihan dan membahasnya dikarenakan keterbatasan waktu. Untuk itu guru perlu
diperlukan untuk menunjang proses kegiatan belajar mengajar agar tidak hanya
target mengajar saja yang terpenuhi tetapi pemahaman siswa dalam mata
Mobile learning merupakan salah satu media pembelajaran yang sekarang sedang
banyak dikembangkan. Salah satu bentuk dari mobile learning adalah media
25
seluler (handphone) yang memiliki fasilitas WAP. Dengan adanya fasilitas ini kita
Tujuan penulisan skripsi ini adalah untuk mengetahui bagaimana membuat media
pada Sekolah Menengah Atas, maka metode penulisan skripsi ini dengan
WML dan PHP serta MySQL sebagai penyimpanan data dan Photoshop 7.0
sebagai pengolah gambar. Selain itu pembuatan media pembelajaran ini melalui
lima tahapan, yaitu Merancang desain alur aplikasi, merancang database dan
tampilan dari setiap halaman, tahap terakhir adalah Output atau hasil berupa
Kelebihan:
Kekurangan :
Abstrak:
Kelebihan :
27
Kekurangan :
parsing XML.
relational Mapping.
Nama penulis: Essa Basaeed , Jawad Berri dan Mohamed Jamal Zemerly
Abstrak:
tidak hanya untuk komunikasi tetapi juga untuk mengakses internet, berbelanja,
batasan serta menawarkan kebebasan dari ruang dan waktu dalam belajar.
Perangkat bergerak memiliki potensi untuk digunakan sebagai alat yang tepat
multimedia.
Fokus kami adalah untuk mendiskusikan isu-isu yang terkait dengan disain dan
berbasis web untuk memecahkan tantangan yang ada pada lingkungan berbasis
Kelebihan :
Kekurangan :
Learning.
Abstrak:
Dengan penetrasi tinggi dari telepon genggam pada masyarakat terutama kaum
muda, dan teknologi tinggi yang dimiliki telepon genggam itu sendiri dan
Hasil yang ditunjukkan di sini berfokus pada disain dan pengembangan aplikasi
dan sistem baru untuk pengajar maupun pembelajar untuk menerapkan mobile
learning. Pada paper ini, kami mempertunjukkan sebuah sistem mobile learning
Dengan menerapkan sistem ini, pengajar akan dapat membuat quiz yang
Kata kunci: Mobile Learning, M-Learning Java ME, Blackberry Devices, Quiz
Generator, Device-Independent.
30
Kelebihan :
Kekurangan :
parsing XML.
Abstrak:
Permintaan untuk teknik e-learning telah berganti. Aspek semisal interaksi antar
learning.
Oleh sebab itu kami memperkenalkan aplikasi mobile learning yang beroperasi
Kelebihan :
Kekurangan :
BAB III
METODOLOGI PENELITIAN
dan referensi yang relatif lengkap untuk mendukung materi uraian dan
sebagai berikut.
3.1.1 Wawancara
hal kebutuhan akan aplikasi yang penulis buat. Hasil wawancara dapat
32
33
daftar pustaka.
Dalam hal ini, penulis membaca dan memahami literatur ilmiah yang
sejenis dengan penulis. Hasil studi literatur sejenis dapat dibaca pada subbab
2.9.
2. Harddisk 20 GB
4. Mouse Standard
5. Monitor SVGA
34
1. Sistem Operasi
2. Program Aplikasi
skripsi ini adalah dengan model RAD (Rapid Application Development). RAD
"sistem fungsional yang utuh" dalam periode waktu periode yang sangat pendek
35
waktu pengerjaan aplikasi serta proses yang dihasilkan, didapatkan secara cepat
dan tepat.
sistem adalah karena sistem yang penulis buat merupakan sistem yang sederhana
Team # n
Mo d e lin g
business modeling
data modeling
process modeling
Co n st ru ct io n
component reuse
Team # 2 automatic code
Communicat ion generation
testing
Modeling
business modeling
dat a modeling
process modeling
Planning
Const ruct ion Deployment
Team # 1 component reuse
int egrat ion
aut omat ic code
generat ion
delivery
Modeling t est ing feedback
business modeling
dat a modeling
process modeling
60 - 90 days
36
Pada gambar di atas terlihat bahwa model RAD dikembangkan dengan tim-
tim yang jumlahnya disesuaikan dengan kebutuhan. Pada penelitian ini penulis
sebagai berikut:
a. Communication
diakomodasi oleh aplikasi yang akan dibuat. Secara rinci yang penulis lakukan
pembuatan sistem.
37
c. Modelling
akan dipergunakan, dan data yang diperlukan selama penggunaan aplikasi. Secara
rinci, yang penulis lakukan pada tahap ini adalah sebagai berikut
1. Membuat Use Case Diagram (dapat dibaca pada sub bab 4.3.1)
2. Membuat Entity Relational Diagram (dapat dibaca pada sub bab 4.3.2)
4. Merancang Antar Muka aplikasi (dapat dibaca pada sub bab 4.3.4)
d. Construction
menemukan error. Unit Testing yang dilakukan pada tugas akhir ini
Pada tahap System Testing ini penulis melakukan serangkaian test pada
berikut:
a. Recovery Testing
38
b. Security Testing
1.0. Software ini melakukan crawl pada aplikasi yang penulis kembangkan
c. Stress Testing
berat.
d. Performance Testing
melakukan testing yang sama dengan tahap Stress Testing, tetapi kali ini
39
Pengumpulan Data
Communication
Planning
Membuat Timeline
Modelling
Construction
Pembuatan Aplikasi
Deployment
BAB IV
4.1. Communication
mobile learning. Adapun hasil wawancara secara lengkap ada pada lampiran
A.
1. Perangkat Keras
sebagai berikut:
2) Harddisk 320 GB
40
41
b. Keyboard
c. Mouse
2. Perangkat Lunak
a. Sistem Operasi
Windows XP SP2.
b. Program aplikasi
4.2. Planning
aplikasi ini adalah selama 9 Minggu. Berikut ini adalah timeline yang
Communication
Planning
Modelling
Construction
Deployment
4.3. Modelling
Autentikasi User
Login
Administrator
Logout
Tutor
Berikut ini adalah use case naratif dari use cese diagram di atas yang
Trigger Use case ini diinisiasi pada saat user membuka aplikasi
mobile learning.
kembali.
44
Manajemen User
Create
User Administrator
View
User
Manage
own
account
Delete Tutor
User
Update
User
Login
Logout
Berikut ini adalah use case naratif dari use cese diagram di atas yang
administrator.
[user management]
langkah 3.
user
daftar user.
46
Create
Materi
Administrator
View
Materi
Upadate Tutor
Materi
Delete
Materi
Student
administrator.
menu [materi].
Alternate flow 2a. User memilih salah satu materi kemudian mengedit
yang dipilih.
course.
Create
Course
Administrator
View
Course
Upadate Tutor
Course
Delete
Course
Student
administrator.
[course]
database.
49
Manajemen File
Upload
File
Administrator
Delete
File
Tutor
Trigger Use case ini diinisiasi pada saat user memilih menu
[Upload File].
File].
Alternate flow
Manajemen Gambar
Upload
Gambar
Administrator
Delete
File
Tutor
Trigger Use case ini diinisiasi pada saat user memilih menu
[Image Manager].
51
Manager].
Alternate flow
Entity Relational Diagram (ERD) adalah suatu model yang digunakan untuk
ERD dapat digunakan pada semua alat-alat pemodelan dan merupakan metode
sebagai berikut :
Berikut ini adalah kamus data dari tabel-tabel yang ada di dalam
aplikasi:
1. Tabel User
Primary Key : id
id int 4 ID user
2. Tabel Materi
diajarkan
4. Tabel Kuliah
5. Tabel Images
6. Tabel File
penulis:
sebagai berikut:
Username
Gambar
Password
Untuk admin dan tutor, saat pertama kali aplikasi ini dibuka di browser,
Materi, User, dan Logout. Pada halaman kelas, penulis tampilkan tabel Daftar
kelas dan form untuk operasi create, update, dan delete kelas.
57
Course
Tabel Kuliah Kelas
Tutor
Pada halaman kuliah, penulis tampilkan tabel Daftar kuliah dan form
Content
Course
Tutor
Pada halaman materi, penulis tampilkan tabel Daftar materi dan form
Kode
Semester
Pada halaman Mata kuliah, penulis tampilkan tabel Daftar Mata kuliah dan
Nama Belakang
Password
Konfirmasi Password
NIP
Gelar
Role
Pada halaman User, penulis tampilkan tabel Daftar User dan form untuk
table pada database ke dalam objek-objek yang disebut object mappings. Setiap
object yang dibuat adalah representasi dari fields yang ada di database.
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.
b. Package DAO
Berikut adalah class diagram dari package DAO yang penulis buat:
4.4. Construction
4.4 Construction
Adapun tampilan aplikasi yang penulis buat bisa dilihat pada gambar
dibawah ini:
Gamb
bar 4.31 Peengujian pad
da handphonne Nokia C3
a Class materi:
a. m
b. Class matkul:
c. Class user:
d. Class file:
e. Class Image:
a. Recovery Testing
1. Mematikan database
berjalan. Dari log pada server terlihat bahwa fungsi rollback untuk
2. Mematikan server
Dari log pada server terlihat bahwa fungsi rollback untuk mengatasi
b. Security Testing
4.14 dan tabel 4.15 adalah hasil pengujian yang telah penulis lakukan:
Test Hasil
10
Jumlah Link
0
Kemungkinan serangan
Test Hasil
26
Jumlah Link
0
Kemungkinan serangan
75
c. Stress Testing
Performance data:
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-
Response Time:
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:
dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Total selama pengujian
adalah 9,96 kbit/s untuk penerimaan pada satu pengguna dan 1,68 kbit/s untuk
Errors report:
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
Performance data:
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-
Response time:
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
dalam kurun waktu 1 menit yang dihitung setiap 10 detik. Total selama pengujian
adalah 2,0 kbit/s untuk penerimaan pada satu pengguna dan 0,54 kbit/s untuk
Errors Report:
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
FST).
navigasi.
PENUTUP
5.1 Kesimpulan
yang dinamis karena content dapat diisi sesuai dengan kebutuhan pengajar.
learning ini dapat berjalan sesuai dengan tujuan, analisis, dan desain yang
aktifitas belajar.
serangan 0
84
85
5.2 Saran
2. Aplikasi ini belum dapat menyimpan hasil yang didapat mahasiswa setelah
DAFTAR PUSTAKA
Bauer , Christian And King , Gavin. 2005. Java Persistence with Hibernate. New
York: Manning
Learning.
Offset.
Quality Assurance Theory and Practice. New Jersey: A johnwiley & sons,
inc., publication.
86
87
Naughton , Patrick and Schildt, Herbert . 2001. Java 2: The Complete Reference.
California:Osborne/McGraw-Hill
Rachdian , Adhi. 2005 Mastering CMS dengan Mambo/ Joomla. Jakarta: PT. Elex
Media Komputindo.
Messaging Network.
LAMPIRAN A
WAWANCARA
1. Apakah aplikasi mobile learning dibuat terbuka (dapat diakses oleh siapa
2. Menu apa saja yang seharusnya ada pada aplikasi mobile learning?
4. Word processor pada aplikasi web seperti apa yang diperlukan untuk
3. File yang sering digunakan adalah file dokumen berformat .doc, .ppt, .pdf dan
4. Word processor untuk mengisi konten memiliki fasilitas yang mirip dengan
aplikasi word processor pada aplikasi desktop seperti dapat membuat tabel,
LAMPIRAN B
USERS FEEDBACK
Hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐configuration PUBLIC "‐//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐configuration‐3.0.dtd">
<hibernate‐configuration>
<session‐factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/skripsi4</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<mapping resource="entity/Materi.hbm.xml"/>
<mapping resource="entity/Matkul.hbm.xml"/>
<mapping resource="entity/User.hbm.xml"/>
<mapping resource="entity/File.hbm.xml"/>
<mapping resource="entity/Images.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.set(session);
}
return session;
}
protected void begin() {
getSession().getTransaction().begin();
}
protected void commit() {
getSession().getTransaction().commit();
}
protected void rollback() {
try {
getSession().getTransaction().rollback();
log.log(Level.WARNING,"rollback success");
} catch( HibernateException e ) {
log.log(Level.WARNING,"Cannot rollback",e);
}
try {
getSession().close();
} catch( HibernateException e ) {
log.log(Level.WARNING,"Cannot close",e);
}
DAO.session.set(null);
}
public static void close() {
getSession().close();
DAO.session.set(null);
}
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 get(String file_id) throws AdException {
try {
begin();
Query q = getSession().createQuery(
"from File where file_id= :file_id");
q.setString("file_id", file_id);
File kelas = (File) q.uniqueResult();
commit();
return kelas;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not obtain the named category " + file_id, e);
}
}
public File create(String path, Materi materi, byte[] file_file, String file_type)
throws AdException {
try {
begin();
File file = new File(path, materi, file_type);
getSession().save(file);
commit();
return file;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not create file" + e);
}
}
public void delete(File file) throws AdException {
try {
begin();
getSession().delete(file);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not delete file", e);
}
}
public List list() throws AdException {
try {
begin();
Query q = getSession().createQuery("from File");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could 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 get(String file_id) throws AdException {
try {
begin();
Query q = getSession().createQuery(
"from Images where image_id= :file_id");
q.setString("file_id", file_id);
Images kelas = (Images) q.uniqueResult();
commit();
return kelas;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not obtain the named category " + file_id, e);
}
}
public Images create(String path, User user) throws AdException {
try {
begin();
Images file = new Images(path, user);
getSession().save(file);
commit();
return file;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not create file" + e);
}
}
public void delete(Images image) throws AdException {
try {
begin();
getSession().delete(image);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could 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 get(String materi_id) throws AdException {
try {
begin();
Query q = getSession().createQuery(
"from Materi where materi_id= :materi_id");
q.setString("materi_id", materi_id);
Materi materi = (Materi) q.uniqueResult();
commit();
return materi;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not obtain the named category " + materi_id, e);
}
}
public Materi getByMatkul(String matkul) throws AdException {
try {
begin();
Query q = getSession().createQuery(
"from Materi where matkul= :matkul");
q.setString("matkul", matkul);
Materi materi = (Materi) q.uniqueResult();
commit();
return materi;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not obtain the named category " + matkul, e);
}
}
public List listBySearch(String keyword) throws AdException {
try {
begin();
Criteria crit = getSession().createCriteria(Materi.class);
Criterion title = Restrictions.like("title", "%" + keyword + "%");
Criterion content = Restrictions.like("content", "%" + keyword + "%");
LogicalExpression orExp = Restrictions.or(title, content);
crit.add(orExp);
List result = crit.list();
commit();
return result;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public Materi create(String title, String content, User user, Matkul matkul)
throws AdException {
try {
begin();
Materi advert = new Materi(title, content, user, matkul);
getSession().save(advert);
commit();
return advert;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not create advert", e);
}
}
public void delete(Materi advert) throws AdException {
try {
begin();
getSession().delete(advert);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not delete advert", e);
}
}
public List list() throws AdException {
try {
begin();
Query q = getSession().createQuery("from Materi");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listByMatkul(String cd) throws AdException {
try {
begin();
Query q = getSession().createQuery("from Materi where matkul= :cd");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listByUser(String usId) throws AdException {
try {
begin();
Query q = getSession().createQuery("from Materi where user= :usId");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the Materi" + e);
}
}
public void update(Materi materi, String judul, String content, Matkul matkul, User user)
throws AdException {
try {
begin();
materi.setTitle(judul);
materi.setContent(content);
materi.setMatkul(matkul);
materi.setUser(user);
getSession().merge(materi);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could 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 get(String matkul_id) throws AdException {
try {
begin();
Query q = getSession().createQuery(
"from Matkul where matkul_id = :matkul_id");
q.setString("matkul_id", matkul_id);
Matkul category = (Matkul) q.uniqueResult();
commit();
return category;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not obtain the named category " + matkul_id, e);
}
}
public Matkul create(String title, String kode, String sem)
throws AdException {
try {
begin();
Matkul matkul = new Matkul(title, kode, sem);
getSession().save(matkul);
commit();
return matkul;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not create advert", e);
}
}
public void delete(Matkul matkul) throws AdException {
try {
begin();
getSession().delete(matkul);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not delete advert", e);
}
}
public List list() throws AdException {
try {
begin();
Query q = getSession().createQuery("from Matkul order by matkul_title asc");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listBySearch(String keyword) throws AdException {
try {
begin();
Criteria crit = getSession().createCriteria(Matkul.class);
crit.add(Restrictions.like("matkul_title", "%" + keyword + "%"));
List result = crit.list();
commit();
return result;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listTutor() throws AdException {
try {
begin();
Query q = getSession().createQuery("from Matkul order by matkul_title asc");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public void update(Matkul matkul, String judul, String kode, String sem) throws AdException {
try {
begin();
matkul.setMatkul_title(judul);
matkul.setMatkul_kode(kode);
matkul.setMatkul_semester(sem);
getSession().merge(matkul);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could 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 get(String user_id) throws AdException {
try {
begin();
Query q = getSession().createQuery("from User where user_id = :user_id");
q.setString("user_id", user_id);
User user = (User) q.uniqueResult();
commit();
return user;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not get user " + user_id, e);
}
}
public List list() throws AdException {
try {
begin();
Query q = getSession().createQuery("from User");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listBySearch(String keyword) throws AdException {
try {
begin();
Criteria crit = getSession().createCriteria(User.class);
Criterion title = Restrictions.like("user_namaDepan", "%" + keyword + "%");
Criterion content = Restrictions.like("user_namaBelakang", "%" + keyword + "%");
LogicalExpression orExp = Restrictions.or(title, content);
crit.add(orExp);
List result = crit.list();
commit();
return result;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the categories", e);
}
}
public List listForTutor() throws AdException {
try {
begin();
Query q = getSession().createQuery("from User where user_type=2 order by
user_namaDepan asc");
List list = q.list();
commit();
return list;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not list the tutors", e);
}
}
public void update(User 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_password(users_pwd);
user.setUser_namaDepan(nama_depan);
user.setUser_namaBelakang(nama_belakang);
user.setUser_email(users_email);
user.setUser_nip(users_nip);
user.setUser_gelar(users_degree);
user.setUser_type(users_type);
user.setUser_cv(users_cv);
getSession().merge(user);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not save the category" + e);
}
}
public void update(User 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_namaDepan(nama_depan);
user.setUser_namaBelakang(nama_belakang);
user.setUser_email(users_email);
user.setUser_nip(users_nip);
user.setUser_gelar(users_degree);
user.setUser_type(users_type);
user.setUser_cv(users_cv);
getSession().merge(user);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not save the category" + e);
}
}
public void resetPwd(User user, String users_nip) throws AdException {
try {
begin();
user.setUser_password(users_nip);
getSession().merge(user);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not save the category" + users_nip, e);
}
}
public User create(String 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 User(user_namaDepan, user_namaBelakang, user_email, user_nip,
user_nip, user_gelar, user_type, user_cv);
getSession().save(user);
commit();
return user;
} catch (HibernateException e) {
rollback();
throw new AdException("Could not create user " + user_namaDepan + e);
}
}
public void delete(User user) throws AdException {
try {
begin();
getSession().delete(user);
commit();
} catch (HibernateException e) {
rollback();
throw new AdException("Could not delete user " + user.getUser_namaDepan(), e);
}
}
}
Package entity:
Class AdException.java:
package entity;
public class AdException extends Exception {
public AdException(String message) {
super(message);
}
public AdException(String message, Throwable cause) {
super(message, 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 File(String 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_type(String file_type) {
this.file_type = file_type;
}
public File() {
}
public long getFile_id() {
return file_id;
}
public void setFile_id(long file_id) {
this.file_id = file_id;
}
public String getFile_path() {
return file_path;
}
public void setFile_path(String file_path) {
this.file_path = file_path;
}
public Materi getMateri() {
return materi;
}
public void setMateri(Materi materi) {
this.materi = materi;
}
}
File.hbm.xml:
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐mapping PUBLIC "‐//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐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 Images(String file_path, User user) {
this.image_path = file_path;
this.user = user;
}
public Images() {
}
public long getImage_id() {
return image_id;
}
public void setImage_id(long image_id) {
this.image_id = image_id;
}
public String getImage_path() {
return image_path;
}
public void setImage_path(String image_path) {
this.image_path = image_path;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
Images.hbm.xml
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐mapping PUBLIC "‐//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐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 Materi(String 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 setFiles(Set files) {
this.files = files;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public long getMateri_id() {
return materi_id;
}
public void setMateri_id(long materi_id) {
this.materi_id = materi_id;
}
public Matkul getMatkul() {
return matkul;
}
public void setMatkul(Matkul matkul) {
this.matkul = matkul;
}
}
Materi.hbm.xml
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐mapping PUBLIC "‐//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐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_semester(String matkul_semester) {
this.matkul_semester = matkul_semester;
}
public String getMatkul_kode() {
return matkul_kode;
}
public void setMatkul_kode(String 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 setMateris(Set materis) {
this.materis = materis;
}
public void setMatkul_id(long matkul_id) {
this.matkul_id = matkul_id;
}
public void setMatkul_title(String matkul_title) {
this.matkul_title = matkul_title;
}
}
Matkul.hbm.xml
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐mapping PUBLIC "‐//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐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 User(String 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_cv(String user_cv) {
this.user_cv = user_cv;
}
public Set getImages() {
return images;
}
public void setImages(Set images) {
this.images = images;
}
public Set getMateris() {
return materis;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String 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 setMateris(Set materis) {
this.materis = materis;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public void setUser_gelar(String user_gelar) {
this.user_gelar = user_gelar;
}
public void setUser_id(long user_id) {
this.user_id = user_id;
}
public void setUser_namaBelakang(String user_namaBelakang) {
this.user_namaBelakang = user_namaBelakang;
}
public void setUser_namaDepan(String user_namaDepan) {
this.user_namaDepan = user_namaDepan;
}
public void setUser_nip(String user_nip) {
this.user_nip = user_nip;
}
public void setUser_password(String user_password) {
this.user_password = user_password;
}
}
User.hbm.xml
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE hibernate‐mapping PUBLIC "‐//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate‐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.subscribe("/matkulTable/onSelect", function(args){
var title= args.value.title;
var kode= args.value.kode;
var sem= args.value.sem;
var id= args.value.id;
document.getElementById("sem").value=sem;
document.getElementById("title").value=title;
document.getElementById("kode").value=kode;
document.getElementById("id").value=id;
});
jmaki.subscribe("/buttonSave/onClick", function(args){
var val = document.getElementById("title").value;
var kode = document.getElementById("kode").value;
var sem = document.getElementById("sem").value;
var valId = document.getElementById("id").value;
if(val!=""){
if(valId!=""){
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.publish('/jmaki/matkul/updateRow', {
targetId: valId,
value:row
});
}
})
}
else{
jmaki.doAjax({
method: "POST",
url: "add.jsp?title=" + val+"&kode="+kode+"&sem="+sem
})
refreshPage();
}
document.getElementById("id").value="";
document.getElementById("title").value="";
document.getElementById("kode").value="";
document.getElementById("sem").value="";
}
else{
alert("Anda harus mengisi judul")
}
});
jmaki.subscribe("/buttonDelete/onClick", function(args){
var id = document.getElementById("id").value;
if(id!=""){
if(confirm("Hapus data ?")){
document.getElementById("id").value="";
document.getElementById("title").value="";
document.getElementById("sem").value="";
document.getElementById("kode").value="";
jmaki.doAjax({
method: "POST",
url: "delete.jsp?id=" + id,
callback: function(_req) {
jmaki.publish('/jmaki/matkul/removeRow', {
targetId: id
});
}
})
}
}
});
jmaki.subscribe("/buttonNew/onClick", function(args){
document.getElementById("kode").value="";
document.getElementById("title").value="";
document.getElementById("id").value="";
document.getElementById("sem").value="";
});
//=====================user=========================================
jmaki.subscribe("/userTable/onSelect", function(args){
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.getElementById("fn").value=fn;
document.getElementById("ln").value=ln;
document.getElementById("em").value=email;
document.getElementById("nip").value=nip;
document.getElementById("gelar").value=gelar;
document.getElementById("pwd").value=pwd;
document.getElementById("id").value=id;
tinyMCE.execCommand('mceSetContent',false,cv);
if (type == "1") {
document.getElementById("type").options[1].selected = "true"
}
else{
document.getElementById("type").options[2].selected = "true"
}
});
jmaki.subscribe("/NewUser/onClick", function(args){
document.getElementById("id").value="";
document.getElementById("fn").value="";
document.getElementById("ln").value="";
document.getElementById("em").value="";
document.getElementById("nip").value="";
document.getElementById("gelar").value="";
document.getElementById("pwd").value="";
tinyMCE.execCommand('mceSetContent',false,"");
document.getElementById("type").options[0].selected = "true";
});
jmaki.subscribe("/SaveUser/onClick", function(args){
var fn=document.getElementById("fn").value;
var ln=document.getElementById("ln").value;
var email=document.getElementById("em").value;
var pwd=document.getElementById("pwd").value;
var nip=document.getElementById("nip").value;
var gelar=document.getElementById("gelar").value;
var type=document.getElementById("type").value;
var cv = tinyMCE.get('FCKxeditor1').getContent() ;
var id= document.getElementById("id").value;
if((fn!="")&(ln!="")){
if(id!=""){
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.publish('/jmaki/user/updateRow', {
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.getElementById("fn").value="";
document.getElementById("ln").value="";
document.getElementById("em").value="";
document.getElementById("nip").value="";
document.getElementById("pwd").value="";
document.getElementById("gelar").value="";
tinyMCE.execCommand('mceSetContent',false,"");
document.getElementById("type").options[0].selected = "true"
document.getElementById("id").value="";
refreshPage();
});
jmaki.subscribe("/SaveTutor/onClick", function(args){
var fn=document.getElementById("fn").value;
var ln=document.getElementById("ln").value;
var email=document.getElementById("em").value;
var pwd=document.getElementById("pwd").value;
var pwd2=document.getElementById("pwd2").value;
var nip=document.getElementById("nip").value;
var gelar=document.getElementById("gelar").value;
var type=document.getElementById("type").value;
var id= document.getElementById("id").value;
var cv = tinyMCE.get('FCKxeditor1').getContent();
if(pwd2!=""){
if(pwd==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.getElementById("fn").value=fn;
document.getElementById("ln").value=ln;
document.getElementById("em").value=email;
document.getElementById("nip").value=nip;
document.getElementById("pwd").value=pwd;
document.getElementById("gelar").value=gelar;
document.getElementById("type").value = type;
document.getElementById("id").value=id;
}else{
alert("password 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.getElementById("fn").value=fn;
document.getElementById("ln").value=ln;
document.getElementById("em").value=email;
document.getElementById("nip").value=nip;
document.getElementById("pwd").value=pwd;
document.getElementById("gelar").value=gelar;
document.getElementById("type").value = type;
document.getElementById("id").value=id;
}
});
jmaki.subscribe("/DeleteUser/onClick", function(args){
var id = document.getElementById("id").value;
if(id!=""){
if(confirm("Hapus data ?")){
document.getElementById("fn").value="";
document.getElementById("ln").value="";
document.getElementById("em").value="";
document.getElementById("nip").value="";
document.getElementById("pwd").value="";
document.getElementById("gelar").value="";
tinyMCE.execCommand('mceSetContent',false,"");
document.getElementById("type").options[0].selected = "true"
document.getElementById("id").value="";
jmaki.doAjax({
method: "POST",
url: "delete.jsp?id=" + id,
callback: function(_req) {
jmaki.publish('/jmaki/user/removeRow', {
targetId: id
});
}
})
}
}
});
jmaki.subscribe("/ResetPwdUser/onClick", function(args){
var id = document.getElementById("id").value;
var nip =document.getElementById("nip").value;
if(id!=""){
jmaki.doAjax({
method: "POST",
url: "edit.jsp?id=" + id+"&act=3&nip="+nip
})
}
});
//========================upload file=================================
jmaki.subscribe("/materiTableUploadFile/onSelect", function(args){
var id= args.value.id;
document.getElementById("id").value=id;
updateDivUploadFile(id);
});
function updateDivUploadFile(id){
jmaki.doAjax({
method: "POST",
url: "form.jsp?id="+id,
callback: function(_req) {
document.getElementById("content").innerHTML = _req.responseText;
}
})
}
jmaki.subscribe("/userTableImage/onSelect", function(args){
var id= args.value.id;
document.getElementById("id").value=id;
updateDivUploadFileImage(id);
});
function updateDivUploadFileImage(id){
jmaki.doAjax({
method: "POST",
url: "form_image.jsp?id="+id,
callback: function(_req) {
document.getElementById("content").innerHTML = _req.responseText;
}
})
}
//==========================materi========================================
jmaki.subscribe("/newMateri/onClick", function(args){
tinyMCE.execCommand('mceSetContent',false,"");
document.getElementById("id").value="";
document.getElementById("title").value="";
document.getElementById("course").value="";
document.getElementById("tutor").value="";
});
jmaki.subscribe("/materiTable/onSelect", function(args){
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.execCommand('mceSetContent',false,content);
document.getElementById("id").value=id;
document.getElementById("title").value=title;
updateDivMateri(courseId,tutorId);
});
jmaki.subscribe("/saveMateri/onClick", function(args){
var id= document.getElementById("id").value;
var tutor= document.getElementById("tutor").value;
var course= document.getElementById("course").value;
var title= document.getElementById("title").value;
var content = tinyMCE.get('FCKxeditor1').getContent() ;
if(id!=""){
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.publish('/jmaki/materi/updateRow', {
targetId: id,
value:row
});
}
})
}
else{
jmaki.doAjax({
method: "POST",
url: "add.jsp?tutor=" + tutor+"&course="+course+"&content="+content+"&title="+title
})
}
document.getElementById("id").value="";
document.getElementById("title").value="";
document.getElementById("course").value="";
document.getElementById("tutor").value="";
tinyMCE.execCommand('mceSetContent',false,"");
refreshPage();
});
jmaki.subscribe("/deleteMateri/onClick", function(args){
var id = document.getElementById("id").value;
if(id!=""){
if(confirm("Hapusx data ?")){
tinyMCE.execCommand('mceSetContent',false,"");
document.getElementById("id").value="";
document.getElementById("title").value="";
document.getElementById("course").value="";
document.getElementById("tutor").value="";
jmaki.doAjax({
method: "POST",
url: "delete.jsp?id=" + id,
callback: function(_req) {
jmaki.publish('/jmaki/materi/removeRow', {
targetId: id
});
}
})
}
}
});
function updateDivMateri(courseId,tutorId){
jmaki.doAjax({
method: "POST",
url: "selectorMateri.jsp?courseId="+courseId+"&tutorId="+tutorId,
callback: function(_req) {
document.getElementById("selectorMateri").innerHTML = _req.responseText;
}
})
}
//========================Login=========================================
jmaki.subscribe("/Login/onClick", function(args){
var nip=document.getElementById("login_name").value;
var pwd=document.getElementById("login_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://jmaki/v1.0/jsp" %>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1‐transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="jmaki‐standard.css" type="text/css"></link>
<title>Lectures</title>
<meta http‐equiv="Content‐Type" content="text/html; 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.toString(user.getUser_id());
Iterator ai = user.getMateris().iterator();
if (ai.hasNext()) {
out.print("<div id='level1'><img src='images/arrow.png' width='9'/>" +
"<a href='lecture.jsp?id=" + id + "'>" + user.getUser_namaDepan() + " " +
user.getUser_namaBelakang() + "</a><br /></div>");
}
}
DAO.close();
} catch (AdException e) {
System.out.println(e.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://jmaki/v1.0/jsp" %>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1‐transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="jmaki‐standard.css" type="text/css"></link>
<title>Courses</title>
<meta http‐equiv="Content‐Type" content="text/html; 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.toString(matkul.getMatkul_id());
Iterator ai = matkul.getMateris().iterator();
if (ai.hasNext()) {
out.print("<div id='level1'><img src='images/arrow.png' width='9'/>" +
"<a href='subjectListByCourse.jsp?id=" + id + "'>" + matkul.getMatkul_title() +
"</a><br></div>");
}
}
DAO.close();
} catch (AdException e) {
System.out.println(e.getMessage());
}
%>
</div> <!‐‐ outerborder ‐‐>
</body>
</html>
subject.jsp:
<%
String idx = request.getParameter("id");
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://jmaki/v1.0/jsp" %>
<!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1‐transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="../jmaki‐standard.css" type="text/css"></link>
<title>Subject</title>
<meta http‐equiv="Content‐Type" content="text/html; charset=UTF‐8" />
</head>
<body>
<div id="outerBorder">
<div id="header">
<div id="banner"><img src="../images/UIN_logo.jpg" width="100" alt="UIN_logo"/>
</div>
</div>
<div id="main">
<div id="menu">
<a href="../lectures.jsp">Lectures</a> |
<a href="../course.jsp">Courses</a><br />
</div>
<%
String id = request.getParameter("id");
String Courseid = request.getParameter("Courseid");
try {
Materi materi = new DAOMateri().get(id);
out.println("<b>" + materi.getTitle() + "</b><br />");
out.print(materi.getContent() + "<br /><br /><br /><b>Attachment(s):</b><br />");
Iterator ai = materi.getFiles().iterator();
while (ai.hasNext()) {
File files = (File) ai.next();
if (files.getFile_type().equalsIgnoreCase("2")) {
out.print("<img src='../images/arrow.png' width='9'/>" + "<a href='../upload/files/"
+ files.getFile_path() + "'>" + files.getFile_path() + "</a><br>");
}
}
DAO.close();
} catch (AdException e) {
System.out.println(e.getMessage());
}
%>
</div> <!‐‐ main ‐‐>
<div id="related">
<b>Materi lain dari Dosen ini:</b><br />
<%
Matkul matkul = new DAOMatkul().get(Courseid);
Iterator ai = matkul.getMateris().iterator();
while (ai.hasNext()) {
Materi advert = (Materi) ai.next();
if (advert.getMateri_id() != Integer.parseInt(id)) {
out.print("<div id='subject_list'><img src='../images/arrow.png' width='9'/>" + "<a
href='subject.jsp?id=" + advert.getMateri_id() + "&Courseid=" + Courseid + "'>" + advert.getTitle()
+ "</a>");
out.println("<br /> Tutor : " + advert.getUser().getUser_namaDepan() +
"<br><br></div>");
}
}
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 :
info@uinjkt.ac.id
NIM : 105091002893
I. DATA PRIBADI
Aditya Prasetio
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.
Aditya Prasetio
ABSTRACT
Over the last decade, the education and training is strongly influenced by
developments in technology. This phenomenon will become stronger given the
technology in the future will be more complex, powerful, and economically
affordable. The most popular example, the Internet has now become an important
requirement for anyone involved in education and training activities, both as
media and learning resources.
In a previous study of each application is limited to just one lesson so that the user
requires a different application on each lesson. Besides, users must download the
applications to their mobile phone, it makes the content into static.