Jawaban Latihan Soal TAS Java
Nih, ak kasih jawabannya.., sory baru sekarang dikasi, kemarin-kemarin belum sempat membuat.. Maklum banyak urusan yang harus dikerjain terlebih dahulu..
Langsung aja yah.., filenya diunduh (didownload) dari sini……….—>> file jawaban <<—
Untuk pembahasan sory banget saya tidak bisa menyertakan karena banyak sekali yang harus dibahas per nomornya.. Saran saya, coba belajar sendiri, atau tanyakan lewat Yahoo Messenger.. Lewat media apapun sebenarnya juga boleh, asal waktunya ada dan saya pas sedang tidak ada kerjaan.. hehe!
Jika ingin menghubungi, bisa lihat di bagian kanan, di sana ada bagian “Contact”, anda bisa melihat alamat-alamat yang bisa digunakan untuk menghubungi saya secara online..
Selamat menempuh ujian akhir, semoga berhasil..!!
Abstract Factory Pattern di Java
Setelah menghilang dari peredaran beberapa hari ini, sekarang saya post deh tentang design pattern yang satu ini.. Buat anda yang belum begitu paham atau sama sekali tidak tahu tentang design pattern, bisa langsung ke alamat ini http://en.wikipedia.org/wiki/Design_pattern
Nah, sekarang ini yang akan saya bahas adalah Abstract Factory di Java.. Saya tidak tahu apakah pattern ini juga digunakan di bahasa pemrograman lainnya.., tetapi jelas ini sangat penting di Java..
Lalu apa keunggulannya dan kapan pattern ini digunakan? Saya mengambil langsung dari sumber yang terpercaya, yaitu sebuah buku tentang design pattern (lupa pengarangnya siapa)
.. Berikut ulasannya :
- Creates families of related or dependent objects like Kit.
- Provides a class library of products, exposing interface not implementation.
- Needs to isolate concrete classes from their super classes.
- A system needs independent of how its products are created, composed, and represented.
- Try to enforce a constraint.
- An alternative to Facade to hide platform-specific classes
- Easily extensible to a system or a family
package com.pattern;
public interface Local
{
void loadData();
}
package com.pattern;
public interface Remote extends Local
{
void connectRemote(String url);
}
package com.pattern;
public class LocalImplementation implements Local
{
public void loadData()
{
System.out.println("Load data from local area");
}
}
package com.pattern;
public class RemoteImplementation implements Remote
{
public void connectRemote(String url)
{
System.out.println("Connect to a remote site");
}
public void loadData()
{
System.out.println("Load data from a remote area");
}
}
package com.connection.factory;
import com.pattern.Local;
import com.pattern.Remote;
public interface ConnectionFactory
{
Local getLocalConnection();
Remote getRemoteConnection();
}
package com.connection.factory;
import com.pattern.Local;
import com.pattern.Remote;
import com.pattern.LocalImplementation;
import com.pattern.RemoteImplementation;
public class DataManager implements ConnectionFactory
{
public Local getLocalConnection()
{
return new LocalImplementation();
}
public Remote getRemoteConnection()
{
return new RemoteImplementation();
}
public void load(String mode)
{
if(mode.equalsIgnoreCase("local"))
{
Local l = getLocalConnection();
l.loadData();
}
else
{
Remote r = getRemoteConnection();
r.connectRemote("http://wilbertjava.wordpress.com");
r.loadData();
}
}
}
package com.main;
import com.connection.factory.DataManager;
import java.util.Scanner;
import java.util.Random;
public class Main
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
DataManager dm = new DataManager();
System.out.println("Data Connection\n======================================");
System.out.print("Enter a valid connection (local or remote) : ");
dm.load(s.nextLine());
Thread t = new Thread(new Routine());
t.start();
}
private static final class Routine implements Runnable
{
public void run()
{
Random r = new Random();
System.out.println("Please Wait... :::");
for(int i = 0; i <= 100; i += r.nextInt(20))
{
try
{
System.out.print("=====");
Thread.sleep(r.nextInt(500));
}
catch(InterruptedException e) {}
}
System.out.println(" : 100%!\nData Loaded");
}
}
}
Object Collection Dengan ArrayList
Langsung saja yah, tidak tahu kenapa hari-hari ini jadi sering nulis blog, ya supaya reader semua ga kecewa deh kalau masuk blog saya…
Kan biasa banyak keluhan tuh, “Koq blognya ga diupdate mas?”
Ok, hari ini saya akan nulis tentang Object Collection.. Apa sih Object Collection itu? Ini adalah struktur data yang lagi gencar dipakai karena kemudahannya dibandingkan dengan array.. Kalau kita belum terbiasa menggunakan Collection, pasti kita sendiri akan kesusahan untuk memahaminya.. Ya kuncinya jika anda ingin menguasai ini, banyaklah berlatih menggunakan Collection ini..
“Lalu apa bedanya dengan array? Katanya lebih mudah?”
Ya, perbedaannya antara lain, array adalah suatu mekanisme struktur data yang digunakan untuk menyimpan nilai (bisa primitive data type atau reference data type yang biasa kita sebut objek) yang sama typenya.. Sehingga jika anda membuat suatu array bertipe String, seluruh indeksnya hanya bisa berisi String, tidak bisa berisi tipe data lain…
Berbeda dengan Collection, mekanisme struktur data ini memungkinkan kita untuk mengisi satu atau lebih tipe data di dalamnya.. Misal di indeks pertama kita mengisi data bertipe integer, di indeks yang lainnya bisa juga data yang bertipe boolean dsb..
Berikut contoh code yang saya buat, semoga memberi kita pemahaman lebih tentang Collection..
public class HandPhone
{
private String number;
private String simCard;
private String merk;
public String getNumber()
{
return number;
}
public void setNumber(String number)
{
this.number = number;
}
public String getSimCard()
{
return simCard;
}
public void setSimCard(String simCard)
{
this.simCard = simCard;
}
public String getMerk()
{
return merk;
}
public void setMerk(String merk)
{
this.merk = merk;
}
}
class N70 extends HandPhone
{
private int jmlFitur;
public int getJmlFitur()
{
return jmlFitur;
}
public void setJmlFitur(int jmlFitur)
{
this.jmlFitur = jmlFitur;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args) throws IOException
{
List<N70> hp = new ArrayList<N70>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for(int i = 1; i <= 3; i++)
{
N70 za = new N70();
System.out.print("Merk HP : ");
za.setMerk(reader.readLine());
System.out.print("No HP : ");
za.setNumber(reader.readLine());
System.out.print("Sim Card : ");
za.setSimCard(reader.readLine());
System.out.print("Jumlah Fitur : ");
za.setJmlFitur(Integer.parseInt(reader.readLine()));
hp.add(za);
}
for(N70 h : hp)
System.out.println(h.getMerk() + " " + h.getNumber() + " " + h.getSimCard() + " " + h.getJmlFitur());
}
}
Sekian dari saya untuk hari ini tentang Object Collection.. Mungkin ada yang mau request tutorial? Kalau tidak ada ya saya tidak nulis nih… hehehe!! Happy Programming with Java..
Latihan Progress Bar Dengan Swing
Bagi anda yang mungkin baru pertama kali merasakan pemrograman GUI di Java, kebingungan itu pasti ada.. Salah satu contoh nyatanya adalah ini, “mengapa di Java tidak ada Timer seperti di .NET ya” ?
Jawabannya tentu saja ada..!
Tetapi ada beberapa opsi dimana kita bisa membuat “Timer” dengan Threading, atau menggunakan kelas yang sudah dibuat oleh Java dan khusus untuk penggunaan Timer..
Dalam tutorial singkat ini, saya menggunakan Threading supaya kita mengerti dasar tentang bagaimana Timer itu bisa dibuat..
Singkat saja, ini code nya :
import java.awt.event.KeyEvent;
/*
* Main.java
*
* Created on January 7, 2008, 2:26 AM
*/
/**
*
* @author Wilbert
*/
public class Main extends javax.swing.JFrame {
/** Creates new form Main */
public Main() {
initComponents();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-425)/2, (screenSize.height-307)/2, 425, 307);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Latihan Progress");
setResizable(false);
jLabel1.setText("Nama");
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField1KeyPressed(evt);
}
});
jButton1.setText("Proses");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jButton1KeyPressed(evt);
}
});
jButton2.setText("Keluar");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jButton2KeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(62, 62, 62)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 247, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(111, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButton1, jButton2});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(49, 49, 49)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap(232, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jButton1, jButton2});
pack();
}// </editor-fold>
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
newForm();
}
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
newForm();
}
private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
newForm();
}
private void jButton2KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
private void newForm() {
// TODO add your handling code here:
Progress p = new Progress();
p.setVisible(true);
p.setNama(jTextField1.getText());
p.setTitle("Processing");
jTextField1.setEditable(false);
jButton1.setEnabled(false);
}
public void closeProg()
{
jTextField1.setEditable(true);
jButton1.setEnabled(true);
}
}
import java.awt.event.KeyEvent;
import java.util.Random;
/*
* Progress.java
*
* Created on January 7, 2008, 2:32 AM
*/
/**
*
* @author Wilbert
*/
public class Progress extends javax.swing.JFrame {
private String nama;
/** Creates new form Progress */
public Progress() {
initComponents();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-300)/2, (screenSize.height-120)/2, 300, 120);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jProgressBar1 = new javax.swing.JProgressBar();
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowActivated(java.awt.event.WindowEvent evt) {
formWindowActivated(evt);
}
});
jLabel1.setText("Completed : 0%");
jButton1.setText("Cancel");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jButton1KeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(86, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
Thread t = new Thread(new pro());
t.start();
}
private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
this.dispose();
}
/**
* @param args the command line arguments
*/
private class pro implements Runnable
{
public void run()
{
Random rnd = new Random();
while(jProgressBar1.getValue() != 100)
{
jProgressBar1.setValue(jProgressBar1.getValue() + rnd.nextInt(10));
jLabel1.setText("Completed : " + jProgressBar1.getValue() + "%");
setTitle("Completed : " + jProgressBar1.getValue() + "%");
try
{
Thread.sleep(300);
}
catch(InterruptedException ex){}
}
jLabel2.setText("Nama anda : " + nama);
setTitle("Done");
}
}
public void setNama(String nama)
{
this.nama = nama;
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JProgressBar jProgressBar1;
// End of variables declaration
}
Project Inventory System
Sebenarnya nih project sudah lama sekali, cuma karena saya migrasi blog dari blogger, maka project ini baru sempat saya publish ke publik sekarang..
Ya ini sih project kecil-kecilan, lebih tepatnya ini adalah project pribadi dimana saya ingin melatih sejauh mana saya sudah mengerti implementasi Java SE jika kita ingin membuat sebuah program GUI yang handal.. Studi kasusnya mudah saja, saya terinspirasi sewaktu saya pergi ke sebuah rental persewaan, saya melihat sistem yang dibuat memakai VB (asumsi saya), dan kesannya wah banget…
Setelah itu barulah saya memutuskan untuk membuat project ini.. Teknologi yang saya gunakan (termasuk database servernya) adalah sebagai berikut :
- Swing
- Derby
Hanya 2 teknologi itu yang saya gunakan, saya mendevelop menggunakan NetBeans 6.0 (waktu itu)… Ok, saya kasih list sedikit untuk source nya, nanti project nya saya upload saja supaya bisa diunduh langsung, karena agak banyak sih source nya..
Ini table model ku.. :
package org.wilbert;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
/**
*
* @author root(Wilbert)
*/
public class TableModel extends AbstractTableModel
{
private String[] columnNames = new String[0];
private Vector<String[]> dataRows = new Vector<String[]>();
public void setResultSet(ResultSet results)
{
try
{
ResultSetMetaData metadata = results.getMetaData();
int columns = metadata.getColumnCount();
columnNames = new String[columns];
for(int i = 0; i < columns; i++)
columnNames[i] = metadata.getColumnLabel(i+1);
dataRows.clear();
String[] rowData;
while(results.next())
{
rowData = new String[columns];
for(int i = 0; i < columns; i++)
rowData[i] = results.getString(i+1);
dataRows.addElement(rowData);
}
fireTableChanged(null);
}
catch (SQLException sqle)
{
System.err.println(sqle);
}
}
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return dataRows == null ? 0 : dataRows.size();
}
public String getValueAt(int row, int column)
{
return dataRows.elementAt(row)[column];
}
@Override
public String getColumnName(int column)
{
return columnNames[column] == null ? "No Name" : columnNames[column];
}
}
File project nya bisa diunduh dari sini :
Saya tidak menyertakan file .sql nya, supaya anda juga ikut berpartisipasi membuat database nya.. hehehe
Dan anda bebas mau menggunakan mysql atau derby sebagai database server.. Defaultnya adalah Derby, tetapi jika anda ingin menggantinya, maka anda juga harus mengganti source program..
Happy programming!
Templating Dengan Facelets
Setelah beberapa hari tidak ngeblog (sibuk neh.., hehehe!!), jadi kangen untuk nulis sesuatu di sini.. Hmm.., nulis tentang Facelets aja deh! Kenapa saya tulis tentang ini? Begini ceritanya, Facelets ini adalah renderer view yang sekarang sedang gencar dioprek karena kemudahannya dibandingkan dengan renderer view lainnya seperti tapestry..
Facelets adalah perpaduan dengan JSF di sisi presentation. Biasa JSF memakai JSP sebagai renderer view.., tetapi kebanyakan orang lebih memilih untuk tidak menggunakan JSP dan beralih ke renderer view lainnya seperti Facelets ini.. Ya bisa dikatakan itu masalah kemudahan saja..
Ok, langsung aja ke coding yah kalau begitu? Oya, saya lupa menerangkan ini, Facelets meminta kita untuk membuat file .xhtml sehingga jangan kaget dan bingung mengapa semua yang saya buat adalah .xhtml
Pertama, saya membuat konfigurasi-konfigurasi terlebih dahulu melalui faces-config.xml dan web.xml
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<view-handler>
com.sun.facelets.FaceletViewHandler
</view-handler>
</application>
<managed-bean>
<managed-bean-name>Mahasiswa</managed-bean-name>
<managed-bean-class>org.ukdw.Mahasiswa</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>judul</property-name>
<value>Data Mahasiswa UKDW</value>
</managed-property>
</managed-bean>
</faces-config>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Use Documents Saved as *.xhtml -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<!-- Special Debug Output for Development -->
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.j</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Setelah selesai membuat konfigurasi, saya membuat Java Beans yang ditujukan hanya sekedar
menampilkan judul saja..
package org.ukdw;
/**
*
* @author Wilbert <Wilbert at http://wilbertjava.wordpress.com>
*/
public class Mahasiswa
{
protected String judul;
public String getJudul()
{
return judul;
}
public void setJudul(String judul)
{
this.judul = judul;
}
}
Dan yang terakhir, saya membuat file JSP untuk redirect ke halaman xhtml, dan berikut
adalah source code nya..
<%--
Document : index
Created on : Apr 18, 2008, 3:25:58 PM
Author : Wilbert <Wilbert at http://wilbertjava.wordpress.com>
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<jsp:forward page="index2.j"></jsp:forward>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : scratch
Created on : Apr 17, 2008, 3:22:54 PM
Author : Wilbert <Wilbert at http://wilbertjava.wordpress.com>
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title><ui:insert name="judul"></ui:insert></title>
</head>
<body>
<center>
<h2><ui:insert name="judulUtama"></ui:insert></h2>
<ui:insert name="tabel"></ui:insert><br />
<ui:insert name="register"></ui:insert>
</center>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : index
Created on : Apr 17, 2008, 3:42:23 PM
Author : Wilbert <Wilbert at http://wilbertjava.wordpress.com>
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<ui:composition template="/scratch.xhtml">
<ui:define name="judul">
Coba Templating Dengan Facelets
</ui:define>
<ui:define name="judulUtama">
#{Mahasiswa.judul}
</ui:define>
<ui:define name="tabel">
<h:form>
<table border="1">
<tr>
<td colspan="2"><center>Login Form</center></td>
</tr>
<tr>
<td>User Name</td><td><h:inputText id="nama" /></td>
</tr>
<tr>
<td>Password</td><td><h:inputSecret id="pass" /></td>
</tr>
<tr>
<td colspan="2"><center><h:commandButton value="Login" action="authen" /></center></td>
</tr>
</table>
</h:form>
</ui:define>
<ui:define name="register">
<a href="register.j">Daftar Baru</a>
</ui:define>
</ui:composition>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : register
Created on : Apr 18, 2008, 3:25:31 PM
Author : Wilbert <Wilbert at http://wilbertjava.wordpress.com>
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<ui:composition template="/scratch.xhtml">
<ui:define name="judul">
Coba Templating Dengan Facelets --> Register
</ui:define>
<ui:define name="judulUtama">
#{Mahasiswa.judul}
</ui:define>
<ui:define name="tabel">
<h:form>
<table border="1">
<tr>
<td colspan="2"><center>Register Form</center></td>
</tr>
<tr>
<td>User Name</td><td><h:inputText id="nama" /></td>
</tr>
<tr>
<td>Password</td><td><h:inputSecret id="pass" /></td>
</tr>
<tr>
<td>Alamat</td><td><h:inputText id="alamat" /></td>
</tr>
<tr>
<td>Hobby</td><td><h:inputText id="hobby" /></td>
</tr>
<tr>
<td colspan="2"><center><h:commandButton value="Daftar" action="daftar" /></center></td>
</tr>
</table>
</h:form>
</ui:define>
<ui:define name="register">
<a href="index2.j">Kembali</a>
</ui:define>
</ui:composition>
</html>
Satu lagi, sebelum anda ‘build’ aplikasi ini, anda harus menyertakan beberapa library
seperti berikut ini di dalam classpath :
- common-annotations.jar
- commons-beanutils.jar
- commons-collections.jar
- commons-digester.jar
- commons-logging.jar
- el-api.jar
- el-ri.jar
- jsf-api.jar
- jsf-facelets.jar
- jsf-impl.jar
Mudah bukan? Selamat mencoba templating dengan Facelets…! Catatan juga, di dalam contoh di atas, saya sudah memadukan JSF di dalamnya…
Happy Programming!!
Project Group C
Maaf nih baru selesai membuat soalnya… Nah, simple aja, satu kelompok buat sebuah program yang berguna dengan memanfaatkan apa yang sudah kalian pelajari selama ini…
Misal, program kalian bisa mensorting, atau apapun juga, yang penting berguna.. Lalu terapkan prinsip OOP yang ada, tunjukkan mana enkapsulasinya, packaging, polymorphism, inheritance, dsb..
Semakin kompleks semakin bagus.., saran saya banyaklah membaca tutorial2 yang ada di internet..
Project ini dikumpul minggu depan pada saat praktikum, sertakan soft copy dan hard copy juga!! Jangan lupa cantumkan nama anggota kelompok…!
Selamat mengerjakan…
Stateless Session Bean (Remote)
Tidak terasa bulan ini ternyata saya belum menulis satu post pun di blog saya… Wah, maklum saya sedang sakit, sekarang saja waktu saya menulis post ini, saya masih dalam keadaan yang belum 100% fit.., ya masih dalam proses pemulihan begitu ceritanya..
Simple aja, saya akan menyertakan source yang anda bisa jalankan di netbeans untuk mengoprek atau mengubah-ubah isinya.. Saya sertakan ini khusus bagi anda yang ingin belajar tentang Enterprise Java Beans.., dimana salah satu elemen dari EJB adalah Session Bean…
Mungkin pertamanya tidak mudah untuk dipahami, tetapi kalau anda sudah betul-betul memahami Distributed Computing, apalagi jika anda sudah pernah mencoba RMI, maka dipastikan anda tidak akan kesulitan memahami…
Remoting ini saya buat kecil-kecilan, hanya untuk menerapkan algoritma Sorting saja, tetapi saya buat secara remote sehingga jika ditaruh di server, bisa diakses oleh client-client yang terhubung…
Semoga anda semua senang mempelajari ini…
Saya sertakan terlebih dahulu code untuk bussiness interface dan Enterprise Bean class nya ..
package org.wilbert;
import javax.ejb.Remote;
@Remote
public interface MyRemote
{
public int[] sortWithBubble(int[] data);
public int[] sortWithExchange(int[] data);
}
package org.wilbert;
import javax.ejb.Stateless;
@Stateless
public class MyBean implements MyRemote
{
public int[] sortWithBubble(int[] data)
{
for(int i = 1; i < data.length; i++)
for(int j = data.length - 1; j >= i; j--)
if(data[j] < data[j-1])
{
int tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
}
return data;
}
public int[] sortWithExchange(int[] data)
{
for (int i = 0; i < data.length; i++)
for(int j = (i+1); j < data.length; j++)
if (data [i] > data[j])
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
return data;
}
}
Itu tadi bisa dibilang EJB nya…, sekarang saya akan menyertakan client yang akan mengakses EJB tersebut yang terletak di server.. Begini code nya :
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import javax.ejb.EJB;
import org.wilbert.MyRemote;
public class Main
{
@EJB
private static MyRemote s;
public static void main(String[] args)
{
int[] data = new int[10];
Random r = new Random();
BufferedReader read = new BufferedReader(
new InputStreamReader(System.in));
for(int i = 0; i < 10; i++)
data[i] = r.nextInt(10);
System.out.println("Data awal adalah : ");
for(int i = 0; i < 10; i++)
System.out.print(data[i] + ", ");
System.out.println("\n\nAlgoritma Sort :\n1.Bubble Sort\n2.Exchange Sort");
System.out.print("Algoritma Sort Yang Ingin Digunakan : ");
int input = 1;
try
{
input = Integer.parseInt(read.readLine());
}
catch(IOException e)
{
System.err.println("Ada Kesalahan IO");
}
switch(input)
{
case 1:
data = s.sortWithBubble(data);
break;
case 2:
data = s.sortWithExchange(data);
break;
default:
System.out.println("\nTidak ada pilihan tersebut\n" +
"Silahkan Mengulang Program");
}
System.out.println("\nSetelah Disorting :");
for(int i = 0; i < 10; i++)
System.out.print(data[i] + ", ");
}
}
Yap, semua sudah siap, tinggal dijalankan saja… Happy Programming!!
















