25
Implementasi sistem merupakan tahap dimana rancangan yang telah dibuat dapat diterapkan. Tujuannya untuk melakukan uji coba pada aplikasi dan sebagai sarana pengolahan data dan penyajian informasi yang akan digunakan dalam proses pengambilan keputusan.
Maka selanjutnya yang akan dilakukan adalah
pengimplementasian atau penerapan sistem. 4.1.1. Konfigurasi web.xml Spring MVC
Web.xml merupakan deployment descriptor, yaitu
dokumen xml standar untuk aplikasi Java EE yang
didalamnya dideskripsikan isi dari .war yang akan dibangun. Web.xml adalah file pertama yang akan
dijalankan, berikut potongan web.xml untuk aplikasi ini
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>sipus</display-name> <context-param>
<param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext-business.xml /WEB-INF/applicationContext-security.xml </param-value> </context-param> <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param>
Selanjutnya bisa menggunakan spring untuk
Injection of Control(IOC) seperti yang dijelaskan pada
pengertian spring pada bab II, IOC adalah mekanisme
memanggil sebuah objek tetapi tanpa inisialisasi,
seperti pada kelas Tbuser, programmer hanya perlu
membuat spring service seperti potongan kode berikut
ini :
Method pada spring service, di implementasikan
pada kelas UserDetailServiceImpl seperti pada kode
berikut ini :
Transaction management dengan menggunakan spring service berbeda dengan service yang dibuat menggunakan JDBC, Spring service tidak perlu mengelola transaksi secara manual dengan memulai
transaksi seperti commit dan rollback.
public interface TbmuserDao extends GenericDao<Tbmuser, Long> { public Boolean login(Tbmuser users);
public Tbmuser loadByUsernameAndPassWithNewSession(Tbmuser users);
public Boolean loginWithNewSession(Tbmuser users); public Tbmuser loadByUsernameAndPass(Tbmuser users); public Boolean isExist(Tbmuser users);
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService { @Transactional(readOnly = true)
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
Session session = HibernateUtil.getSessionFactory().openSession(); Tbmuser users = (Tbmuser) session.createCriteria(Tbmuser.class)
.add(Restrictions.eq("userId", username)).setMaxResults(1) .uniqueResult();
System.out.println("username = " + username + " users = " + users); session.disconnect();
Transaction management pada spring service
dilakukan dengan transparan, artinya programmer
tidak perlu tahu detail spring service menangani
transaksi, programmer hanya perlu tahu bahwa method
pada spring service ditandai dengan @Service untuk
menandai kelas ini adalah spring service dan
@Transactional akan memulai transaksi ketika masuk ke method.
4.1.2. Konfigurasi Hibernate framework
Untuk menggunakan hibernate pada program
pertama-tama lakukan konfigurasi seperti pada
potongan kode berikut :
Ini adalah konfigurasi driver connection yang
menggunakan portgresql, konfigurasi letak dari
basisdata, dialect sql yang menggunakan postgres
serta konfigurasi username dan password basidata.
Selanjutnya buat kelas yang memetakan tabel
yang ada pada basis data, seperti pada kelas murid.java yang merupakan pemetaan dari tabel murid. Berikut potongan kode program untuk kelas murid.java :
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/sipus</property> <property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">root123</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
...
private Long idMurid;
private String nama; @Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idmurid", insertable = false, unique = true, nullable = false) public Long getIdMurid() {
return idMurid;
}
public void setId(Long idMurid) {
this.idMurid = idMurid;
}
@Column(name = "nama", nullable = false, length = 255) public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
} ...
• @id adalah untuk menentukan kunci utama dari
tabel
• @Column adalah untuk memberikan nama dan
konfigurasi lain pada tabel.
• @ManyToOne dan @JoinColumn adalah untuk
menentukan hubungan antar tabel.
Kelebihan dari menggunakan hibernate
framework seperti ini adalah lebih mudah untuk
melakukan CRUD(Create, READ, Update, DELETE)
karena bisa tidak menggunakan bahasa SQL. Untuk
menyimpan data cukup dengan menggunakan method
setter seperti potongan kode berikut ini :
4.1.3. Halaman login
Setelah aplikasi di jalankan dari web server, aplikasi akan mengecek file konfigurasi pada web.xml
yang ada di folder web/WEB-INF/web.xml, didalam
file tersebut ada konfigurasi yang menjelaskan file apa
yang pertama dijalankan, berikut potongan
konfigurasinya :
Aplikasi akan menjalankan file login.jsp,
selanjutnya user akan diberikan halaman login seperti pada gambar 4.1.
<welcome-file-list>
<welcome-file>login.jsp</welcome-file> </welcome-file-list>
murid.setId(idMurid.getValue().trim());
murid.setNama(nama.getValue());
Gambar 4.1
Untuk membuat fasilitas login, aplikasi
menggunakan
dintegrasikan dengan menggunakan
menggunakan spring security tersebut harus
menambahkan konfigurasi di web.xml agar dikenali oleh aplikasi, b
org.springframework.web.filter.DelegatingFilterPr
oxy adalah sebuah servlet filter yang membolehkan
spring security
dan meyakinkan aplikasi tersebut
<filter> <filter-org.springframework.web.filter.DelegatingFilterProxy </filter </filter> <filter-mapping <url-pattern </filter-mapping
Gambar 4.1 Halaman login
Untuk membuat fasilitas login, aplikasi
menggunakan Spring Security Framework
dintegrasikan dengan menggunakan zkoss
menggunakan spring security tersebut harus
menambahkan konfigurasi di web.xml agar dikenali oleh aplikasi, berikut kode yang ditambahkan :
org.springframework.web.filter.DelegatingFilterPr
adalah sebuah servlet filter yang membolehkan
spring security membungkus semua request
dan meyakinkan aplikasi tersebut aman dengan
-name>springSecurityFilterChain</filter-name -class>
org.springframework.web.filter.DelegatingFilterProxy filter-class>
mapping>
-name>springSecurityFilterChain</filter-name pattern>/*</url-pattern>
mapping>
Untuk membuat fasilitas login, aplikasi
Spring Security Framework yang
zkoss. Untuk
menggunakan spring security tersebut harus
menambahkan konfigurasi di web.xml agar dikenali
org.springframework.web.filter.DelegatingFilterPr
adalah sebuah servlet filter yang membolehkan
request aplikasi aman dengan
name> org.springframework.web.filter.DelegatingFilterProxy
sewajarnya. Berikut adalah potongan kode halaman login.
Aksi dari form akan mengarahkan pada URL
j_spring_security_check. URL ini merupakan URL
standard dari spring security framework untuk
menangani validasi benar tidaknya user dan password
user.
4.1.4. Pengaturan hak akses
Untuk membuat dan mengatur hak akses dilakukan oleh administrator melalui form jenis pengguna dan form pengguna. Form jenis pengguna adalah untuk membuat kelompok pengguna seperti pada gambar 4.2.
<form name="f" action="<c:url value='j_spring_security_check'/>"
method="POST">
<p>
<label>Username</label> <input type='text' class="textinput"
name='j_username'
value='<c:if test="${not empty param.login_error}">
<c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>' /> </p>
<p>
<label>Password</label>
<input type='password' class="textinput" name='j_password'> </p>
<p>
<label> </label>
<input type="checkbox" class="checkbox"
name="_spring_security_remember_me">Biarkan Saya Tetap Masuk </p>
<p><input type="submit" value="login" class="btnlogin"></p> </form>
Gambar 4.2 Halaman
Seperti yang dilihat pada gambar 4.2, menu select yang menggunakan
adalah untuk mengatur apa saja yang dapat dilakukan oleh pengguna ter
akses yang terdiri dari
delete).
Button
menambahkan menu baru yang telah dibuat disimpan di dalam
form untuk menambahkan menu baru dapat dilihat pada gambar 4.3 berikut ini :
Gambar
Halaman pengaturan kelompok pengguna
Seperti yang dilihat pada gambar 4.2, menu
select yang menggunakan checkbox disebelah kanan
adalah untuk mengatur apa saja yang dapat dilakukan oleh pengguna terhadap menu yang akan diberikan
yang terdiri dari CRUD(Create,read, update, dan
Button “Rubah struktur menu” adalah untuk menambahkan menu baru yang telah dibuat
disimpan di dalam tabel menu yang ada di database
form untuk menambahkan menu baru dapat dilihat pada gambar 4.3 berikut ini :
Gambar 4.3 Halaman Tree men
pengaturan kelompok pengguna Seperti yang dilihat pada gambar 4.2, menu
disebelah kanan adalah untuk mengatur apa saja yang dapat dilakukan adap menu yang akan diberikan
CRUD(Create,read, update, dan
adalah untuk menambahkan menu baru yang telah dibuat dan
database, form untuk menambahkan menu baru dapat dilihat
Setelah bisa membuat berikut ini :
Gambar
Pada form ini bisa memilih kelompok pengguna yang telah dibuat sebelumnya, dengan menggunakan
combobox
yang ada.
bisa dilihat pada gambar 4.5 berikut ini :
Gambar
Setelah kelompok pengguna dibuat, selanjutnya bisa membuat data pengguna seperti pada gambar 4.4 berikut ini :
Gambar 4.4 Halaman pendataan pengguna Pada form ini bisa memilih kelompok pengguna yang telah dibuat sebelumnya, dengan menggunakan akan ditampilkan daftar kelompok pengguna yang ada. Tampilan daftar pengguna yang telah dibuat bisa dilihat pada gambar 4.5 berikut ini :
Gambar 4.5 Halaman tampilan daftar pengguna kelompok pengguna dibuat, selanjutnya
pengguna seperti pada gambar 4.4
pendataan pengguna Pada form ini bisa memilih kelompok pengguna yang telah dibuat sebelumnya, dengan menggunakan akan ditampilkan daftar kelompok pengguna Tampilan daftar pengguna yang telah dibuat
4.1.5. Halaman
Halaman data murid digunakan untuk
memasukan dan
tampilan untuk halaman data mur gambar 4.6
File murid.zul yang merupakan halaman input data murid menjalankan
serperti pada potongan berikut ini :
Ketika menekan tombol tambah murid, halaman ini memanggil
MuridAction.java, berikut potongan pemanggilan dari murid.zul ke MuridAction.java :
<
width
<toolbar
Halaman data murid
Halaman data murid digunakan untuk
memasukan dan menampilkan semua murid yang ada, tampilan untuk halaman data murid dapat dilihat pada
6 berikut ini :
Gambar 4.6 Input data murid
File murid.zul yang merupakan halaman input
data murid menjalankan controller MuridAction
pada potongan berikut ini :
Ketika menekan tombol tambah murid, halaman
ini memanggil method onAdd yang ada pada controller
MuridAction.java, berikut potongan pemanggilan dari murid.zul ke MuridAction.java :
<window border="none" id="window"
apply="sipus.action.master.MuridAction"
width="100%"
height="100%">
toolbar>
<toolbarbutton
tooltiptext="Tambah data" forward="onClick=onAdd"
label="Tambah Data" image="/img/new.gif"
</toolbarbutton>
Halaman data murid digunakan untuk
menampilkan semua murid yang ada, id dapat dilihat pada
Input data murid
File murid.zul yang merupakan halaman input MuridAction.java,
Ketika menekan tombol tambah murid, halaman
controller
MuridAction.java, berikut potongan pemanggilan dari
"sipus.action.master.MuridAction"
"onClick=onAdd" id="add"
Potongan kode
method onAdd
Setelah itu
dimasukan dapat dilihat pada gambar 4.8
Untuk menampilkan data seperti pada gambar 4.8 menggunakan
didalam kelas meng implement
zkoss. Berikut potongan kode program untuk menampilkan data
public
otongan kode MuridAction.java yang merupakan
onAdd :
Setelah itu tampilan data murid yang sudah an dapat dilihat pada gambar 4.8 :
Gambar 4.7 Tampilan data murid
Untuk menampilkan data seperti pada gambar
menggunakan kelas MuridRenderer yang ada
didalam kelas MuridAction, kelas MuridRenderer ini
meng implement RowRender yang ada pada framework
Berikut potongan kode program untuk menampilkan data :
void onAdd(Event event) throws Exception { init(new Murid());
addWindow.setVisible(true);
addWindow.onModal();
}
yang merupakan
tampilan data murid yang sudah
Tampilan data murid Untuk menampilkan data seperti pada gambar
ada , kelas MuridRenderer ini
Untuk mencetak barcode yang ada pada data
murid, digunakan kelas BarcodeCommon.java yang ada
pada package sipus.common, berikut adalah potongan
kode untuk membuat gambar barcode :
Selanjutnya kelas BarcodeCommon bisa
digunakan pada kelas apapun, seperti pada potongan kode kelas MuridAction.java:
class MuridRenderer implements RowRenderer { @Override
public void render(final Row arg0, Object arg1) throws Exception { final Murid murid = (Murid) arg1;
BarcodeCommon.generateBarcodeImage(murid.getKode(),"30","true").setParent(arg0);
RevisiHelper.createNewRevisi(Murid.class,murid,murid.getNama()).setParent(arg0); new Label(murid.getTanggalMasuk() == null ? ""
: Common.dateFormat3.format(murid.getTanggalMasuk())).setParent(arg0); String alamat = (murid.getAlamat()
+ " "+ (murid.getKelurahan() == null ? "" : murid
.getKelurahan().getNama()) + " RT " + murid.getRt() + " RW " + murid.getRw() + " "
+ (murid.getKecamatan() == null ? "" : murid .getKecamatan().getNama()) + " "
+ (murid.getKota() == null ? "" : murid.getKota() .getNama()) + " " + (murid.getPropinsi() == null ? ""
: murid.getPropinsi().getNama())); new Label(alamat).setParent(arg0);
new Label(murid.getKelas().getNama()).setParent(arg0);
public static Image generateBarcodeImage(String code, String sizeY, String showText){ Image barcode = new Image();
try {
AImage aImage = new AImage("barcode", BarcodeCommon .generateBarcode(code, sizeY, showText)); barcode.setContent(aImage); } catch (WrongValueException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return barcode; } ....
BarcodeCommon.generateBarcodeImage(murid.getKode(),"30","true").setParent(arg0); ....
4.1.6. Halaman Penilaian
Halaman ini digunakan untuk memasukan data penilaian, penilaian di masukan berdasarkan periode yang telah disediakan pada
mengambil data murid yang ada di tabel murid, aplikasi ini menggunakan
zkoss. Untuk halaman input penilai gambar 4.8
Gambar Agar bisa
aplikasi ini, buat kelas AmbilDataMuridBanbox.java, dalam kelas ini meng extend banbox yang ada pada framework zkoss
membuat kelas AmbilDataMuridBanbox.java :
public class AmbilDataMuridBanbox private static final
1138226537107417869L; private Grid grid;
private EventListener public AmbilDataMuridBanbox (){ super(); this.addEventListener(Events. @Override public void
Murid murid = (Murid) HibernateUtil. Halaman Penilaian
Halaman ini digunakan untuk memasukan data , penilaian di masukan berdasarkan periode
yang telah disediakan pada combobox, selain itu untuk
mengambil data murid yang ada di tabel murid, aplikasi
ini menggunakan banbox yang tersedia di framework
Untuk halaman input penilaian dapat dilihat pad 8 berikut ini :
Gambar 4.8 Input data nilai
Agar bisa menggunakan banbox seperti pada
aplikasi ini, buat kelas AmbilDataMuridBanbox.java, dalam kelas ini meng extend banbox yang ada pada framework zkoss, berikut potongan kode untuk membuat kelas AmbilDataMuridBanbox.java :
AmbilDataMuridBanbox extends Bandbox{
final long serialVersionUID = -
1138226537107417869L; ;
EventListener eventListener; AmbilDataMuridBanbox (){
.addEventListener(Events.ON_OK, newEventListener() {
void onEvent(Event arg0) throws Exception { Murid murid = (Murid) HibernateUtil.currentSession()
.createCriteria(Murid.class)
Halaman ini digunakan untuk memasukan data , penilaian di masukan berdasarkan periode , selain itu untuk mengambil data murid yang ada di tabel murid, aplikasi
framework
an dapat dilihat pada
seperti pada aplikasi ini, buat kelas AmbilDataMuridBanbox.java, dalam kelas ini meng extend banbox yang ada pada berikut potongan kode untuk
Kelas digunakan unt PenilaianAction.
menggunakan banbox
Selanjutnya data penilaian bisa ditampilkan seperti pada gambar 4.1
Gambar 4. private AmbilDataMuridBanbox row = new Row();
row.setStyle("border:0px;background: transparent;" row.setParent(rows); row.appendChild( row.appendChild( murid.setValue(penilaian.getMurid() == : penilaian.getMurid().getKode() + penilaian.getMurid().getNama()); murid.setWidth(
Kelas AmbilDataMuridBanbox. java
digunakan untuk kelas yang lain seperti pada controller PenilaianAction. java, berikut potongan kode untuk menggunakan banbox.
Selanjutnya data penilaian bisa ditampilkan pada gambar 4.10 berikut ini :
Gambar 4.9 Tampilan data penilaian AmbilDataMuridBanbox murid;
Row();
"border:0px;background: transparent;");
row.setParent(rows);
row.appendChild(new Label("Nama Murid"));
row.appendChild(murid = new AmbilDataMuridBanbox()); .setValue(penilaian.getMurid() == null ? ""
: penilaian.getMurid().getKode() + "-"+ penilaian.getMurid().getNama());
.setWidth("95%");
java dapat
uk kelas yang lain seperti pada controller de untuk