Anda di halaman 1dari 23

IMPLEMENTASI RMI

Disusun Oleh :

Neneng Maida 117006207
Agustian 117006229











JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS SILIWANGI
TASIKMALAYA
2014



RMI ( Remote Method Invocation )
1. Definisi
RMI adalah sebuah tekhnik pemanggilan method remote yang lebih secara umum
lebih baik dari RPC. RMI menggunakan paradigma pemrograman berorientasi obyek.
RMI memungkinkan kita untuk mengirim obyek sebagai parameter dari remote
method. Dengan dibolehkannya program Java memanggil method pada remote obyek,
RMI membuat pengguna dapat mengembangkan aplikasi Java yang terdistribusi pada
jaringan.
2. Tujuan
1. Menyediakan fasilitas bagi programmer untuk dapat mendistribusikan objek yang
digunakan pada beberapa proses yang berbeda.
2. Dapat berjalan dalam satu mesin ataupun di beberapa mesin yang terhubung
dengan jaringan.
3. Aplikasi Obyek Terdistribusi
Aplikasi RMI sering kali terdiri dari dua program terpisah yaitu server dan client.
1. Aplikasi Server
Membuat beberapa remote objek
Menyediakan referensi terhadap objek-objek tersebut sehingga dapat diakses
Menunggu RMI client merequest server
2. Aplikasi Client
Mendapatkan referensi remote ke satu atau lebih objek remote di server
Menjalankan method dari objek tersebut
Meminta pemanggilan ke beberapa remote objek berbasarkan referensi yang
diterimanya.
RMI menyediakan mekanisme dimana server dan client berkomunikasi dan
memberikan informasi secara timbal balik, aplikasi ini disebut aplikasi obyek
terdistribusi.
4. Cara Kerja RMI
Dalam model ini, sebuah proses memanggil method dari objek yang terletak pada
suatu host/computer remote. Dalam paradigma ini, penyedia layanan mendaftarkan
dirinya dengan server direktori pada jaringan. Proses yang menginginkan suatu
layanan mengontak server direktori saat runtime, jika layanan tersedia, maka referensi
ke layanan akan diberikan. Dengan menggunakan referensi ini, proses dapat
berinteraksi dengan layanan tsb. Paradigma ini ekstensi penting dari paradigma RPC.
Perbedaannya adalah objek yang memberikan layanan didaftarkan (diregister) ke
suatu layanan direktori global, sehingga memungkinkan untuk ditemukan dan diakses
oleh aplikasi yang meminta layanan tersebut.

Implementasi
Sudah dari dulu NetBeans mendukung fitur JPA, dan sejak versi 6.8 sekarang ini,
NetBeans telah mendukung penuh JPA 2 dan JEE6. Dan sekarang kita akan belajar
membuat aplikasi CRUD menggunakan JPA 2 dibantu oleh NetBeans IDE
Membuat Database
JPA tidak tergantung dengan database, apapun databasenya, anda tetap bisa mempraktekan
tutorial ini. Disini saya menggunakan database MySQL. Jadi sebelum membuat aplikasi,
kita buat dulu databasenya. Untuk membuat database di MySQL caranya cukup sederhana,
tinggal gunakan perintah :
create database crud;
Artinya sekarang saya sudah membuat database dengan nama crud.
Membuat Project
Karena kita akan membuat aplikasi Desktop, jadi kita buat sebuah project Java Application
di NetBeans, caranya lewat menu : File -> New Project, lalu pada bagian Categories pilih
Java dan bagian Project pilih Java Application. Setelah itu beri nama projectnya, dan
jangan lupa untuk otomatis membuat Main Class seperti yang terlihat pada gambar
dibawah ini :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Membuat Persistence Unit
Sebelum membuat aplikasi, pertama kita harus membuat Persistence Unit. Caranya pilih
File -> New File, lalu pada bagian Categories pilih Persistence dan pada bagian File Types
pilih Persistence Unit. Berinama persistence unitnya, dan pilih Persistence Librarynya
menjadi Eclipse Link (JPA2), JANGAN PILIH HIBERNATE, karena library hibernate
yang ada di NetBeans 6.8 hanya mendukung JPA1 :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Pada bagian Database Connection, klik comboboxnya lalu pilih Create New Database
Connection untuk membuat koneksi baru. Koneksi yang akan dibuat adalah koneksi ke
database yang sebelumnya kita buat :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Setelah selesai, maka sekarang pada project akan ada file persistence.xml pada package
META-INF. Artinya kita berhasil membuat Persistence Unit.
Membuat Entity
Berbeda jika menggunakan JDBC, sebuah tabel pada JPA bernama Entitas, jadi Entitas
adalah sebuah Tabel. Dan itu merupakan class Java Beans, yaitu class yang hanya
berisikan Getter dan Setter saja.
Perlu diingat bahwa sebuah class Entity harus memiliki Primary Key, jika class Entity
tidak memiliki Primary Key, maka akan terjadi Error.
Untuk membuat sebuah class Entity caranya lewat menu File -> New File. Lalu pada
bagian Categories pilih Persistence dan pada bagian File Types pilih Entity Class. Kali ini
saya membuat sebuah entitas Mahasiswa dan untuk primary key-nya saya gunakan String :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Setelah itu buat propertynya beserta getter dan setternya, sehingga class Entity nya seperti
terlihat pada code dibawah ini :
package khannedy.crudjpa;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Mahasiswa implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_mahasiswa")
private String id;

@Column(name = "nama_mahasiswa", length = 45)
private String nama;

@Column(name = "alamat_mahasiswa", length = 500)
private String alamat;

public String getAlamat() {
return alamat;
}

public void setAlamat(String alamat) {
this.alamat = alamat;
}

public String getNama() {
return nama;
}

public void setNama(String nama) {
this.nama = nama;
}

public String getId() {
return id;
}

public void setId(String 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 Mahasiswa)) {
return false;
}
Mahasiswa other = (Mahasiswa) 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.crudjpa.Mahasiswa[id=" + id + "]";
}
}

Sebuah class entity harus ditandai dengan annotation @Entity, dan untuk primary key-nya
ditandai dengan @Id. Sedangkan untuk @Column itu tandanya bahwa property itu adalah
sebuah column di tabel database. namun defaultnya walaupun tidak ditandai dengan
@Column, setiap property pasti dijadikan column di tabel database.
Membuat Persistence Utilities
Setelah membuat class Entity, sekarang saatnya kita buat class PersistenceUtilities, class
ini digunakan untuk membuat EntityManagerFactory, hal ini agar kita dapat memanggil
EntityManagerFactory di class manapun dan kapanpun kita mau. Untuk membuat class
caranya pilih File -> New File. lalu pada bagian Categories pilih Java dan pada bagian File
Types pilih Java Class. Berinama class itu dengan nama PersistenceUtilities atau terserah
anda, setelah itu buat kode seperti yang terlihat dibawah ini :
package khannedy.crudjpa;

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

public class PersistenceUtilities {

private final static EntityManagerFactory entityManagerFactory;

static {
// membuat EntityManagerFactory
// parameter harus sama dengan nama Persistence Unit
// yang ada pada file persistence.xml
entityManagerFactory = Persistence.createEntityManagerFactory("crud-
jpaPU");
}

public static EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
}


Untuk membuat EntityManagerFactory, kita bisa menggunakan class Persistence dan
metode createEntityManagerFactory, tapi perlu diingat bahwa parameter yang digunakan
adalah nama Persistence Unit yang sebelumnya telah dibuat pada file persistence.xml.
Membuat Tampilan Antarmuka
Sekarang saatnya membaut tampilan antarmuka menggunakan Java Swing. Untuk
membuat Form di NetBeans sangat mudah karena NetBeans mendukung pembuatan
Antarmuka secara Visual. Pilih File -> New File, lalu pada bagian Categories pilih Swing
GUI Form dan pada bagian File Types pilih JFrame Form. Sekarang kita bisa membuat
tampilan antarmuka aplikasi secara visual :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Mudah sekali untuk membuat tampilan antarmuka, kita hanya cukup melakukan DRAG
dan DROP komponen yang ada di pallete ke form yang ada pada Editor. Saya anggap anda
sudah mengerti bagaimana cara membaut tampilan antarmuka mengugnakan NetBeans.
Jadi sekarang silahkan anda buat tampilan antarmuka seperti pada gambar dibawah ini :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Agar saat pengkodean tidak membingungkan, jadi sekarang kita samakan persepsi dulu .
Silahkan ubah nama-nama komponen seperti pada gambar dibawah ini :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Sepertinya tidak perlu dijelaskan, karena gambar sudah bisa merepresentasikan komponen
yang mana yang bernama seperti itu
Membuat Table Model Mahasiswa
Karena kita menggunakan sebuah Tabel pada tampilan antarmukanya, jadi mau tidak kamu
kita buat sebuah TableModel agar lebih memudahkan saat menambah data ke Tabel dan
mengambil data dari Tabel. Untuk membuat TableModelMahasiswa, caranya seperti
membuat kelas biasa, tidak ada yang berbeda.
package khannedy.crudjpa;

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

public class TableModelMahasiswa extends AbstractTableModel {

private List list;

// mengubah seluruh data
public void setData(List list) {
this.list = list;
// memberi peringatan ke tabel bahwa data berubah
fireTableDataChanged();
}

// menambah data mahasiswa
public void add(Mahasiswa mahasiswa) {
list.add(mahasiswa);
// memberi peringatan ke tabel bahwa data bertambah
fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
}

// mengubah data mahasiswa
public void edit(int index, Mahasiswa mahasiswa) {
list.set(index, mahasiswa);
// memberi peringatan ke tabel bahwa data berubah pada index ke-?
fireTableRowsUpdated(index, index);
}

// menghapus data mahasiswa
public void delete(int index) {
list.remove(index);
// memberi peringatan ke tabel bahwa data dihapus pada index ke-?
fireTableRowsDeleted(index, index);
}

// mendapatkan mahasiswa pada baris ke-?
public Mahasiswa get(int row) {
return list.get(row);
}

// mendapatkan total baris
public int getRowCount() {
return list.size();
}

// mendapatkan total kolom
public int getColumnCount() {
return 3;
}

// mendapatkan nilai pada baris ke-? dan kolom ke-?
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return list.get(rowIndex).getId();
case 1:
return list.get(rowIndex).getNama();
case 2:
return list.get(rowIndex).getAlamat();
default:
return null;
}
}

@Override
// mendapatkan nama kolom pada index ke-?
public String getColumnName(int column) {
switch (column) {
case 0:
return "Nim";
case 1:
return "Nama";
case 2:
return "Alamat";
default:
return null;
}
}
}


Menambahkan Tabel Model ke Antarmuka
Setelah membuat TableModelMahasiswa jangan lupa untuk mengubah TableModel tabel
Mahasiswa menjadi TableModelMahasiswa, caranya. Buka file Form yang tadi dibuat,
setelah itu masuk ke bagian Source, lalu ubah konstruktornya yang sebelumnya seperti ini :
Menambah Aksi Tombol
public class Form extends javax.swing.JFrame {

/** Creates new form Form */
public Form() {
initComponents();
}
menjadi seperti ini :
public class Form extends javax.swing.JFrame {

private TableModelMahasiswa tableModelMahasiswa;

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

tableModelMahasiswa = new TableModelMahasiswa();
tabelMahasiswa.setModel(tableModelMahasiswa);
}


Sekarang saatnya menambahkan aksi-aksi untuk tombol TAMBAH, UBAH, SEGARKAN
dan HAPUS. Untuk menambahkan aksi ke tombol caranya, klik kanan tombolnya lalu pilih
Events -> Action -> actionPerformed. Setelah itu maka kita akan masuk ke kode. Untuk
tombol tambah, berikan perintah seperti dibawah ini :

private void tombolTambahActionPerformed(java.awt.event.ActionEvent evt) {
// membuat entitymanager
EntityManager manager =
PersistenceUtilities.getEntityManagerFactory().createEntityManager();
try {
// memulai transaksi
manager.getTransaction().begin();

// buat mahasiswa
Mahasiswa mahasiswa = new Mahasiswa();
mahasiswa.setId(textNIM.getText());
mahasiswa.setNama(textNama.getText());
mahasiswa.setAlamat(textAlamat.getText());

// bersihkan form
textNIM.setText("");
textNama.setText("");
textAlamat.setText("");

// simpah mahasiswa ke database
manager.persist(mahasiswa);
// tambahkan ke tabel
tableModelMahasiswa.add(mahasiswa);

// commit transaksi
manager.getTransaction().commit();
} catch (Throwable t) {
// perlihatkan error
t.printStackTrace();
// rollback transaksi
manager.getTransaction().rollback();
} finally {
// tutup entitymanager
manager.close();
}
}


Untuk tombol Ubah gunakan perintah seperti ini :

private void tombolUbahActionPerformed(java.awt.event.ActionEvent evt) {

// dapatkan baris tabel yang terseleksi
int baris = tabelMahasiswa.getSelectedRow();

// cek apakah baris tabel terseleksi
if (baris < 0) {
// jika tidak maka batalkan aksi ubah
return;
}

// membuat entitymanager
EntityManager manager =
PersistenceUtilities.getEntityManagerFactory().createEntityManager();
try {
// memulai transaksi
manager.getTransaction().begin();

// dapatkan mahasiswa dari tabel
Mahasiswa mahasiswa = tableModelMahasiswa.get(baris);

// ubah data mahasiswa
mahasiswa.setId(textNIM.getText());
mahasiswa.setNama(textNama.getText());
mahasiswa.setAlamat(textAlamat.getText());

// simpah perubahan mahasiswa ke database
manager.merge(mahasiswa);
// ubah mahasiswa di tabel
tableModelMahasiswa.edit(baris, mahasiswa);

// commit transaksi
manager.getTransaction().commit();
} catch (Throwable t) {
// perlihatkan error
t.printStackTrace();
// rollback transaksi
manager.getTransaction().rollback();
} finally {
// tutup entitymanager
manager.close();
}
}


Untuk tombol Hapus gunakan perintah seperti ini :
private void tombolHapusActionPerformed(java.awt.event.ActionEvent evt) {
// dapatkan baris tabel yang terseleksi
int baris = tabelMahasiswa.getSelectedRow();

// cek apakah baris tabel terseleksi
if (baris < 0) {
// jika tidak maka batalkan aksi hapus
return;
}

// konfirmasi penghapusan
if (JOptionPane.showConfirmDialog(this, "Anda Yakin Akan Menghapus Data
Mahasiswa?", "Hapus Mahasiswa", JOptionPane.OK_CANCEL_OPTION) ==
JOptionPane.CANCEL_OPTION) {
// batalkan aksi hapus
return;
}

// membuat entitymanager
EntityManager manager =
PersistenceUtilities.getEntityManagerFactory().createEntityManager();
try {
// memulai transaksi
manager.getTransaction().begin();

// dapatkan mahasiswa dari tabel
Mahasiswa mahasiswa = tableModelMahasiswa.get(baris);
// hapus data mahasiswa di database
manager.remove(manager.merge(mahasiswa));
// hapus data mahasiswa di tabel
tableModelMahasiswa.delete(baris);

// commit transaksi
manager.getTransaction().commit();
} catch (Throwable t) {
// perlihatkan error
t.printStackTrace();
// rollback transaksi
manager.getTransaction().rollback();
} finally {
// tutup entitymanager
manager.close();
}
}

Untuk tombol Segarkan gunakan perintah seperti ini :

private void tombolSegarkanActionPerformed(java.awt.event.ActionEvent evt) {
// membuat entitymanager
EntityManager manager =
PersistenceUtilities.getEntityManagerFactory().createEntityManager();
try {
// muat seluruh data mahasiswa
List list = manager.createQuery("select a from Mahasiswa a order by
a.id").getResultList();
// ubah seluruh data mahasiswa di tabel
tableModelMahasiswa.setData(list);
} catch (Throwable t) {
// perlihatkan error
t.printStackTrace();
} finally {
// tutup entitymanager
manager.close();
}
}

Selesai menambah Aksi
Menambah Aksi Seleksi Pada Tabel
Agar lebih interaktif, saat user menseleksi satu buah baris ke Tabel, maka otomatis form
akan menampilkan data yang ada ditabel. Tapi untuk menambahkannya jangan
menggunakan aksi OnMouseClick, kenapa? Karena kadang mengubah baris tidak
menggunakan mouse, bisa saja menggunakan tombol arrow di keyboard. Sehingga
sekarang kita ubah lagi konstruktur Form menjadi :

public class Form extends javax.swing.JFrame {

private TableModelMahasiswa tableModelMahasiswa;

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

tableModelMahasiswa = new TableModelMahasiswa();
tabelMahasiswa.setModel(tableModelMahasiswa);

// tambahkan aksi seleksi baris
tabelMahasiswa.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {
// dapatkan baris yang terseleksi
int baris = tabelMahasiswa.getSelectedRow();
// cek apakah baris terseleksi
if (baris != -1) {
// jika terseleksi, tampilkan data di form
// dapatkan mahasiswa dari tabel
Mahasiswa mahasiswa = tableModelMahasiswa.get(baris);
// tampilkan data di form
textNIM.setText(mahasiswa.getId());
textNama.setText(mahasiswa.getNama());
textAlamat.setText(mahasiswa.getAlamat());
}
}
});
}


Memuat Data Mahasiswa
Saat pertama kali form muncul, sehingga kita ubah lagi isi konstruktornya menjadi seperti
dibawah ini :
public class Form extends javax.swing.JFrame {

private TableModelMahasiswa tableModelMahasiswa;

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

tableModelMahasiswa = new TableModelMahasiswa();
tabelMahasiswa.setModel(tableModelMahasiswa);

// tambahkan aksi seleksi baris
tabelMahasiswa.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {
// dapatkan baris yang terseleksi
int baris = tabelMahasiswa.getSelectedRow();
// cek apakah baris terseleksi
if (baris != -1) {
// jika terseleksi, tampilkan data di form
// dapatkan mahasiswa dari tabel
Mahasiswa mahasiswa = tableModelMahasiswa.get(baris);
// tampilkan data di form
textNIM.setText(mahasiswa.getId());
textNama.setText(mahasiswa.getNama());
textAlamat.setText(mahasiswa.getAlamat());
}
}
});

// panggil aksi tombol segarkan
tombolSegarkanActionPerformed(null);
}

Lho kok cuma segitu? yup, tidak perlu kita buat ulang kodenya, tinggal kita panggil saja
aksi tombol SEGARKAN, karena memang perintahnya sama, jadi gak perlu diketik ulang.
Tahap Akhir
Sekarang, Aplikasi Telah selesai, tinggal dijalankan lewat class Main, jadi sekarang kita
ubah isi class Main agar menjalankan Form yang tadi kita buat :
package khannedy.crudjpa;

import javax.swing.SwingUtilities;

public class Main {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

public void run() {
Form form = new Form();
form.setVisible(true);
}
});
}
}

Selesai, sekarang tinggal jalankan projectnya, caranya klik kanan projectnya lalu pilih Run,
dan aplikasi akan berjalan
Tampilan eror :
Run :
[EL Info]: 2010-03-25 23:10:04.617--ServerSession(21450309)--EclipseLink, version:
Eclipse Persistence Services - 2.0.1.v20100213-r6600
[EL Severe]: 2010-03-25 23:10:04.635--ServerSession(21450309)--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.
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException:
Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600):
org.eclipse.persistence.exceptions.DatabaseException
at
org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(
DatabaseException.java:82)
at
org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:
267)
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupI
mpl.java:397)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityMa
nagerFactoryImpl.java:151)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(
EntityManagerFactoryImpl.java:207)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(Entit
yManagerFactoryImpl.java:195)
at khannedy.crudjpa.Form.tombolSegarkanActionPerformed(Form.java:314)
at khannedy.crudjpa.Form.(Form.java:54)
at khannedy.crudjpa.Main$1.run(Main.java:12)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at
org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.
java:162)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource
(DatabaseSessionImpl.java:584)
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.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFa
ctoryProvider.java:228)
Caused by: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-
r6600): org.eclipse.persistence.exceptions.DatabaseException
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupI
mpl.java:369)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityMa
nagerFactoryImpl.java:151)
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(
EntityManagerFactoryImpl.java:207)
at
org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(
DatabaseException.java:82)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(Entit
yManagerFactoryImpl.java:195)
at
org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:
267)
at khannedy.crudjpa.Form.tombolSegarkanActionPerformed(Form.java:314)
at
org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at khannedy.crudjpa.Form.(Form.java:54)
at khannedy.crudjpa.Main$1.run(Main.java:12)
at
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.
java:162)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource
(DatabaseSessionImpl.java:584)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFa
ctoryProvider.java:228)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupI
mpl.java:369)
... 14 more
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at
khannedy.crudjpa.TableModelMahasiswa.getRowCount(TableModelMahasiswa.java:45)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

at javax.swing.JTable.getRowCount(JTable.java:2630)
at javax.swing.plaf.basic.BasicTableUI.createTableSize(BasicTableUI.java:1646)
at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(BasicTableUI.java:1687)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1634)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769)
at java.awt.Container.layout(Container.java:1421)
at java.awt.Container.doLayout(Container.java:1410)
at java.awt.Container.validateTree(Container.java:1507)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validateTree(Container.java:1513)
at java.awt.Container.validate(Container.java:1480)
at java.awt.Window.dispatchEventImpl(Window.java:2476)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
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.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD STOPPED (total time: 12 seconds)

Tampilan error itu karena Library MySQL Driver nya belum di includkan ke Project.
Tinggal klik kanan bagian Libraries pada Project, lalu pilih Add Library, setelah itu pilih
MySQL JDBC Driver :

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8
Sekarang coba jalankan ulang. Dan pasti BERHASIL
Tampilan Aplikasi

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8

Membuat Aplikasi CRUD Dengan JPA 2 dan NetBeans IDE 6.8

Anda mungkin juga menyukai