Download Hibernate Framework - E-Learning | STMIK AMIKOM Yogyakarta

Document related concepts
no text concepts found
Transcript
Java Application, JBoss, EJB dan Hibernate
1
Software yang dibutuhkan
•
Java Development Kit 6
•
Tools Development
o Netbeans 6.5 atau versi sesudahnya
o Eclipse dengan hibernate-extensions
•
JBoss-5.1.0.GA
•
Hibernate 3.3.1 GA
•
Relational Database (disini digunakan MySQL 5)
•
Optional
o MySQL Workbench
o UML Plugin
1
Pengenalan Hibernate
Hibernate adalah suatu alat yang digunakan untuk melakukan Object Relational
Mapping (ORM) pada lingkungan java. Istilah ORM mengacu pada teknik untuk
memetakan data yang terletak pada objek ke database relational.
ORM sendiri adalah untuk mengkonversi tipe data antara dua hal yang tidak
kompatibel yaitu database relasional dan pemrograman berorientasi obyek bahasa.
Dimana database relational berbicara mengenai kolom, record sedangkan pada
pemrograman berorientasi objek pada attribut dan objek.
Hibernate tidak hanya mengatur pemetaan antara kelas kelas di java ke tabel di
database, tapi juga memberikan mekanisme pengolahan data. Hal ini akan
mempercepat
proses
pengembangan
dibandingkan
cara
manual
dengan
melakukan penanganan data melalui SQL dan JDBC. Merupakan sebuah proyek
Open Source profesional dan komponen terpenting dari JBoss Enterprises
Middleware System.
Fitur hibernate :
1. Fitur pemetaan yang fleksibel
2. Fitur pemetaan seperti inheritance dan polymorphism
3. HQL yang bebas vendor database
4. Assosiasi join secara otomatis
5. Tidak akan mengupdate objek yang tidak dimodifikasi
6. Mengurangi penulisan baris kode program
Arsitektur Hibernate
1
Alur proses JDBC :
1. Load spesifik RDBMS JDBC driver karena driver ini benar-benar
berkomunikasi dengan database.
2. Buka koneksi ke database yang kemudian digunakan untuk mengirimkan
pernyataan SQL dan mendapatkan hasil belakang.
3. Buat Pernyataan JDBC objek. Objek ini mengandung query SQL.
4. Jalankan pernyataan yang mengembalikan ResultSet (s). ResultSet berisi
tupel dari tabel database sebagai hasil dari query SQL.
5. Proses hasil ditetapkan.
6. Tutup koneksi.
Alur proses Hibernate :
1. Memuat
berkas
konfigurasi
Hibernate
dan
menciptakan
objek
konfigurasi. Ini akan otomatis memuat semua pemetaan hbm file. (di
awal)
2. Buat sesi konfigurasi dari objek (di awal)
3. Dapatkan satu sesi (di awal)
4. Buat HQL query.
5. Mengeksekusi query untuk mendapatkan daftar yang berisi objek Java.
2
Aplikasi Inventory
A. Deskripsi
Merupakan modul aplikasi yang mengolah data-data stock, spare parts, barangbarang habis pakai, dan data permintaan perbaikan yang dilakukan oleh user.
Data-data tersebut disimpan ke dalam database, setiap spare parts yang
dibutuhkan untuk perawatan alat akan dibagi dalam kategori yang sesuai dengan
fungsi spare parts tersebut.
Aplikasi Inventory terdiri dari modul-modul yang saling berkaitan yang terbagi
menjadi :
1. Modul Stock
Pada modul ini terdapat data detail stock beserta kebutuhannya untuk
keperluan perawatan aset, kategori dan group dari stock / spareparts di
sesuaikan dengan asetnya. Terdiri dari 3 submodul yakni
a. Master Stock
Merupakan modul aplikasi yang berfungsi untuk mengelola
pendefinisian data stock baik barang habis pakai atau spare parts
b. Category
Modul untuk mengelola data kategori asset.
c. Penyalur
Modul untuk mengelola data penyalur asset.
2. Modul Quotation
Modul ini berisikan permintaan kebutuhan barang yang berupa stock yang
diperlukan untuk kebutuhan/perawatan alat.
3. Report
Merupakan modul pelaporan yang menampilkan data-data yang berkaitan
dengan proses manajemen stock beserta data pemakaian barang tersebut.
3
Terdiri dari 2 modul yaitu
a. Stock
Menampilkan data stock barang berdasarkan beberapa criteria
yang inginkan oleh user.
b. Permintaan
Menampilkan history permintaan kebutuhan barang yang berupa
spareparts / stock
B. Arsitektur Aplikasi
Arsitektur aplikasi yang akan dibuat adalah sebagai berikut
C. Diagram UML Aplikasi Inventory
1. Use Case Diagram
4
2. Class Diagram
3. Squence Diagram
i. Squence Diagram Login
5
ii. Squence Diagram Get Kategori
iii. Squence Diagram Add Kategori
6
iv. Squence Diagram Edit Kategori
v. Squence Diagram Del Kategori
7
vi. Squence Diagram Pembelian Barang
8
vii. Squence Diagram Permintaan Barang
viii. Squence Diagram Get Penyalur
9
ix. Squence Diagram Add Penyalur
x. Squence Diagram Edit Penyalur
10
xi. Squence Diagram Del Penyalur
xii. Squence Diagram Get Stock
11
D. Database Aplikasi Inventory
Gunakan file database.sql
12
Hibernate di Netbeans
A. Mengaktifkan Fasilitas Java EE di Netbeans (bagi yang belum aktif)
1. Melalui menu Tools Plugin
2. Pada dialog window Plugins, pilih tab Installed, beri tanda Check pada
pilihan Java Web dan EE lalu klik Activate
3. Maka muncul window Netbeans IDE Installer berikut klik Activate
4. Setelah proses klik finish
13
B. Mengaitkan JBoss di Netbeans
1. Pastikan anda sudah memiliki JBoss-5.1.0.GA
2.
Dari Netbeans, pilih menu Windows Services
3. Setelah muncul Tab Services, klik kanan pada Servers Add Server…
4. Setelah muncul Window daftar Server, pilih JBoss Application Server
5. Untuk server location gunakan “E:\jboss-5.1.0.GA” atau lokasi JBoss anda
lalu Next
14
6. Pada Window Add Server instance, domain pilih default Finish
7. Anda akan mendapatkan JBoss Application Server pada list Server anda
C. Mengaitkan MySQL di Netbeans
1. Pastikan MySQL Server anda sudah jalan
2. Silahkan anda buat database dengan nama inventory dan gunakan file
inventory.sql untuk melakukan generate database
3. Pilih Window Services
4. Klik kanan Databases Register MySQL Server
15
5. Server name tuliskan localhost, port 3306, user name root, password
sesuaikan dengan password di mysql anda, klik OK
6. Anda akan mendapatkan tampilan berikut
7. Klik kanan Connect bila daftar database belum muncul
8. Klik kanan inventory Connect
9. Anda akan mendapatkan tampilan sebagai berikut
16
D. Konfigurasi Hibernate
Konfigurasi hibernate akan menciptakan objek konfigurasi, mengatur konfigurasi
untuk hibernate dan secara otomatis akan memuat semua pemetaan hbm file.
1. Buat project Java Class Library melalui menu File New Project
2. Pada Categories pilih Java, pada Projects pilih Java Class Library Next
3. Pada project Name beri nama InventoryMapping, beri tanda check pada
use dedicated folder for storing libraries Finish
17
4. Anda akan mendapat tampilan sebagai berikut
5. Tambahkan hibernate configuration file melalui menu
File New File
6. Pada Projects pilih InventoryMapping, Categories pilih Hibernate, pada
File Types pilih Hibernate Configuration Wizard Next
7. Biarkan apa adanya next
8. Database Connection pilih : Jdbc:mysql://127.0.0.1:3306/Inventory [root
on DefaultSchema] Tekan Finish
18
9. Anda akan mendapatkan tampilan sebagai berikut
10. Silahkan anda cari Optional Properties
kemudian anda cari Miscellaneous Properties
Klik Add
11. Pada property name pilih hibernate.current_session_context_class dan
pada property value pilih jta
19
12. Apabila anda klik XML maka akan tampil file XML berikut ini
<?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://127.0.0.1:3306/Inventory</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">####</property>
<property name="hibernate.current_session_context_class">managed</property>
</session-factory>
</hibernate-configuration>
Keterangan :
i. hibernate.dialect
informasi dari dialect engine SQL Server yang digunakan
contoh :
Database
Dialect
PostgreSQL
org.hibernate.dialect.PostgreSQLDialect
MySQL
org.hibernate.dialect.MySQLDialect
MySQL with InnoDB
org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Microsoft SQL Server
org.hibernate.dialect.SQLServerDialect
ii. hibernate.connection.driver_class
informasi driver jdbc dari database yang digunakan
contoh :
Database
Driver Class
PostgreSQL
org.postgresql.Driver
MySQL
com.mysql.jdbc.Driver
Microsoft SQL Server
net.sourceforge.jtds.jdbc.Driver
iii. hibernate.connection.url
informasi url koneksi database yang digunakan
20
contoh :
Database
Driver Class
PostgreSQL
jdbc:postgresql://127.0.0.1:5432/Inventory
MySQL
jdbc:mysql://127.0.0.1:3306/Inventory
Microsoft SQL Server jdbc:jtds:sybase://127.0.0.1:1433/Inventory
iv. hibernate.connection.username
user name database
v. hibernate.connection.password
password database
vi. hibernate.current_session_context_class
•
thread
Sesi akan diikat dengan thread yang melakukan pemanggilan
open session, apa bila session ditutp maka tidak dapat
digunakan kembali
•
jta
Sesi akan diikat kedalam JTA Transaction yang sedang
berjalan
•
managed
apabila kita menggunakan thread, kita tidak bisa menggunakan
thread yang sudah di tutup, oleh karena itu kita kita
menggunakan managed untuk mendapatkan kendali penuh
pada session, seperti membuka dan menutup session.
13. Tambahkan property berikut pada file hibernate.cfg.xml
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.current_session_context_class">jta</property>
<property name="hibernate.connection.autocommit">true</property>
21
E. Hibernate Reverse Engineering file
Digunakan untuk melakukan proses mapping dari tabel di database menjadi file
java serta melakukan pemetaan antara tipe data kolom di database dan tipe data
attribut di database.
1. Tambahkan hibernate reverse engineering file melalui menu
File New File
2. Pada Categories pilih Hibernate, pada File Types pilih Hibernate Reverse
Engineering Wizard Next
3. Biarkan apa adanya next
4. Klik tombol Add all dan beri tanda check pada “Include Related Tables”
sehingga pada Selected Tables menjadi berikut
22
5. Klik finish, Anda akan mendapatkan file xml dengan isi seperti berikut ini
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse
Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering3.0.dtd">
<hibernate-reverse-engineering>
<schema-selection match-catalog="Inventory"/>
<table-filter match-name="barang"/>
<table-filter match-name="penyalur"/>
<table-filter match-name="bagian"/>
<table-filter match-name="item"/>
<table-filter match-name="permintaan"/>
<table-filter match-name="pembelian"/>
<table-filter match-name="kategori"/>
<table-filter match-name="pengguna"/>
</hibernate-reverse-engineering>
F. Mapping table ke java
Hibernate adalah sebuah framework untuk melakukan pemetaan Object Relational
Mapping (ORM). Setiap 1 buah tabel di database maka akan dihasilkan 1 buah
java class dan 1 buah file xml sebagai tempat menyimpan konfigurasi.
1. Untuk memulai proses mapping, pilih menu File New File
2. Pada Categories pilih Hibernate, pada File Types pilih Hibernate Mapping
Files and POJOs from Database Next
23
3. Beri tanda check pada JDK 5 Language Features, Domain Code dan
Hibernate XML Mappings. Pada package tuliskan inventory.model lalu
Finish.
4. Anda akan medapatkan 16 buah file, yaitu 8 file java dan 8 file xml
24
G. HibernateUtil
Digunakan untuk mempermudah pemanggilan Hibernate Session Objek.
1. Pilih menu File New File
2. Pada Categories pilih Hibernate, pada File Types pilih Hibernate Mapping
Files and POJOs from Database Next
3. Pada Class Name beri nama HibernateUtil, pada package beri nama
invetory.util kemudian tekan Finish
25
4. Maka anda akan mendapatkan seperti berikut
H. Unit Test
Unit test digunakan untuk melakukan pengecekan apakah konfigurasi dan
mapping tabel yang sudah kita lakukan sebelumnya berhasil atau tidak. Sebelum
memulai membuat unit test, tambahkan data ke tabel barang melalui query.
1. Klik kanan pada HibernateUtil.java Tools Create Junit Tests
26
2. Pilih JUnit 4.x Ok, Biarkan apa adanya bila muncul tampilan berikut,
klik OK
3. Anda akan mendapatkan tampilan seperti berikut ini
27
4. Coba anda buka file HibernateUtilTest.java. Cari method dengan nama
testGetSessionFactory. Secara default kode program dari method ini
adalah sebagai berikut
@Test
public void testGetSessionFactory() {
System.out.println("getSessionFactory");
SessionFactory expResult = null;
SessionFactory result = HibernateUtil.getSessionFactory();
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}
5. Hapus kode program yang dicetak tebal, gantikan dengan kode program
berikut :
Session session = result.getCurrentSession();
SessionFactory result = HibernateUtil.getSessionFactory();
//Mengisi Pengguna ke tabel pengguna
//==================================================
Session s = result.openSession();
s.beginTransaction();
Pengguna p = new Pengguna("Amikom", "Amikom");
s.save(p);
//Melihat isi dari tabel pengguna
s.beginTransaction();
Query q = s.createQuery("From Pengguna");
List<Pengguna> lstPengguna = q.list();
for (Pengguna pg : lstPengguna) {
System.out.println(pg.getKodePengguna() + "\t"
+ pg.getNama() + "\t" + pg.getPassword());
}
Penjelasan :
•
Session session = result.openSession();
Memanggil method openSession() dari objek result untuk membuka
session, kemudian disimpan di objek session yang merupakan instant
dari kelas Session
•
session.beginTransaction();
28
Memanggil method beginTransaction() dari objek session untuk
memulai transaksi
•
Pengguna p = new Pengguna("Amikom", "Amikom");
Membuat objek pengguna dengan nama “Amikom”, password
“Amikom”
•
s.save(p);
Menyimpan objek pengguna ke database
•
Query query = session.createQuery("from Pengguna");
Memanggil method CreateQuery(….) dari objek session untuk
membuat Hibernate Query Language “from Pengguna” yang
digunakan untuk mendapatkan semua record di tabel Pengguna.
Hasilnya disimpan di objek query yang merupakan instant dari kelas
Query
•
List<Pengguna> lstPengguna = query.list();
Memanggil method list() dari objek query yang kemudian disimpan di
objek lstPengguna yang merupakan instant dari Interface List dengan
tipe kelas Pengguna sebagai itemnya.
•
for (Pengguna pg : lstPengguna) {
Melakukan perulangan untuk mendapatkan semua item dari objek
lstPengguna yang bertipe data Pengguna, setiap item disimpan di objek
barang.
•
System.out.println(pg.getKodePengguna() + "\t"
+ pg.getNama() + "\t" + pg.getPassword());
Menampilkan kode pengguna, nama pengguna dan password yang
dipisahkan dengan TAB.
6. Keluaran dari program diatas dengan melihat
Pilih menu Window Output Test Results
29
Diatas menandakan bahwa test berhasil dilalui dengan membutuhkan
waktu total 1,25 detik
7. Silahkan ganti file library hibernate anda dengan file berikut melalui menu
Libraries Add Jar/Folder
8. Tambahkan Libraries Add Project, Libraries Add Library Persistence
9. Apabila hasil eksekusi Unit Test menampilkan record dari database anda
maka konfigurasi anda sudah benar. Selamat.
30
Enterprise Java Beans
1. Buat project Java EE melalui menu File New Project
2. Pada Categories pilih Java EE, Projects pilih EJB Module Next
3. Pada project Name beri nama Inventory-ejb, Project Location sesuai
dengan selera anda. Beri tanda check pada Use Dedicated Folder for
Storing Libraries, Create Main Class dan Set as Main Project Next
4. Pada Server and Setting, untuk Server pilih JBoss Application Server, Java
EE Version pilih Java EE 5 Finish
5. Anda akan mendapatkan tampilan sebagai berikut di Tab Project
31
6. Jadikan project InventoryMapping sebagai Referensi Library dari
Inventory-ejb, klik kanan pada Libraries Add Project
7. Pilih InventoryMapping kemudian klik Add Project Jar Files
8. Maka libraries anda menjadi seperi berikut
32
9. Tambahkan library hibernate anda dengan file berikut melalui menu
Libraries Add Jar/Folder
10. Tambahkan Libraries Add Project, Libraries Add Library Persistence
11. Tambahkan 1 buah SessionBean melalui menu File New File
12. Pada project silahkan pilih Inventory-ejb, categories pilih Java EE,
FileTypes pilih SessionBean Next
13. Pada EJBName beri nama Pengguna, package misal ejb, Session Type
Stateless, Create interface pilih Remote Finish
33
14. Anda secara otomatis akan mendapatkan 2 buah file yaitu PenggunaBean
yang berupa Java Class dan PenggunaRemote yang berupa Java Interface.
15. Tambahkan Business Method pada PenggunaBean melalui menu Source
Insert Code atau Klik kanan di Source code Insert Code
atau
34
16. Pilih Add Business Method
17. Pada Name ketikkan doLogin, Return Type Pengguna
18. Pada Parameter, beri 1 parameter, Name pengguna, Type Pengguna, final
tidak diberi tanda check
19. Pada Exceptions, tambahkan java.lang.Exception, ingat saat Find Type
hanya ketikkan Exception
20. Klik OK, maka anda akan mendapat penambahan kode program sebagai
berikut di kelas PenggunaBean
35
di interface PenggunaRemote
21. Tambahkan import inventory.model.Pengguna; di kelas PenggunaBean
dan interface PenggunaRemote
22. Method doLogin ini nantinya akan digunakan untuk melakukan login dari
aplikasi client, apabila tidak ditemukan user name dan password yang
sama maka akan mengembalikan exception. Berikut kode programnya
public Pengguna doLogin(Pengguna pengguna) throws Exception {
Session s = HibernateUtil.getSessionFactory().openSession();
Query q = s.createQuery("from Pengguna where Nama=' " +
pengguna.getNama() + " ' and Password=' " + pengguna.getPassword() + " ' ");
Pengguna temp = (Pengguna) q.list().get(0);
if (temp == null) {
new Exception("User atau Password anda salah");
}
return temp;
}
23. Tambahkan library melalui klik kanan Libraries add library Import
MySQL JDBC Driver
36
Java SE Client
Disini kita akan mencoba membuat client dari Service Login, dan service service lainnya
yang akan kita buat nanti.
A. Desain Tampilan dan Libraries
1. Dari menu File New Project
2. Categories pilih Java , Projects pilih Java Application Next
3. Pada project name ketik Inventory-se, beri tanda check pada Use
Dedicateed Libraries for Storing Libraries, Create Main Class dan Set as
Main Project Finish
4. Anda akan mendapatkan sebuah project aplikasi java Standard
5. Tambahkan file jar berikut sebagai libraries (18 libraries)
37
6. Jadikan Inventory-ejb dan InventoryMapping sebagai referensi dari
project anda, tambahkan Libraries Add Project, Libraries Add
Library Persistence.
7. Buat 1 buat JFrame dengan nama FrameLogin, atur agar layout menjadi
Border Layout
8. Tambahkan 1 buah JPanel ke dalam FrameLogin, atur agar layout dari
JPanel menjadi GridBagLayout, apabila dilihat dari Inspector (Windows
Navigating Inspector) tampak seperti berikut
9. Tambahkan 3 buah JLabel, 1 buah JTextField, 1 buah JPasswordField 2
buah JButton, sehingga dari Inspector tampak seperti berikut
38
10. Klik kanan pada GridBagLayout Costumize, maka anda akan
mendapatkan window GridBagLayout Costumizer, atur agar bagian desain
untuk grid bag layout tampak seperti gambar berikut
11. Untuk jLabel1, pada property layout untuk nilai Grid Width berikan nilai 3
12. Untuk jTextField1 dan jPasswordField1, atur agar nilai GridWidth
menjadi 2, Fill menjadi Horizontal dan Anchor menjadi West
13. Untuk jLabel2 dan jLabel3, berikan nilai Anchor menjadi West
14. Untuk semua Objek, berikan nilai Insets [ 0, 0, 5, 5 ] Close
39
15. Anda akan mendapatkan tampilan berikut pada FrameLogin
16. Ubah text dari tiap Objek dengan cara memilik komponen yang akan
diubah textnya Edit text
Objek
TextLama
TextBaru
jLabel1
jLabel1
Login Aplikasi Inventory
jLabel2
jLabel2
Nama
jLabel3
jLabel3
Password
jTextField1
jTextField1
{Kosongkan}
jPasswordField2
jPasswordField2
{Kosongkan}
jButton1
jButton1
Keluar
jButton2
jButton2
Login
17. Ubah nama Objek dengan cara Klik kanan objek yang hendak diubah
namanya Change variable name
40
Nama Objek
Text
Nama Objek Baru
jTextField1
{Kosong}
txtNama
jPasswordField2 {Kosong}
txtPassword
jButton1
Keluar
btnKeluar
jButton2
Login
btnLogin
18. Atur properties dari JFrame, klik kanan di Inspector Properties
41
19. Klik Code, atur property sebagai berikut
Property
Value
FormSizePolicy
Generate Resize Code
Generate Size
False (uncheck)
20. Klik Properties, atur property sebagai berikut
Property
Value
title
Aplikasi Inventory
resizeable
False (uncheck)
Minimum Size
{samakan dengan prefered Size}
Close
21. Silahkan buka file Main.java, sesuaikan method main anda dengan kode
program berikut
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FrameLogin frameLogin=new FrameLogin();
frameLogin.setVisible(true);
}
});
}
Tekan F6
B. Memanggil service EJB
1. Buatlah sebuah kelas utitiltas untuk memanggil service EJB di JBoss, File
New File, pada Projects pilih Inventory-se, Categories pilih Java, File
Types pilih Java Class Next
2. Pada Class name beri nama EJBUtil, package inventoryse.util Finish
3. Deklarasikan 2 buah attribut, yaitu
i. private static InitialContext initialContext;
ii. private Properties properties;
42
4. Buat sebuah konstruktor sebagai berikut
private EJBUtil(String fileName) {
try {
properties = new Properties();
properties.load(getClass().getResourceAsStream(fileName));
} catch (IOException ex) {
Logger.getLogger(EJBUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
5. Buatlah sebuah static method bernama createInstance, method ini
digunakan untuk melakukan inisialisasi InitialContext
public static void createInstance(String fileName) {
try {
if (initialContext == null) {
initialContext = new InitialContext(new EJBUtil(fileName).properties);
}
} catch (NamingException ex) {
Logger.getLogger(EJBUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
6. Tambahkan lagi 1 buah static method bernama Lookup, digunakan untuk
melakukan Lookup service EJB
public static Object Lookup(String name) {
try {
return initialContext.lookup(name);
} catch (NamingException ex) {
Logger.getLogger(EJBUtil.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
7. Tambahkan file jndi.properties pada package inventoryse, isi dengan file
berikut
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url={IP Address JBoss}:1099
43
8. Tambahkan file log4j.properties pada package inventoryse, isi dengan file
berikut
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
9. Double click pada btnLogin untuk memberikan event ActionPerformed.
Kemudian tambahkan kode program berikut
try {
Properties p = new Properties();
p.load(getClass().getResourceAsStream("/inventoryse/jndi.properties"));
InitialContext context = new InitialContext(p);
PenggunaRemote pr = (PenggunaRemote)
context.lookup("PenggunaBean/remote");
Pengguna pengguna = new Pengguna(txtNama.getText().trim(),
String.valueOf(txtPassword.getPassword()));
pengguna = pr.doLogin(pengguna);
String data = "Welcome " + String.valueOf(pengguna.getKodePengguna());
data += "\n" + pengguna.getNama();
JOptionPane.showMessageDialog(this, data, "Information",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Attention",
JOptionPane.WARNING_MESSAGE);
}
C. Deployment EJB di JBoss5
a. Hot Deployment
1. Build project Inventory-ejb dengan Klik kanan pada project Clean
and Build.
2. Anda akan mendapatkan pesan seperti berikut pada WindowOutput
Created dir: F:\My Documents\Pelatihan\Asset Management\Inventoryejb\dist //lokasi direktori hasil anda melakukan build
Building jar: F:\My Documents\Pelatihan\Asset Management\Inventoryejb\dist\Inventory-ejb.jar //lokasi file ejb anda yang sudah siap di
deployment
44
3. Kopikan file Inventory-ejb.jar anda ke
{Direktory JBoss5 anda}\server\default\deploy
b. Netbeans
1. Klik kanan pada project
2. Pilih deploy
D. Menjalankan JBoss Application Server
Untuk menjalankan JBoss Application Server ada banyak cara, antara lain
1. Window Service
Petunjuk untuk menjalankan JBoss menjadi Window Service silahkan
baca sendiri di E:\jboss-5.1.0.GA\bin pada file README-service.txt
2. run.bat
Dari console ada gunakan run.bat –b 0.0.0.0 yang berarti JBoss anda bisa
diakses dari client dengan IP berapapun
3. Dari netbeans
Dari menu Window Service, perluas node Servers, klik kanan pada
JBoss Application Server Start
Silahkan anda jalankan Inventory-se apabila JBoss anda sudah berjalan.
Kemudian tekan login. Semoga berhasil.
45
Hibernate Query Language
Hibernate menggunakan sebuah bahasa query yang mirip dengan bahasa query yang
digunakan pada relational database.
A. From
Digunakan untuk melakukan query terhadap sebuah objek, apabila objek ini
berasosiasi dengan objek lain maka secara otomatis objek yang terasosiasi akan
ikut terquery.
Contoh :
•
From Pengguna
Maka akan mengembalikan semua data di tabel Pengguna dan koleksi
objek Permintaan dan Pembelian
Query ini di SQL sama dengan :
Select * from pengguna p
•
From Barang
Maka akan mengembalikan semua data di tabel Barang dan objek
Kategori serta koleksi Item
Query ini di SQL sama dengan :
Select * from barang b
•
From Kategori
Maka akan mengembalikan semua data di tabel Kategori dan objek
Barang
Query ini di SQL sama dengan :
Select * from kategori k
B. Select
Digunakan untuk melakukan query terhadap sebuah objek, apabila objek ini
berasosiasi dengan objek lain maka bergantung dengan select nya, apabila
selectnya menyertakan attribut dari objek lain yang berelasi maka secara otomatis
akan terjoin, apabila hanya menyangkut ke attribut dari objek terkait maka tidak
akan terjadi join.
46
Contoh :
•
Select b from Barang b
Query ini di SQL sama dengan
select
b.kodeBarang as kodeBarang,
b.kodeKategori as kodeKate,
b.nama as nama,
b.stock as stock
from
inventory.barang b
•
Select b.nama from Barang b
Query ini di SQL sama dengan
select
b.nama as nama
from
inventory.barang b
•
Select b.nama,b.kategori.nama from Barang b
Query ini di SQL sama dengan
select
barang0_.nama,
kategori1_.nama
from
inventory.barang b,
inventory.kategori k
where
b.kodeKategori=k.kodeKategori
•
select b.kategori.nama from Barang b
Query ini di SQL sama dengan
select
k.nama from
inventory.barang b,
47
inventory.kategori k
where
b.kodeKategori=k.kodeKategori
EJB Service
Sebagai latihan, buatlah SessionBean dengan nama Kategori, Session Type
Stateless, Create interface pilih Remote. Bisnis method di KategoriBean, yaitu
•
getKategori
i. Parameter : {tidak ada}
ii. Return Type : Kategori[]
iii. HQL : select k from Kategori k
Contoh kode program untuk method getKategori
public Kategori[] getKategori() {
Session s = HibernateUtil.getSessionFactory().openSession();
Query q = s.createQuery("select k from Kategori k");
List<Kategori> lstKategori = q.list();
Kategori[] arrKategori = new Kategori[lstKategori.size()];
lstKategori.toArray(arrKategori);
return arrKategori;
}
•
saveKategori
i. Parameter : kategori, type data Kategori
ii. Return Type : boolean
Contoh kode program untuk method saveKategori
public boolean saveKategori(Kategori kategori) {
try {
Session s = HibernateUtil.getSessionFactory().openSession();
s.saveOrUpdate(kategori);
return true;
} catch (HibernateException ex) {
ex.printStackTrace();
return false;
}
}
48
•
delKategori
i. Parameter : kategori, type data Kategori
ii. Return Type : boolean
Contoh kode program delKategori
public boolean delKategori(Kategori kategori) {
try {
Session s = HibernateUtil.getSessionFactory().openSession();
s.delete(kategori);
return true;
} catch (HibernateException ex) {
ex.printStackTrace();
return false;
}
}
Java Client
1. Pada project Inventori-se, buatlah sebuah 1 buat form utama seperti
gambar berikut
Apabila dilihat dari Inspector
49
2. Tambahkan 1 buah JPanel dengan nama PanelKategori untuk melakukan
pengolahan data kategori, desain form sebagai berikut
Apabila dilihat dari Window Inspector
1. BorderLayout
2. BoxLayout
Properties
i. Axis = Page Axis
3. GridBagLayout
4. FlowLayout
Properties
i. Alignment = Center
50
3. Ubah properties objek sesuai dengan tabel berikut
Nama Objek
Nama Baru
Text Lama
Text Baru
jTable1
tbKategori
jLabel1
jLabel1
jLabel1
Kode
jLabel2
jLabel2
jLabel2
Nama
jLabel3
jLabel3
jLabel3
Keterangan
jTextField1
txtKode
jTextField1
{Kosongkan}
jTextField2
txtNama
jTextField2
{Kosongkan}
jTextField3
txtKeterangan
jTextField3
{Kosongkan}
jButton1
btnAdd
jButton1
Tambah
jButton2
btnEdit
jButton2
Ubah
jButton3
btnDel
jButton3
Hapus
jButton4
btnExit
jButton4
Keluar
Sehingga desain form anda menjadi seperti berikut
Note :
Untuk mengubah jumlah kolom, klik kanan pada tbKategori
Untuk mengubah ukuran textfield gunakan properties, atur pada preferred
size.
4. Silahkan buka kembali FrameUtama, berikan event pada menu Master Kategori
51
5. Silahkan anda kopi java class TabFunction.java pada project anda.
Letaknya bebas.
6. Tambahkan kode program berikut
7. Tambahkan kode program berikut pada event yang sudah ada buat
52
8. Ganti kode program yang ditebali berikut
try {
Properties p = new Properties();
p.load(getClass().getResourceAsStream("/inventoryse/jndi.properties"));
InitialContext context = new InitialContext(p);
PenggunaRemote pr = (PenggunaRemote)
context.lookup("PenggunaBean/remote");
Pengguna pengguna = new Pengguna(txtNama.getText().trim(),
String.valueOf(txtPassword.getPassword()));
pengguna = pr.doLogin(pengguna);
String data = "Welcome " +
String.valueOf(pengguna.getKodePengguna());
data += "\n" + pengguna.getNama();
JOptionPane.showMessageDialog(this, data, "Information",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Attention",
JOptionPane.WARNING_MESSAGE);
}
Dengan kode program berikut
setVisible(false);
new FrameUtama().setVisible(true);
9. Deklarasikan kode program berikut pada PanelKategori
private Properties p;
private InitialContext context;
private KategoriRemote kr;
private Kategori[] arrKategori;
10. Ubah kode pada konstruktor anda menjadi seperti kode program berikut
try {
initComponents();
tbKategori.getSelectionModel().addListSelectionListener(this);
p = new Properties();
p.load(getClass().getResourceAsStream("/inventoryse/jndi.properties"));
context = new InitialContext(p);
kr = (KategoriRemote) context.lookup("KategoriBean/remote");
} catch (IOException ex) {
Logger.getLogger(PanelKategori.class.getName()).log(Level.SEVERE, null, ex);
} catch (NamingException ex) {
Logger.getLogger(PanelKategori.class.getName()).log(Level.SEVERE, null, ex);
}
53
11. Buatlah method berikut untuk menampilkan data di JTable
private void refresh() {
try {
DefaultTableModel dtm = (DefaultTableModel) tbKategori.getModel();
dtm.setRowCount(0);
arrKategori = kr.getKategori();
for (Kategori kategori : arrKategori) {
dtm.addRow(new Object[]{
kategori.getKodeKategori(),
kategori.getNama(),
(kategori.getKeterangan() == null) ? "" : kategori.getKeterangan()
});
}
tbKategori.setModel(dtm);
} catch (HibernateException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
12. Tambahkan implements ListSelectionListener pada kelas PanelKategori,
kemudian buat method berikut
public void valueChanged(ListSelectionEvent e) {
if (tbKategori.getRowCount() > 0) {
txtKode.setText(tbKategori.getValueAt(tbKategori.getSelectedRow(), 0).toString());
txtNama.setText(tbKategori.getValueAt(tbKategori.getSelectedRow(), 1).toString());
txtKeterangan.setText(tbKategori.getValueAt(tbKategori.getSelectedRow(), 2).toString());
}
}
13. Tambahkan event formComponentShow
14. Panggil method refresh pada event formComponentShow
15. Tambahkan event actionPerformed pada btnEdit
16. Tambahkan kode program berikut pada method btnEditActionPerformed
Kategori kategori = arrKategori[tbKategori.getSelectedRow()];
kategori.setNama(txtNama.getText().trim());
kategori.setKeterangan(txtKeterangan.getText());
if (kr.saveKategori(kategori)) {
JOptionPane.showMessageDialog(this, "Perubahan berhasil", "Informasi",
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Perubahan gagal", "Perhatian",
JOptionPane.WARNING_MESSAGE);
}
refresh();
17. Silahkan tambahkan fasilitas untuk add dan delete serta fasilitas lainnya.
54