Pengenalan Swing Framework dan Beans Binding di Netbeans IDE

Hallo pembaca setia sekalian.. pada kesempatan ini saya ingin menulis tentang Swing Framework dan Beans Binding dan tentunya bagaimana menggunakannya dengan IDE kesayangan saya Netbeans. Sebelum kita coba buat aplikasi sederhana dengan Swing Framework+Beans Binding mungkin pembaca perlu mengetahui apa itu Swing Framework dan Bean Binding.

Menurut yang saya baca dari websitenya hehehe.. Swing Framework adalah sekumpulan class yang dapat kita gunakan untuk mempermudah pengembangan aplikasi desktop berbasis swing. Dalam Swing Framework sudah disediakan class-class atau infrastruktur yang umumnya dibutuhkan oleh sebuah aplikasi desktop antara lain :

  • Application lifecyle, notably GUI startup and shutdown.
  • Support for managing and loading resources, like strings, formatted messages, images, colors, fonts, and other types common to desktop applications.
  • Support for defining, managing, and binding Actions, including Actions that run asynchronously (in the “background”).
  • Persistent session state: support for automatically and selectively saving GUI state from one run of an application to the next.

Biar lebih jelas silahkan kunjungi websitenya di https://appframework.dev.java.net/

Nah sedangkan Beans Binding adalah framework yang memudahkan kita untuk melakukan sinkronisasi antara 2 object. Yang paling umum adalah bagaimana mengsinkronisasi data pada database dengan yang ditampilkan pada user atau sinkronisasi antara komponen-komponen swing (table, textfield, combobox, checkbox, ….) Jadi jika terjadi perubahan data pada tampilan (GUI) maka otomatis data di database juga ikut berubah begitu juga sebaliknya. Untuk lebih jelasnya silahkan dibaca di https://beansbinding.dev.java.net/

Sudah cukup teorinya hehehe.. sekarang bagaimana kita coba buat aplikasinya 🙂 Pada tulisan saya kali ini kasusnya adalah kita akan membuat aplikasi “Daftar Barang” dimana masing masing barang akan memiliki Kategori terntentu. Kalo digambarkan dalam UML kurang lebih seperti gambar berikut ini :

Saya menggunakan database MySQL tapi tentunya pembaca beleh menggunakan database yang lain yang penting sesuaikan JDBC connectornya. Pertama siapkan sebuah database dengan nama “products” dan selanjutnya ikuti langkah-langkah berikut ini:

Jalankan Netbeans (Saya menggunakan NB 6.1) kemudian buatlah sebuah project dengan nama “ProductRecord”

Pastikan jenis project yang terpilih adalah Java Destop Aplication kemudian Next. Pada layar wizard berikutnya pastikan Application Shell yang dipilih adalah Basic Application seperti gambar berikut ini, kemudian tekan tombol Finish

Netbeans secara otomatis akan membuatkan template project buat kita dan juga 3 buah Class yang akan kita gunakan.

Selanjutnya buatlah Pesistence Unit dengan klik kanan pada source package>New>Persistence Units.. Pilihlah database product yang baru kita buat sebagai Database Connectionnya kemudian Finish.

Selanjutnya buatlah 2 Entity Class yaitu Prouduct dan Category. Klik kanan pada Source Package>New>Entity Class. Beri package “model” untuk masing-masing Entity Class tersebut.


package model;

import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

/**
*
* @author hendro
*/
@Entity
public class Product implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="name",length=100)
private String name;
@Column(name="description",length=200)
private String description;
private double price;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;

public Category getCategory() {
return category;
}

public void setCategory(Category category) {
this.category = category;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
}

Sesuaikan kode program untuk class Product seperti kode program di atas.


package model;

import java.beans.PropertyChangeSupport;

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Transient;

/**

*

* @author hendro

*/

@Entity

public class Category implements Serializable {

@Transient

private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Column(name="name",length=100)

private String name;

@Column(name="description",length=200)

private String description;

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

}

Sesuaikan kode untuk class Category seperti kode program di atas. Jika anda bingung dengan kode-kode program di atas,  silahkan anda mempelajari tentang Java Persistence API (JPA).

Selanjutnya buatlah 2 Class DAO yaitu CategoryDAO dan ProductDAO. 2 Class ini yang bertanggung jawab untuk melakukan update ke database. Masing-masing class beri package “dao”

package dao;

import java.util.List;
import javax.persistence.EntityManager;
import model.Category;

/**
*
* @author hendro
*/
public class CategoryDAO {
private EntityManager em;
public CategoryDAO(){}

public CategoryDAO(EntityManager em) {
this.em = em;
}
public void save(Category cat) {
if (cat.getId() == null) {
em.persist(cat);
} else {
em.merge(cat);
}
}

public void delete(Category cat) {
em.remove(cat);
}

public Category getCategory(Long id) {
return em.find(Category.class, id);
}

public List getCategories() {
return em.createQuery("select p from Category p").getResultList();
}

}
package dao;

import java.util.List;
import javax.persistence.EntityManager;
import model.Product;

/**
*
* @author hendro
*/
public class ProductDAO {
private EntityManager em;
public ProductDAO(){}

public ProductDAO(EntityManager em) {
this.em = em;
}
public void save(Product prod) {
if (prod.getId() == null) {
em.persist(prod);
} else {
em.merge(prod);
}
}

public void delete(Product prod) {
em.remove(prod);
}

public Product getProduct(Long id) {
return em.find(Product.class, id);
}

public List
getProdudct() {
return em.createQuery("select p from Product p").getResultList();
}

}

upsss.. karena udah mo kuliah saya lanjutin besok ya 😉  sabar.. sabar..

Advertisements

2 hari jadi mahasiswa lagi

halo pembaca sekalian,

sory ini postingan iseng aja 😀 gak ada hubungan dengan Java hehehehe…

hari ini hari ke-2 saya jadi mahasiswa lagi.. mmmm ternyata jadi mahasiswa itu capek ya 😦 apalagi kalo ngekos begini wah pokoknya pulang-pulang capek bgt ditambah jogja panasnya minta apyuuun.. Tapi ada juga enaknya artinya beban pekerjaan agak sedikit berkurang (tapi msh ada yang bikin pusing) jadi bisa lebih banyak waktu untuk belajar 😀 mmmm tentunya belajar Java hehehehe.. dan semoga punya banyak waktu juga untuk ngeblog share pengalaman saya dengan Java buat pembaca semua 😉

Buat pembaca yang di jogja kapan-kapan bisa kopi darat dengan saya, kalo bisa saya ditraktir ya hehehe kan saya udah jadi anak kos sekarang 😉

mmmm.. udah gak sabar nih untuk belajar hal-hal yang baru lagi.. khususnya java 🙂

Menggunakan Connection Pooling pada aplikasi web

Sebelum kita liat bagaimana menggunakan Coonection Pooling pada aplikasi web, kita liat dulu apa sih connection pooling itu? dan apa kelebihannya jika aplikasi menggunakan connection pooling.

Connection Pooling adalah teknik untuk sharing sekumpulan cached connection object yang gunakan oleh multiple client.  Yang dimaksud coonection di sini adalah koneksi ke data source misalnya koneksi ke database.

Mengapa dibutuhkan cached connection object? misalnya connection object ke database? ini karena object connection sangat memakan resource jika kita melakukan buka tutup koneksi dan tentunya membuat aplikasi menjadi lambat.  Mungkin belum begitu terasa jika aplikasi webnya hanya diakses oleh beberapa orang. Tapi coba saja aplikasi tersebut diakses oleh puluhan orang atau ratusan orang dan secara bersamaan memanggil fungsi dari aplikasi untuk hapus data misalnya. Nah disini akan sangat terasa jika aplikasi kita makin lama makin lambat dan bahkan kadang-kadang aplikasi gagal melakukan proses.

Nah dengan coonection pooling maka aplikasi yang kita buat tidak perlu lagi buka tutup keneksi secara langsung kedatabase. Tetapi jika aplikasi membutuhkan koneksi ke database, maka aplikasi akan mengambil object keneksi yang tidak terpakai dari poolnya. Dan setelah aplikasi selesai menggunakan object keneksi tersebut, maka aplikasi akan mengembalikan object koneksi tsb ke poolnya dan siap digunakan oleh bagian aplikasi lainnya. Ilustrasinya terlihat seperti gambar di bawah:

Object Connection yang ada dalam pool akan dimaintain oleh container (servlet container). Container yang akan menciptakan object-object connection ini jika dibutuhkan dan menjaganya dalam pool.

Nah bagaimana teknis penggunaannya? apakah berbeda dengan membuka koneksi biasa?  Jawabannya tidak berbeda jauh, yang berubah hanya bagian kode program untuk menciptakan object Connection. Kalo sebelumnya object Connectionnya diciptakan dengan mumbuka koneksi langsung ke database, nah kalo menggunkan connection pooling kita mengambil object coonection dari datasource.

Berikut ini adalah class DBUtil.java yang bisa digunakan untuk mengambil connection dari datasource. Bagi anda yang sudah melihat Video Tutorial CD#3 tinggal mengubah sedikit class ini menjadi :

public class DBUtil {
private Connection conn = null;
public DBUtil() {
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/dvdstore");
conn = ds.getConnection();
} catch (Exception ex) {
}
}

public Connection getConn() {
return this.conn;
}

public void closeConn() {
if (this.conn != null) {
try {
this.conn.close();
} catch (SQLException ex) {
Logger.getLogger(DBUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}

Selanjutnya ubahlah file context.xml yang berada dalam folder Configuration File menjadi:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/e-shop">
    <Resource auth="Container" 
              driverClassName="com.mysql.jdbc.Driver" 
              maxActive="100" 
              maxIdle="30" 
              maxWait="-1" 
              name="jdbc/dvdstore" 
              type="javax.sql.DataSource" 
              url="jdbc:mysql://localhost:3306/dvdstore"
              username="root" 
              password=""/>
</Context>

build project anda dan coba jalankan lagi aplikasinya..