20100414 MicrosoftWord JavaEE HibernateFramework IC.doc
-
Upload
fahrizal-nuansa -
Category
Documents
-
view
229 -
download
1
description
Transcript of 20100414 MicrosoftWord JavaEE HibernateFramework IC.doc
1
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
2
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.
3
Aplikasi Inventory
A. Deskripsi
Merupakan modul aplikasi yang mengolah data-data stock, spare parts, barang-
barang 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.
4
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
5
2. Class Diagram
3. Squence Diagram
i. Squence Diagram Login
6
ii. Squence Diagram Get Kategori
iii. Squence Diagram Add Kategori
7
iv. Squence Diagram Edit Kategori
v. Squence Diagram Del Kategori
8
vi. Squence Diagram Pembelian Barang
9
vii. Squence Diagram Permintaan Barang
viii. Squence Diagram Get Penyalur
10
ix. Squence Diagram Add Penyalur
x. Squence Diagram Edit Penyalur
11
xi. Squence Diagram Del Penyalur
xii. Squence Diagram Get Stock
12
D. Database Aplikasi Inventory
Gunakan file database.sql
13
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
14
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
15
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
16
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
17
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
18
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
19
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
20
12. Apabila anda klik XML maka akan tampil file XML berikut ini
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
<?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>
21
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>
22
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
23
5. Klik finish, Anda akan mendapatkan file xml dengan isi seperti berikut ini
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
<?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-engineering-3.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>
24
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
25
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
26
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
27
2. Pilih JUnit 4.x � Ok, Biarkan apa adanya bila muncul tampilan berikut,
klik OK
3. Anda akan mendapatkan tampilan seperti berikut ini
28
4. Coba anda buka file HibernateUtilTest.java. Cari method dengan nama
testGetSessionFactory. Secara default kode program dari method ini
adalah sebagai berikut
5. Hapus kode program yang dicetak tebal, gantikan dengan kode program
berikut :
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();
@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."); }
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()); }
29
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
30
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.
31
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
32
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
33
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
34
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
35
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
36
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
23. Tambahkan library melalui klik kanan Libraries � add library � Import
�MySQL JDBC Driver
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; }
37
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)
38
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
39
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
40
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
41
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
42
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
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;
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); } }); }
43
4. Buat sebuah konstruktor sebagai berikut
5. Buatlah sebuah static method bernama createInstance, method ini
digunakan untuk melakukan inisialisasi InitialContext
6. Tambahkan lagi 1 buah static method bernama Lookup, digunakan untuk
melakukan Lookup service EJB
7. Tambahkan file jndi.properties pada package inventoryse, isi dengan file
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); } }
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); } }
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; } }
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
44
8. Tambahkan file log4j.properties pada package inventoryse, isi dengan file
berikut
9. Double click pada btnLogin untuk memberikan event ActionPerformed.
Kemudian tambahkan kode program berikut
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 Window�Output
Created dir: F:\My Documents\Pelatihan\Asset Management\Inventory-
ejb\dist //lokasi direktori hasil anda melakukan build
Building jar: F:\My Documents\Pelatihan\Asset Management\Inventory-
ejb\dist\Inventory-ejb.jar //lokasi file ejb anda yang sudah siap di
deployment
# 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
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);
}
45
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.
46
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.
47
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,
48
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
• saveKategori
i. Parameter : kategori, type data Kategori
ii. Return Type : boolean
Contoh kode program untuk method saveKategori
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; }
public boolean saveKategori(Kategori kategori) { try { Session s = HibernateUtil.getSessionFactory().openSession(); s.saveOrUpdate(kategori); return true; } catch (HibernateException ex) { ex.printStackTrace(); return false; } }
49
• delKategori
i. Parameter : kategori, type data Kategori
ii. Return Type : boolean
Contoh kode program delKategori
Java Client
1. Pada project Inventori-se, buatlah sebuah 1 buat form utama seperti
gambar berikut
Apabila dilihat dari Inspector
public boolean delKategori(Kategori kategori) { try { Session s = HibernateUtil.getSessionFactory().openSession(); s.delete(kategori); return true; } catch (HibernateException ex) { ex.printStackTrace(); return false; } }
50
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
51
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
52
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
53
8. Ganti kode program yang ditebali berikut
Dengan kode program berikut
setVisible(false);
new FrameUtama().setVisible(true);
9. Deklarasikan kode program berikut pada PanelKategori
10. Ubah kode pada konstruktor anda menjadi seperti 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);
}
private Properties p; private InitialContext context; private KategoriRemote kr; private Kategori[] arrKategori;
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); }
54
11. Buatlah method berikut untuk menampilkan data di JTable
12. Tambahkan implements ListSelectionListener pada kelas PanelKategori,
kemudian buat method berikut
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
17. Silahkan tambahkan fasilitas untuk add dan delete serta fasilitas lainnya.
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); }
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()); } }
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();