Logger Factory Mini Framework
Berawal dari ide gila untuk membuat sebuah framework kecil, akhirnya saya putuskan untuk membuat framework yang sebenarnya sangat kecil sekali.. Tidak tahu juga ini bisa dibilang framework atau bukan.. Kalau misal ada yang mau mengembangkan bersama, bisa kasih komentar di artikel saya ini..
Langsung saja yah, framework ini digunakan untuk mencatat setiap error atau apapun juga yang berhubungan dengan konsep Logging.. Contoh, jika anda membuat aplikasi untuk mencatat dalam sehari siapa saja yang login di dalam web anda, framework ini akan mengerjakannya dengan mudah..
Tentu saja ini masih versi alpha, masih banyak yang perlu dibenahi terutama arsitekturnya..
Anda bisa mengunduh jar nya dari sini.. Lalu masukkan di CLASSPATH anda! Sesudah itu anda bisa membuat program seperti contoh yang saya buat berikut ini :
package test;
import org.wilbert.LoggerFactory;
import org.wilbert.Logger;
public class Main2
{
public static void main(String[] args)
{
LoggerFactory<Integer> l = Logger.buildLogger("D:\\log.txt");
l.storeIn(123456789);
l.storeIn(987654321);
l.storeIn(1);
l.storeIn(3);
l.commitIn();
System.out.println("Isi Log Setelah dicommit :");
System.out.println("=============================");
System.out.println(l.commitOut());
l.storeOut(3);
l.commitIn();
System.out.println("\nIsi Log setelah dibuang salah satu isinya :");
System.out.println("=============================");
System.out.println(l.commitOut());
}
}
Hope you like it friend!
Give me a feedback..
View Untuk “Latest Article”
Hari ini hanya ngoding untuk article saja.. Kan semestinya yang boleh menulis article hanya user yang sudah terdaftar.., maka itu tidak saya buat terlebih dahulu.. Yang saya buat hanyalah view untuk mengambil article dari database dan khusus article terbaru..
Berikut yang saya buat.. Pertama, saya tambahkan ini di layout.jsp
<li><html:link action="articlelatest.do">Articles</html:link></li>
Setelah itu saya membuat satu page dan menambah baris file konfigurasi tiles menjadi seperti ini :
<%--
Document : article_latest
Created on : May 5, 2008, 5:59:12 PM
Author : Wilbert
Page yang digunakan untuk menampilkan artikel2 terbaru
--%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<h2>Artikel Terbaru JUG Joglosemar</h2>
<logic:present name="latestArticle" scope="request">
<logic:iterate id="artc" name="latestArticle" scope="request">
<table>
<tr class="rowH">
<th><bean:write name="artc" property="title" /></th>
</tr>
<tr>
<td><bean:write name="artc" property="detail" /></td>
</tr>
<tr>
<td align="right">Author : <b><bean:write name="artc" property="author.realName" /></b></td>
</tr>
</table>
</logic:iterate>
</logic:present>
<a href="#">Lihat Artikel Lainnya</a>
<definition name="article.latest" extends="base.definition">
<put name="content" value="/page/article_latest.jsp" />
</definition>
Dan yang terakhir saya membuat Action serta menambah konfigurasi struts nya
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jug.joglosemar.web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.jug.joglosemar.dao.hbm.ArticleDAOImpl;
/**
*
* @author Wilbert
* Action untuk artikel terbaru
*/
public class ArticleLatestAction extends org.apache.struts.action.Action {
/* forward name="success" path="" */
private final static String SUCCESS = "success";
/**
* This is the action called from the Struts framework.
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("latestArticle", new ArticleDAOImpl().getLastArticles());
return mapping.findForward(SUCCESS);
}
}
<action path="/articlelatest" type="org.jug.joglosemar.web.action.ArticleLatestAction">
<forward name="success" path="article.latest" />
</action>
Dan sourcecode tersebut dari 2 post sebelumnya juga sudah saya commit ke googlecode.. Bagi yang mau ikutan juga bisa checkout di http://jugjoglosemar.googlecode.com
Hasil dari view ini bisa dilihat di sini
Hibernate Mapping dan Konfigurasi Untuk Entity “Article”
Malam ini saya ingin sekali menyelesaikan sedikit code yang semestinya kita kerjakan bersama..
Maklum, sudah tidak sabar untuk membuka netbeans..
Saya hanya membuat hibernate mapping nya saja, serta DAO + Implementasinya..
Selebihnya untuk Struts nya saya harus break dulu, takut nanti teman satu team saya malah tidak kebagian pekerjaan.. hehehe…
Langsung saja yah, ini belum saya commit koq, termasuk 1 post sebelumnya tentang perubahan di list jugers yang saya buat..
Pertama, saya buat hibernate mapping dan POJO nya untuk entity “Article”..
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jug.joglosemar.entity;
/**
*
* @author Wilbert
* Class ini melambangkan tabel Article di database
* yang nantinya digunakan untuk menampilkan artikel-artikel
*/
public class Article
{
private long id;
private String title;
private String detail;
private long datePost;
private Jugers author;
public Article() {}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public long getDatePost() {
return datePost;
}
public void setDatePost(long datePost) {
this.datePost = datePost;
}
public Jugers getAuthor() {
return author;
}
public void setAuthor(Jugers author) {
this.author = author;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="article" dynamic-insert="false" dynamic-update="false" mutable="true" name="org.jug.joglosemar.entity.Article" optimistic-lock="version" polymorphism="implicit" select-before-update="false">
<id name="id" column="article_id">
<generator class="native"/>
</id>
<property name="title" column="title" type="string" length="150"/>
<property name="detail" column="detail" type="string" length="500"/>
<property name="datePost" column="date_post" type="long"/>
<many-to-one name="author" column="author" class="org.jug.joglosemar.entity.Jugers"/>
</class>
</hibernate-mapping>
Lalu setelah itu, saya tambahkan mapping tersebut ke dalam file konfigurasi hibernate.., yaitu di file hibernate.cfg.xml.. Berikut isi filenya :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name="session"> <!-- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/joglosemar</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"/>--> <!-- we use datasource --> <property name="hibernate.connection.datasource">java:/comp/env/jdbc/joglosemar </property> <property name="dialect">org.hibernate.dialect.MySQLDialect </property> <property name="current_session_context_class">thread </property> <property name="show_sql">true </property> <property name="hbm2ddl.auto">create </property> <mapping resource="org/jug/joglosemar/entity/Jugers.hbm.xml"/> <mapping resource="org/jug/joglosemar/entity/News.hbm.xml"/> <mapping resource="org/jug/joglosemar/entity/Event.hbm.xml"/> <mapping resource="org/jug/joglosemar/entity/Article.hbm.xml"/> </session-factory> </hibernate-configuration>
Dan langkah yang terakhir adalah membuat DAO + Implementasinya.. Berikut ini saya akan tampilkan DAO + Implementasi yang sudah saya buat..
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jug.joglosemar.dao;
import java.util.List;
import org.jug.joglosemar.entity.Article;
/**
*
* @author Wilbert
*/
public interface ArticleDAO
{
public void insert(Article artc) throws Exception;
public void delete(Article artc) throws Exception;
public void update(Article artc) throws Exception;
public Article load(long id) throws Exception;
public List<Article> getAllArticles() throws Exception;
public List<Article> getLastArticles() throws Exception;
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jug.joglosemar.dao.hbm;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.jug.joglosemar.dao.ArticleDAO;
import org.jug.joglosemar.entity.Article;
import org.jug.joglosemar.util.HibernateUtil;
/**
*
* @author Wilbert
* Implementasi DAO untuk query ke database
*/
public class ArticleDAOImpl implements ArticleDAO
{
public void insert(Article artc) throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
try{
session.save(artc);
}catch(Exception ex){
throw ex;
}
}
public void delete(Article artc) throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
try{
session.delete(artc);
}catch(Exception ex){
throw ex;
}
}
public void update(Article artc) throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
try{
session.update(artc);
}catch(Exception ex){
throw ex;
}
}
public Article load(long id) throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
Article artc = null;
try{
artc = (Article)session.load(Article.class,id);
}catch(Exception ex){
throw ex;
}
return artc;
}
public List<Article> getAllArticles() throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
List<Article> list = new ArrayList<Article>();
try{
list = session.createQuery("from Article").list();
}catch(Exception ex){
throw ex;
}
return list;
}
public List<Article> getLastArticles() throws Exception {
HibernateUtil.beginTransaction();
Session session = HibernateUtil.getSession();
List<Article> list = new ArrayList<Article>();
try{
list = session.createQuery("from Article order by date_post desc limit 0,10").list();
}catch(Exception ex){
throw ex;
}
return list;
}
}
Selesai sudah untuk pembuatan entitynya.. Perlu diperhatikan juga (bagi yang merasa team saya), kita bermain dengan 2 framework, yaitu Struts dan Hibernate.. Maka harus dipastikan kita bisa membedakan keduanya.. Jangan dicampur adukkan..! Sekarang kita coding dulu Hibernate nya, setelah itu baru kita bermain Struts nya..
Saya rasa kalau satu per satu cara memikirkannya malah lebih bagus, karena ada kerangka berpikir yang terstruktur, yaitu Struts dan Hibernate..
Mari kita membuat Struts nya hari Selasa nanti!
Penambahan Fitur Kecil di Project Web Joglosemar
Sebelum commit, saya akan mencoba menerangkan sedikit apa yang sudah saya buat.. Ini hanya perubahan kecil saja, jadi singkat saja akan saya jelaskan..
Karena berhubung team untuk pembuatan modul article dan event belum bisa berkumpul, maka saya berinisiatif untuk membuatkan fitur kecil supaya paling tidak sudah ada anggota jug-joglosemar yang mengerjakan proyek ini..
Pertama, saya membuat satu file jugers_list.jsp baru yang isinya adalah sebagai berikut :
<%--
Document : jugers_list
Created on : May 4, 2008, 1:16:09 PM
Author : Wilbert
Page yang digunakan sebagai view untuk menampilkan list jugers
--%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<h2>Jugers List JUG Joglosemar</h2>
<logic:present name="jugersList" scope="request">
<logic:iterate name="jugersList" id="juger" scope="request">
<table>
<tr class="rowH">
<th colspan="2"><bean:write name="juger" property="id" />. <bean:write name="juger" property="realName" /></th>
</tr>
<tr class="rowA">
<td rowspan="3" width="100">
<img src="<bean:write name='juger' property='imagePath' />" />
</td>
<td>
Universitas : <bean:write name="juger" property="universitas" />
</td>
</tr>
<tr class="rowA">
<td>
Email : <a href="mailto:<bean:write name='juger' property='email' />"><bean:write name="juger" property="email" /></a>
</td>
</tr>
<tr class="rowA">
<td>
Profile : <bean:write name="juger" property="profile" />
</td>
</tr>
</table>
</logic:iterate>
</logic:present>
Jelas setelah itu saya tambahkan konfigurasi tiles-defs.xml seperti ini :
<definition name="jugers.list" extends="base.definition">
<put name="content" value="/page/jugers_list.jsp" />
</definition>
Supaya page yang sudah saya buat bisa diakses, maka saya sedikit mengubah file layout.jsp menjadi seperti ini :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title><tiles:getAsString name="title" ignore="true"/> </title>
<link href="./default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="outer">
<div id="header">
<h1><a href="#">JUG JOGLOSEMAR</a></h1>
<h2>Komunitas Pengguna Java di Jogja, Solo, Semarang dan sekitarnya</h2>
</div>
<tiles:insert attribute="header"/>
<div id="content">
<div id="tertiaryContent">
<tiles:insert attribute="login"/>
<h3>Jugers Database</h3>
<ul>
<li><html:link action="jugersnew.do">Registrasi</html:link></li>
<li><html:link action="jugerslist.do">Jugers List</html:link></li>
</ul>
<div class="xbg"></div>
</div>
<div id="primaryContentContainer">
<div id="primaryContent">
<tiles:insert attribute="content"/>
</div>
</div>
<div id="secondaryContent">
<h3>Tentang Kami</h3>
<ul>
<li><a href="#">Visi</a></li>
<li><a href="#">Misi</a></li>
</ul>
<h3>Dari Jugers</h3>
<ul>
<li><a href="#">News</a></li>
<li><a href="#">Events</a></li>
<li><a href="#">Articles</a></li>
<li><a href="#">Gallery</a></li>
<li><a href="#">Download</a></li>
</ul>
<h3>Partner</h3>
</div>
<div class="clear"></div>
</div>
<div id="footer">
<p>Copyright © 2008 JUG Joglosemar</p>
</div>
</div>
</body>
</html>
Langkah berikutnya adalah membuat Action untuk JugersList.. Berikut ini code nya :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jug.joglosemar.web.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.jug.joglosemar.dao.hbm.JugersDAOImpl;
/**
*
* @author Wilbert
* Action untuk menampilkan list jugers
*/
public class JugersListAction extends org.apache.struts.action.Action {
/* forward name="success" path="" */
private final static String SUCCESS = "success";
/**
* This is the action called from the Struts framework.
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("jugersList", new JugersDAOImpl().getAllJugers());
return mapping.findForward(SUCCESS);
}
}
Akhirnya file struts-config.xml tersisipi code baru seperti ini :
<action path="/jugerslist" type="org.jug.joglosemar.web.action.JugersListAction">
<forward name="success" path="jugers.list" />
</action>
Dan perubahan yang terakhir adalah saya hanya membuat suatu direktori bernama “photos” yang ditujukan untuk menyimpan file foto dari jugers yang nantinya akan ditampilkan juga pada jugers_list..
Hasil dari fitur kecil ini bisa dilihat di gambar berikut..
Bagaimana, bisa masuk googlecode?
Menginstall Subversion
Tutorial kali ini saya buat bertepatan dengan dimulainya proyek untuk pembuatan website JUG-Joglosemar, dimana kita sudah membuat team untuk menyelesaikan beberapa modul..
Tentunya dengan bekerja team, kita harus menggunakan Subversion.. Coba baca-baca manual Subversion terlebih dahulu, karena di sini saya akan menjelaskan secara singkat saja bagaimana menginstall Subversion di lingkungan sistem operasi MS..
Mengapa saya memberikan tutorial hanya untuk di lingkungan MS saja? Simpel sekali jawabannya, karena sebagian besar anggota semua menggunakan MS.., jadi saya ikut saja..
Sebenarnya cukup simple, anda cukup mengunduh Subversionnya dari sini.. Simpel, tinggal klak klik saja.. Sesudah anda menginstall, coba cek lewat command prompt dengan cara seperti ini
svn –version
Kalau ada output, berarti SVN anda sudah terinstall dengan benar, sehingga anda siap untuk mengerjakan proyek dengan team anda.. Sudah jelas kan?
Integrasinya dengan netbeans, cukup lakukan langkah sebagai berikut :
- Jalankan Netbeans
- Pilih Menu Bar “Versioning”
- Pilih Subversion, lalu Checkout
- Isi semua informasi yang diminta
Sebenarnya sangat mudah untuk menginstall Subversion.., apalagi di lingkungan MS.. Selamat mencoba dan selamat mengerjakan proyek..
Hehe, proyek saya juga sudah dimulai nih bersama teman-teman JUG!! Semangat!!
Parameter Array Sejak Java SE 5
Menanggapi komentar-komentar dari “Bunga”, saya terkesan dengan kata-katanya.. Ia menyebutkan bahwa saya (dan termasuk kita) jangan bosan dengan hal-hal yang mendasar di dalam pemrograman Java khususnya..
Tentu itu mengundang saya juga untuk menulis sesuatu yang berbau dasar, tapi mungkin belum semua orang tahu tentang hal tersebut.. Hari ini sebelum saya tidur, saya mau menulis terlebih dahulu tentang Array Parameter..
“Maksudnya Apa Sih Mas?? Saya tidak mengerti…”
Begini ceritanya, kalau kita ingin menulis sebuah parameter di dalam method (parameter formal), biasanya kita akan mencantumkan tipe data lalu diikuti dengan nama variabelnya.. Nah, kalau kita ingin mencantumkan array? Pasti tanda yang tidak mungkin ketinggalan adalah kurung siku ([])..
Sejak Java SE 5.0, untuk menuliskan / mencantumkan paramter yang berupa array, kita tidak perlu lagi menulis dengan cara mengikutsertakan kurung siku tersebut..
Lebih detailnya silahkan lihat kode program di bawah ini.. Jangan kaget, mungkin ini style baru bagi anda, tapi saya sudah membiasakan dengan penulisan seperti ini..
Atau mungkin tulisan saya ini sudah lama anda ketahui? Ya maklum saja, saya sedang ingin menulis yang dasar-dasar menanggapi komentar “Bunga”..
public class Coba
{
public static void main(String... args) //bisa dibuat seperti ini karena array
{
Coba c = new Coba();
c.testNilai(10, 11, 2, 3, 54, 3);
System.out.println("\n");
for(int a : c.cobaAh())
System.out.println("Dari coba AH " + a);
}
public void testNilai(int ... nilai) //parameter bisa menggunakan int... dan direpresentasikan sebagai array
{
int i = 1;
for(int a : nilai)
System.out.println("Nilai ke - " + (i++) + " : " + a);
}
public int[] cobaAh() //return type tidak bisa menggunakan int...
{
int[] a = {1,2,3,4,5};
return a;
}
}
Dan perlu diperhatikan bahwa penulisan seperti ini tidak berlaku pada return type yang berupa void atau tidak. Anda tidak bisa mereturn array dengan cara penulisan seperti di atas..
Dalam waktu dekat juga mungkin saya akan menulis tentang konsep boxing dan unboxing, serta autoboxing.., dan macam-macam hal dasar lainnya.. Kalau dirasa banyak permintaan ya saya akan menulis hal tersebut..
Jawaban Tes Akhir Semester Java (Teori)
Sekali lagi saya sebagai asisten merasa bertanggung jawab untuk memberikan jawaban ini.. Ya bagus kalau mau dipelajari ulang supaya nanti sewaktu tes yang praktikum bisa tambah mantap!
Tapi selebihnya terserah anda saja..
Ok, tanpa berbasa basi, langsung saja unduh filenya dari sini….
———————)))> file jawaban !!
Tenang saja bagi anda yang belum bisa, kontak saya jika anda ingin belajar.. Tentu saja kalau saya ada waktu, kalau pas lagi sibuk maaf tidak bisa terlalu banyak melayani.. hehehe!
Semoga berhasil di tes praktikumnya.. Dan semoga anda dapat melihat nilai anda dari jawaban ini…
Salam asisten Java 2008, Wilbert!
















