Archive

Archive for the ‘Java NetBeans’ Category

Fasilitas JTextField

Begini ceritanya…Seperti yang saya bilang tadi kalo Swing itu gak native, so untuk memberi fasilitas seperti popup menu kita harus secara manual memberinya ke JTextField, berbeda dengan SWT yang sangat native, secara default semua fasilitas OS yang kita gunakan pasti dapat dimanfaatkan oleh SWT, salah satunya fasilitas popup menu TextField :

jtextfield

Gimana jadinya?

Solusi Standar?

Saat ini JTextComponent dalam Swing telah memiliki fasilitas cut, copy, paste, selectAll. Jadi kesimpulannya kita gak perlu cape-cape membuat kode tentang Clipboard. Yang kita butuhkan hanyalah ketekunan untuk membuat JpopupMenu untuk JTextFiled, lalu memberi JMenuItem yang diperlukan seperti Copy, Cut, Paste.

Jadi kesimpulannya untuk memberi fasilitas tersebut kita bisa menggunakan metode dibawah ini :

Untuk mengcopy text yang terseleksi :

textField.copy();

Untuk mengcut text yang terseleksi :

textField.cut();

Untuk mengpaste text yang ada di clipboard :

textField.paste();

Untuk menseksi seluruh teks yang ada di JTextField :

textField.selectAll();

Dan untuk memfasilitasi Undo Redo kita harus menggunakan class UndoManager :

UndoManager manager = new UndoManager();

Lalu kita berikan JTextField yang kita buat dengan fasilitas undo redo :

textField.getDocument().addUndoableEditListener(new UndoableEditListener() {

public void undoableEditHappened(UndoableEditEvent e) {

manager.addEdit(e.getEdit());

}

});

Setelah itu untuk menjalankan aksi Undo kita gunakan script dibawah ini :

try{

manager.undo();

}catch(CannotUndoException t){

}

Dan untuk menjalankan aksi Redo kita gunakan script ini :

try{

manager.redo();

}catch(CannotRedoException e){

}

Dan selesai !

Solusi Ngawur?

?

Wah sebenarnya sich gak ada solusi ngawurnya. Karena solusinya sama seperti solusi standar, hanya saja kita perlu mensiasati ato memberi sedikit trix dalam pembuatan JPopupMenu-nya. Kenapa? Karena dalam sebuah form kita tak mungkin menggunakan satu JTextField, setidaknya kita pasti menggunakan lebih dari satu JTextField. Bayangkan jika setiap JTextField, kita harus membuat JPopupMenu, capedeh…

Salah satu trixnya adalah kita harus membuat metode static yang berisikan seluruh script yang ada dalam solusi standar diatas, sehingga untuk menambah fasilitas seperti diatas kita hanya perlu memanggil metode static yang kita gunakan.

Ini contoh metode static nya, sebenarnya anda bisa membuat menggunakan style anda sendiri :

public static final void setFasilitasNative(final JTextField textField) {

final UndoManager manager = new UndoManager();

textField.getDocument().addUndoableEditListener(new UndoableEditListener() {

public void undoableEditHappened(UndoableEditEvent e) {

manager.addEdit(e.getEdit());

}

});

final JPopupMenu menu = new JPopupMenu();

textField.setComponentPopupMenu(menu);

final JMenuItem itemCopy = new JMenuItem(“Copy”);

itemCopy.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.copy();

}

});

menu.add(itemCopy);

final JMenuItem itemCut = new JMenuItem(“Cut”);

itemCut.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.cut();

}

});

menu.add(itemCut);

final JMenuItem itemPaste = new JMenuItem(“Paste”);

itemPaste.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.paste();

}

});

menu.add(itemPaste);

menu.addSeparator();

final JMenuItem itemUndo = new JMenuItem(“Undo”);

itemUndo.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

manager.undo();

} catch (CannotUndoException t) {

}

}

});

menu.add(itemUndo);

final JMenuItem itemRedo = new JMenuItem(“Redo”);

itemRedo.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

manager.redo();

} catch (CannotRedoException t) {

}

}

});

menu.add(itemRedo);

}

Simple aja deh, masalahnya saya males buat script panjang-panjang. Tapi bukan berarti anda harus menggunakan script yang saya buat. Anda bisa membuat sendiri atau merubah script saya diatas.

Untuk memberi fasilitas ke JTextField menggunakan metode static diatas, cukup gunakan script seperti dibawah ini :

setFasilitasNative(textEmail);

setFasilitasNative(textKantor);

setFasilitasNative(textNama);

setFasilitasNative(textRumah);

setFasilitasNative(textTelephone);

Ini contohnya :

Kesimpulan

Jika anda akan membuat sebuah kode yang sekiranya diulang-ulang, lebih baik anda menggunakan metode static agar dapat digunakan beberapa kali, dari pada anda membuat ulang kode tersebut..

Categories: Java NetBeans

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Mau melakukan migrasi dari pure JDBC ke JPA?

Mungkin suatu saat kita akan melakukan migrasi dari aplikasi yang menggunakan JDBC ke JPA, namun yang menjadi permasalahan adalah, tabel-tabel sudah ada di database, dan tidak mungkin membuat ulang tabel-tablenya. Kalaupun mau, paling kita harus membuat entity-entity class nya secara manual, dan mapping nya harus sama dengan tabel yang ada di database. No problem selama banyak tabelnya dibawah 20 :D , tapi bagaiman jika total tabel nya ada 50? :( #capekkayaknya

Jika kita menggunakan NetBeans IDE, ini bukan masalah :D Kenapa? Karena NetBeans punya fitur otomatis pembuat class entity dari tabel yang ada di database, jadi kita tidak perlu membuatnya secara manual :D Keren kan!

Bagaimana caranya? Gampang Kok :D

Membuat Project Baru

Untuk membuat project baru di NetBeans caranya cukup mudah, tingal lewat menu File -> New Project, maka tinggal kita pilih mau membuat project apa :D

Saya anggap anda telah membuat sebuah project baru, atau sebenarnya project yang lama pun tidak mengapa :D

Membuat Entity Class Otomatis

Untuk membuat class-class entity secara otomatis, caranya lewat menu File -> New File , atau Ctrl + N. Setelah itu akan muncul dialog, dan pada bagian Categories, pilih Persistence dan pada bagian File Types, pilih Entity Classes from Database :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next untuk melanjutkan, maka akan keluar dialog untuk Database Table, pilihlah koneksi yang akan digunakan pada bagian Database Connection, jika belum tersedia silahkan membuat dulu koneksinya :

Tambahkan tabel-tabel yang sekiranya akan dibuatkan sebuah entity class, misal saya tambahkan semua tabelnya :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next, dan sekarang saatnya di mapping dengan entity class. Ubahlah bagian Class Name dengan nama kelas yang kita inginkan :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

dan jika terdapat warning “The project does not have persistence unit…“, maka klik tombol Create Persistence Unit :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Beri nama persistence unitnya lalu klik tombol Create untuk membuat persistence unit tersebut. Dan sekarang tidak ada warning lagi :D :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next dan sekarang kita harus melakukan konfigurasi relasi antar entitas. Ubah Assosiation Fetch dan Collection Type sesuai dengan yang kita inginkan, misal saya menggunakan fetch dan java.util.List :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Finish, dan tunggu sampai selesai :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Sekarang semua Tabel sudah menjadi Entity Class,

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

mudah bukan, bahkan kita tidak perlu coding sedikitpun :D

source : eecchhoo.wordpress.com

Categories: Java NetBeans

Membuat Database di MySQL

Pada tutorial kali ini kita menggunakan JPA, jadi sebenarnya databasenya gak harus MySQL, tinggal kita sesuaikan dengan yang kita gunakan. Tapi dikarenakan saya menggunakan MySQL, jadi pada artikel ini saya sebutkan databasenya adalah MySQL. Dan sebelum membuat aplikasi, terlebih dahulu kita harus memiliki sebuah database, caranya dengan perintah :

create database crud_mvc;

Artinya kita telah memiliki database dengan nama crud_mvc di mysql.

Membuat Project di NetBeans

Karena kita akan membuat aplikasi berbasis Java Swing yang artinya aplikasi kita berbasis Desktop, maka project yang perlu dibuat adalah project Java Application. File -> New Project, setelah itu pada bagian Categories pilih Java dan pada bagian Types pilih Java Application. Setelah itu next, dan beri nama project yang dibuat dengan nama yang anda inginkan :D dan jangan lupa untuk otomatis membuat kelas Main-nya :


Membuat Persistence Unit

Karena kita menggunakan JPA, jadi pertama kali kita harus membuat Persistence Unit, dimana ini merupakan file konfigurasi untuk JPA yang kita gunakan. Cara membuatnya lewat menu File -> New File, setelah itu pada bagian Categories pilih Persistence dan pada bagian Types pilih Persistence Unit. Setelah itu masukan nama persistence unit yang akan digunakan. Dan jangan lupa menambahkan Database Connection ke database yang sebelumnya dibuat :

Membuat Entity Class

Setelah membuat persistence unit, saatnya membuat Entity Class dimana entityclassnya ini kita anggap sebagai Model, yaitu class yang merepresentasikan tabel dalam database. Cara membuatnya lewat menu File -> New File, setelah itu pada bagian Categories pilih Persistence dan pada bagian lainnya pilih Entity Class.

Beri nama kelas entitas tersebut sesuai dengan nama entitas yang kita inginkan, misal pada artikel ini saya akan membuat entitas Person, dimana Person akan memiliki id, nama depan dan nama belakang :

package khannedy.crudmvc.entity;

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.Table;

/**
 *
 * @author echo
 */
@Entity
@Table(name = "table_person")
public class Person implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "first_name", length = 45, nullable = false)
    private String firstName;

    @Column(name = "last_name", length = 45)
    private String lastName;

    public String getFirstName() {
	return firstName;
    }

    public void setFirstName(String firstName) {
	this.firstName = firstName;
    }

    public String getLastName() {
	return lastName;
    }

    public void setLastName(String lastName) {
	this.lastName = lastName;
    }

    public Long getId() {
	return id;
    }

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

    @Override
    public int hashCode() {
	int hash = 0;
	hash += (id != null ? id.hashCode() : 0);
	return hash;
    }

    @Override
    public boolean equals(Object object) {
	// TODO: Warning - this method won't work in the case the id fields are not set
	if (!(object instanceof Person)) {
	    return false;
	}
	Person other = (Person) object;
	if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
	    return false;
	}
	return true;
    }

    @Override
    public String toString() {
	return "khannedy.crudmvc.entity.Person[id=" + id + "]";
    }
}

Membuat TableModel

Setelah membuat entitas, kita buatkan tablemodelnya sebagai model di JTable nanti :

package khannedy.crudmvc.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author echo
 */
public class TableModelPerson extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    private List list = new ArrayList();

    public void updateAll(Collection
 persons) {
	list.clear();
	list.addAll(persons);
	fireTableDataChanged();
    }

    public void insert(Person person) {
	list.add(person);
	fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
    }

    public void delete(int index) {
	list.remove(index);
	fireTableRowsDeleted(index, index);
    }

    public void update(int index, Person person) {
	list.set(index, person);
	fireTableRowsUpdated(index, index);
    }

    public Person select(int index) {
	return list.get(index);
    }

    public int getRowCount() {
	return list.size();
    }

    public int getColumnCount() {
	return 3;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
	switch (columnIndex) {
	    case 0:
		return list.get(rowIndex).getId();
	    case 1:
		return list.get(rowIndex).getFirstName();
	    case 2:
		return list.get(rowIndex).getLastName();
	    default:
		return null;
	}
    }

    @Override
    public String getColumnName(int column) {
	switch (column) {
	    case 0:
		return "Id";
	    case 1:
		return "First Name";
	    case 2:
		return "Last Name";
	    default:
		return null;
	}
    }
}

Membuat PersistenceHelper

Setelah membuat kelas entitas, saatnya membuat kelas yang digunakan sebagai utilitas untuk membuat koneksi JPA atau bernama EntityManagerFactory. Karena kelas ini bertugas sebagai kelas bantuan, jadi kita namakan kelas ini dengan PersistenceHelper. Jadi ini bisa dibilang salah satu kelas-kelas helper dalam konsep MVC Ruby on Rails :

package khannedy.crudmvc.helper;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author echo
 */
public class PersistenceHelper {

    private static final EntityManagerFactory factory;

    static {
	factory = Persistence.createEntityManagerFactory("crud-mvcPU");
    }

    public static EntityManagerFactory getFactory() {
	return factory;
    }
}

Jangan lupa untuk menggunakan nama persistence unit yang tadi sebelumnya dibuat saat memanggil metode Persistence#createEntityManagerFactory(nama).

Membuat Tampilan Aplikasi (View)

Setelah membuat Helper dan Model (Entity), sekarang saatnya membuat View nya, yaitu tampilan aplikasi yang digunakan untuk menampilkan data person, misal saya buat seperti yang terlihat dibawah ini :

Dan nama-nama variabel komponennya seperti yang terlihat pada gambar inspector dibawah ini :

Setelah itu, tambahkan TableModelperson yang tadi kita buat ke View ini, sehingga konstruktornya akan berubah seperti pada gambar dibawah ini :

public class PersonView extends javax.swing.JFrame {

    private TableModelPerson tableModelPerson;

    /** Creates new form PersonView */
    public PersonView() {
        initComponents();

	tableModelPerson = new TableModelPerson();
	tablePerson.setModel(tableModelPerson);
    }

Setelah itu jangan lupa untuk menambahkan Getter untuk setiap komponen yang memang diperlukan dalam proses bisnis logicnya, disini yang diperlukan adalah textFirstName, textLastName, tablePerson dan tableModelPerson.

Dimana dibutuhkannya? Jawabannya adalah di Controller. Nanti Anda akan tau kenapa perlu metode Getter di View setelah anda membuat Controller :D

public class PersonView extends javax.swing.JFrame {

    private TableModelPerson tableModelPerson;

    /** Creates new form PersonView */
    public PersonView() {
	initComponents();

	tableModelPerson = new TableModelPerson();
	tablePerson.setModel(tableModelPerson);
    }

    public JButton getButtonDelete() {
	return buttonDelete;
    }

    public JButton getButtonInsert() {
	return buttonInsert;
    }

    public JButton getButtonUpdate() {
	return buttonUpdate;
    }

    public TableModelPerson getTableModelPerson() {
	return tableModelPerson;
    }

    public JTable getTablePerson() {
	return tablePerson;
    }

    public JTextField getTextFirstName() {
	return textFirstName;
    }

    public JTextField getTextLastName() {
	return textLastName;
    }

Sekarang tinggal kita beri interaksi terhadap View nya, namun sebelum memberi interaksinya, kita buat dulu Controller nya :D

Membuat Controller

Sebelum membuat Controller, perlu diperhatikan, bahwa Controller ini yang bertugas melakukan proses, baik itu proses manipulasi data, pengubahan data atau apapun yang memang tidak harus terlihat. Biasanya dalam controller ini berisikan proses manipulasi database jika memang aplikasinya berbasiskan database.

Biasanya Controller menyesuaikan dengan View, misal disini View memiliki tombol INSERT, UPDATE dan DELETE, artinya Controller harus dapat menangani masalah INSERT, UPDATE dan DELETE tersebut. Apa hanya itu? TIDAK! Terdapat sebuah tabel pada VIew yang sebelumnya kita buat, dan yang jadi pertanyaan bagaimana data yang ada dalam database bisa terlihat di table? Artinya kita harus membuat si Controller dapat menangani proses SELECT.

Dari sini kita dapat kesimpulan jika Controller harus dapat melakukan proses INSERT, UPDATE, DELETE dan SELECT :D

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package khannedy.crudmvc.controller;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import khannedy.crudmvc.helper.PersistenceHelper;
import khannedy.crudmvc.model.Person;
import khannedy.crudmvc.view.PersonView;

/**
 *
 * @author echo
 */
public class PersonController {

    private PersonView view;

    public PersonController(PersonView view) {
	this.view = view;
    }

    public void insert() {
	EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
	manager.getTransaction().begin();
	try {

	    // buat person
	    Person person = new Person();
	    // ubah data person
	    person.setFirstName(view.getTextFirstName().getText());
	    person.setLastName(view.getTextLastName().getText());
	    // simpan ke database
	    manager.persist(person);
	    // simpah ke tablemodel
	    view.getTableModelPerson().insert(person);

	    manager.getTransaction().commit();
	} catch (Throwable t) {
	    t.printStackTrace();
	    manager.getTransaction().rollback();
	} finally {
	    manager.close();
	}
    }

    public void update() {

	// dapatkan baris yang terseleksi
	int index = view.getTablePerson().getSelectedRow();
	// jika tidak ada
	if (index == -1) {
	    // maka proses dibatalkan
	    return;
	}

	EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
	manager.getTransaction().begin();
	try {

	    // mendapatkan person dari tablemodel
	    Person person = view.getTableModelPerson().select(index);
	    // ubah data person
	    person.setFirstName(view.getTextFirstName().getText());
	    person.setLastName(view.getTextLastName().getText());
	    // update person ke database
	    manager.merge(person);
	    // update person ke tablemodel
	    view.getTableModelPerson().update(index, person);

	    manager.getTransaction().commit();
	} catch (Throwable t) {
	    t.printStackTrace();
	    manager.getTransaction().rollback();
	} finally {
	    manager.close();
	}
    }

    public void delete() {

	// dapatkan baris yang terseleksi
	int index = view.getTablePerson().getSelectedRow();
	// jika tidak ada
	if (index == -1) {
	    // maka proses dibatalkan
	    return;
	}

	EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
	manager.getTransaction().begin();
	try {

	    // mendapatkan person dari tablemodel
	    Person person = view.getTableModelPerson().select(index);
	    // menghapus person dari database
	    manager.remove(manager.merge(person));
	    // menghapus person dari tablemodel
	    view.getTableModelPerson().delete(index);

	    manager.getTransaction().commit();
	} catch (Throwable t) {
	    t.printStackTrace();
	    manager.getTransaction().rollback();
	} finally {
	    manager.close();
	}
    }

    public void select() {
	EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
	try {
	    @SuppressWarnings("unchecked")
	    List
 list = manager.createQuery("select a from Person a").getResultList();
	    view.getTableModelPerson().updateAll(list);
	} finally {
	    manager.close();
	}
    }
}

Setelah membuat Controller, saatnya mengintegrasikan antara View dan Controller :D

Integrasi View dan Controller

Setelah membuat Controller sekarang saatnya menambahkan COntroller ke View, jadi konstruktornya berubah lagi menjadi seperti dibawah ini :

public class PersonView extends javax.swing.JFrame {

    private TableModelPerson tableModelPerson;

    private PersonController controller;

    /** Creates new form PersonView */
    public PersonView() {
	initComponents();

	tableModelPerson = new TableModelPerson();
	tablePerson.setModel(tableModelPerson);

	controller = new PersonController(this);
    }

Setelah itu berikan aksi untuk tombol INSERT, UPDATE dan DELETE. Caranya dengan mengklik kanan tombol tersebut lalu pilih Events -> Action -> actionPerformed, maka akan otomatis dibuatkan metode untuk aktinya. Untuk tombol INSERT isi metodenya seperti pada kode dibawah ini :

    private void buttonInsertActionPerformed(java.awt.event.ActionEvent evt) {
	// TODO add your handling code here:
	controller.insert();
    }

Dan untuk aksi tombol UPDATE :

    private void buttonUpdateActionPerformed(java.awt.event.ActionEvent evt) {
	// TODO add your handling code here:
	controller.update();
    }

Terakhir untuk aksi tombol DELETE :

    private void buttonDeleteActionPerformed(java.awt.event.ActionEvent evt) {
	// TODO add your handling code here:
	controller.delete();
    }

Trus kapan memanggil aksi SELECT di Controller? Pastinya saat aplikasi muncul, jadi perintah controller.select() itu dipanggil di konstruktor View, sehingga konstruktornya seperti yang terlihat dibawah ini :

public class PersonView extends javax.swing.JFrame {

    private TableModelPerson tableModelPerson;

    private PersonController controller;

    /** Creates new form PersonView */
    public PersonView() {
	initComponents();

	tableModelPerson = new TableModelPerson();
	tablePerson.setModel(tableModelPerson);

	controller = new PersonController(this);
	controller.select();
    }

Mengubah Main Class

Setelah semuanya selesai, sekarang saatnya mengubah Main classnya. Ubah agar main class tersebut menjalankan aplikasi PersonView yang kita buat :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package khannedy.crudmvc;

import javax.swing.SwingUtilities;
import khannedy.crudmvc.view.PersonView;

/**
 *
 * @author echo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

	    public void run() {
		new PersonView().setVisible(true);
	    }
	});
    }

}

Sekarang selesai semuanya :D

Menjalankan Aplikasi

Sekarang coba jalankan aplikasi, caranya klik kanan projectnya terus pilih Run.

Tapi kok error?

run:
[EL Info]: 2010-04-11 06:24:29.076--ServerSession(6530849)--EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
[EL Severe]: 2010-04-11 06:24:29.095--ServerSession(6530849)--Local Exception Stack:
Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.mysql.jdbc.Driver] not found.
        at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.mysql.jdbc.Driver] not found.
)
        at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
        at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
        at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
        at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(        at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:397)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
EntityManagerFactoryProvider.java:228)
        at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
        at khannedy.crudmvc.controller.PersonController.select(PersonController.java:115)
        at khannedy.crudmvc.controller.PersonController.select(PersonController.java:115)
        at khannedy.crudmvc.view.PersonView.(PersonView.java:37)
        at khannedy.crudmvc.view.PersonView.(PersonView.java:37)
        at khannedy.crudmvc.Main$1.run(Main.java:24)
        at khannedy.crudmvc.Main$1.run(Main.java:24)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.mysql.jdbc.Driver] not found.
        at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82)
        at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
        at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
        at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
        at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
        at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
        ... 14 more
BUILD STOPPED (total time: 9 seconds)

Tenang, tenang, tidak usah khawatir :D kesalahan seperti biasa, cuma driver MySQL nya belum dimasukkan ke project. Tinggal masukan aja ke library Project, dan selesai masalahnya :D

Dan saat di-running kembali maka aplikasinya akan seperti dibawah ini :

Kekurangan Fitur

Selesai,,,, Tapi sebenarnya ada beberapa fitur yang kurang. “itu sih menurut saya”, yaitu :

  1. Harusnya saat di klik INSERT, setelah data sukses dimasukkan ke database dan tabel, harusnya data di form jadi clear.
  2. Harusnya saat baris tabel terseleksi, data langsung ada di form, jadi kalo mau Update gampang :D

So, gimana cara bikinnya? Kita lanjutkan di artikel berikutnya :D

Download SourceCode

Silahkan download sourcecodenya –> disini <–

source : eecchhoo.wordpress.com

Categories: Java NetBeans
Follow

Get every new post delivered to your Inbox.