56
1 Java Application, JBoss, EJB dan Hibernate

Java Application, JBoss, EJB dan Hibernate

  • Upload
    vantruc

  • View
    263

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Java Application, JBoss, EJB dan Hibernate

1

Java Application, JBoss, EJB dan Hibernate

Page 2: 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

Page 3: Java Application, JBoss, EJB dan Hibernate

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

Page 4: Java Application, JBoss, EJB dan 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.

Page 5: Java Application, JBoss, EJB dan Hibernate

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.

Page 6: Java Application, JBoss, EJB dan Hibernate

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

Page 7: Java Application, JBoss, EJB dan Hibernate

5

2. Class Diagram

3. Squence Diagram

i. Squence Diagram Login

Page 8: Java Application, JBoss, EJB dan Hibernate

6

ii. Squence Diagram Get Kategori

iii. Squence Diagram Add Kategori

Page 9: Java Application, JBoss, EJB dan Hibernate

7

iv. Squence Diagram Edit Kategori

v. Squence Diagram Del Kategori

Page 10: Java Application, JBoss, EJB dan Hibernate

8

vi. Squence Diagram Pembelian Barang

Page 11: Java Application, JBoss, EJB dan Hibernate

9

vii. Squence Diagram Permintaan Barang

viii. Squence Diagram Get Penyalur

Page 12: Java Application, JBoss, EJB dan Hibernate

10

ix. Squence Diagram Add Penyalur

x. Squence Diagram Edit Penyalur

Page 13: Java Application, JBoss, EJB dan Hibernate

11

xi. Squence Diagram Del Penyalur

xii. Squence Diagram Get Stock

Page 14: Java Application, JBoss, EJB dan Hibernate

12

D. Database Aplikasi Inventory

Gunakan file database.sql

Page 15: Java Application, JBoss, EJB dan Hibernate

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

Page 16: Java Application, JBoss, EJB dan Hibernate

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

Page 17: Java Application, JBoss, EJB dan Hibernate

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

Page 18: Java Application, JBoss, EJB dan Hibernate

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

Page 19: Java Application, JBoss, EJB dan Hibernate

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

Page 20: Java Application, JBoss, EJB dan Hibernate

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

Page 21: Java Application, JBoss, EJB dan Hibernate

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

Page 22: Java Application, JBoss, EJB dan Hibernate

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>

Page 23: Java Application, JBoss, EJB dan Hibernate

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>

Page 24: Java Application, JBoss, EJB dan Hibernate

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

Page 25: Java Application, JBoss, EJB dan Hibernate

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>

Page 26: Java Application, JBoss, EJB dan Hibernate

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

Page 27: Java Application, JBoss, EJB dan Hibernate

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

Page 28: Java Application, JBoss, EJB dan Hibernate

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

Page 29: Java Application, JBoss, EJB dan Hibernate

27

2. Pilih JUnit 4.x � Ok, Biarkan apa adanya bila muncul tampilan berikut,

klik OK

3. Anda akan mendapatkan tampilan seperti berikut ini

Page 30: Java Application, JBoss, EJB dan Hibernate

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()); }

Page 31: Java Application, JBoss, EJB dan Hibernate

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

Page 32: Java Application, JBoss, EJB dan Hibernate

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.

Page 33: Java Application, JBoss, EJB dan Hibernate

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

Page 34: Java Application, JBoss, EJB dan Hibernate

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

Page 35: Java Application, JBoss, EJB dan Hibernate

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

Page 36: Java Application, JBoss, EJB dan Hibernate

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

Page 37: Java Application, JBoss, EJB dan Hibernate

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

Page 38: Java Application, JBoss, EJB dan Hibernate

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; }

Page 39: Java Application, JBoss, EJB dan Hibernate

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)

Page 40: Java Application, JBoss, EJB dan Hibernate

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

Page 41: Java Application, JBoss, EJB dan Hibernate

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

Page 42: Java Application, JBoss, EJB dan Hibernate

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

Page 43: Java Application, JBoss, EJB dan Hibernate

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

Page 44: Java Application, JBoss, EJB dan Hibernate

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); } }); }

Page 45: Java Application, JBoss, EJB dan Hibernate

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

Page 46: Java Application, JBoss, EJB dan Hibernate

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);

}

Page 47: Java Application, JBoss, EJB dan Hibernate

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.

Page 48: Java Application, JBoss, EJB dan Hibernate

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.

Page 49: Java Application, JBoss, EJB dan Hibernate

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,

Page 50: Java Application, JBoss, EJB dan Hibernate

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; } }

Page 51: Java Application, JBoss, EJB dan Hibernate

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; } }

Page 52: Java Application, JBoss, EJB dan Hibernate

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

Page 53: Java Application, JBoss, EJB dan Hibernate

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

Page 54: Java Application, JBoss, EJB dan Hibernate

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

Page 55: Java Application, JBoss, EJB dan Hibernate

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); }

Page 56: Java Application, JBoss, EJB dan Hibernate

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();