Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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