Indexing Search Lucene
pada saat aplikasi di develop mungkin sebagian orang developer langsung melakukan query pada saat ada request data dari user. apa yang terjadi ketika data yang kita miliki berjumlah jutaan, atau ratusan juta?? disamping itu, ada berapa banyak user yang mengakses aplikasi kita?! o:< connection poolnya pasti jebol kan yah!.bbbrr
nah, lucene ini akan melakukan proses indexing yang kemudian akan melakukan proses Query ke database hanya dari list yang didapat pada saat proses indexing. dengan kata lain, Query di db akan dilakukan ketika parameter object yang akan dicari diisi oleh keyword yang diinput user.
lucene ini dapat dapat diimplementasikan dengan java atau bahasa pemrograman lain.untuk lebih lengkap documentationnya disini
kemarin, saya coba membuat aplikasi sederhana menggunakan lucene+hibernate+maven+hsqldb.
ada yang menarik dari integrasi tersebut, hsqldb yang dijadikan sebagai database untuk aplikasi kita, mempunyai 3 version yaitu server,file dan memory sebagai tempat penyimpanan. jadi kita tidak perlu bingung membuat dummy database tanpa harus menginstallnya dikomputer kita.
ok, back to topic awal. kita buat pseudocode nya terlebih dahulu yah untuk dapat membuat aplikasi sederhana lucene itu. yaitu sbb :
1. create maven project
2. tambahkan dependency apa saja yang terkait untuk library kebutuhan aplikasi kita.
3. mvn eclipse:eclipse untuk install semua dependency di aplikasi kita
4. development aplikasi lucene
nah, kita sudah tau pseudocode yang akan kita buat. saya coba deklarasikan satu-satu yah
1. create maven project
untuk membuat maven project, ada 2 opsi :
a. jika plugins m2eclipse sudah terinstall dikomputer kita, maka kita tinggal membuat project maven saja.
b. jika pluginsnya tidak tersedia kita bisa menggunakan console untuk membuat maven project dengan command :
$ mvn archetype:generate (untuk dapat diimport di eclipse kita gunakan perintah mvn eclipse:eclipse) tentunya pastikan dikomputer kita sudah terinstall maven.
setelah proses generate archetype atau menggunakan create new maven project selesai, maka setelah itu
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"3. Setelah itu, jalankan mvn clean install untuk menginstall dependency yang sudah dideklarasikan di pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>hibernate.search</groupId>
<artifactId>simple-lucene</artifactId>
<version>1.0-SNAPSHOT</version>
<name>simple-lucene</name>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>3.1.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.4.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.4.0.GA</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-common</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-snowball</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>JBoss repository</id>
<url>http://repository.jboss.com/maven2/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
</plugin>
</plugins>
</build>
</project>
~$ mvn clean install<enter>4. Development application lucene
~$ mvn eclipse:eclipse<enter>
Step development lucene search index :
a. hibernate.cfg.xml pada /src/main/resources
<?xml version='1.0' encoding='utf-8'?>b. class entity pada /src/main/java
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:file:/tmp/db/testdb</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.pool_size">100000</property>
<property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- MAPPING -->
<mapping class="simple.lucene.entity.Book" />
<mapping class="simple.lucene.entity.Author" />
<mapping class="simple.lucene.entity.Publisher" />
</session-factory>
</hibernate-configuration>
Kemudian kita buat class entity yang akan digunakan sebagai object pada proses search index.hubungan yang terjadi yaitu ManyToMany dengan class entity Author. dan indexing akan terjadi di class Book sebagai parent daripada Author. jadi dalam hal ini kita bisa melakukan proses indexing ke table Author melalui Book.
- Book.java
package simple.lucene.entity;- Author.java
import java.sql.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FullTextFilterDef;
import org.hibernate.search.annotations.FullTextFilterDefs;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Store;
@Entity
@Indexed
@FullTextFilterDefs({
@FullTextFilterDef(name="filterBookToAuthor", impl = simple.lucene.entity.Author.class)
})
@Table(name="book" )
public class Book {
@Id@GeneratedValue
@DocumentId
private Integer id;
@Column
@Field(index = Index.TOKENIZED, store = Store.YES)
private String title;
@Column
@Field(index = Index.TOKENIZED, store = Store.NO)
private String subtitle;
@IndexedEmbedded
@ManyToMany
private Set<Author> authors = new HashSet<Author>();
private Date publicationDate;
public Book(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public Set<Author> getAuthors() {
return authors;
}
public void setAuthors(Set<Author> authors) {
this.authors = authors;
}
public Date getPublicationDate() {
return publicationDate;
}
public void setPublicationDate(Date publicationDate) {
this.publicationDate = publicationDate;
}
}
Class Author disini harus mendefinisikan @Key dan @Factory. hal ini dimaksudkan untuk mendefinisikan key yang diinputkan dan definisi key yang diinput berhubungan dengan column yang mana di class entity tersebut.
package simple.lucene.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.CachingWrapperFilter;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.TermQuery;
import org.hibernate.search.annotations.Factory;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Key;
import org.hibernate.search.annotations.Store;
import org.hibernate.search.filter.FilterKey;
import org.hibernate.search.filter.StandardFilterKey;
@Entity
@Table(name = "author" )
@Indexed
public class Author {
@Id@GeneratedValue
private Integer id;
@Column
@Field(index = Index.TOKENIZED, store = Store.NO)
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Key
public FilterKey getKey() {
StandardFilterKey key = new StandardFilterKey();
key.addParameter(name);
return key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Factory
public Filter getFilter(){
assert(getName() != null);
return new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("name",getName()))));
}
}
c. class test pada /src/test/java
Banyak cara untuk mengimplementasikan Lucene Search Index. bisa menggunakan hibernate, ejb3-persistence, dll. tergantung dengan apa connection yang kita buat untuk mendapatkan session. disini ada 2 sample untuk mengimplementasikannya, yang pertama menggunakan hibernate(sessionFactory) dan ejb3-persistence(EntityManager). bedanya cuman dari pembuatan sessionnya saja.
- HibernateSearchSample.java
package simple.lucene.actions;- PersistenceSearchSample.java
import java.net.URL;
import java.sql.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.classic.Session;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import simple.lucene.entity.Author;
import simple.lucene.entity.Book;
public class HibernateSearchSample{
private static final Logger log = LoggerFactory.getLogger(HibernateSearchSample.class);
private Book book = new Book();
@Test
@SuppressWarnings("unchecked" )
public void connection() throws ParseException {
String path = "/hibernate.cfg.xml";
URL url = HibernateSearchSample.class.getResource(path);
AnnotationConfiguration configuration = new AnnotationConfiguration().configure(url);
SessionFactory sf = configuration.buildSessionFactory();
Session session = sf.openSession();
if (session.isConnected()) {
log.info("connect" + session);
for (Entry<String, Object> entry : ((Map<String, Object> ) session.getSessionFactory().getAllClassMetadata()).entrySet()) {
log.info("found " + entry.getKey() + ", value = "
+ entry.getValue());
}
} else {
log.info("ga connect, " + session);
}
FullTextSession fullTextSession = Search.getFullTextSession(session);
Transaction tx = fullTextSession.beginTransaction();
//insert into schema
//book.setAuthors((Set<Author> ) new Author());
book.setPublicationDate(new Date(System.currentTimeMillis()));
book.setSubtitle("Franch" ) ;
book.setTitle("UNREAD" ) ;
session.save(book);
book = new Book();
//book.setAuthors((Set<Author> ) new Author());
book.setPublicationDate(new Date(System.currentTimeMillis()));
book.setSubtitle("Dutchs" ) ;
book.setTitle("De el" ) ;
session.save(book);
Author author = new Author();
author.setName("JK.Rowling" );
session.save(author);
author = new Author();
author.setName("chaos@work" );
session.save(author);
List<Book> books = session.createQuery("from Book as book" ).list();
for (Book b : books) {
fullTextSession.index(b);
}
//mendefinisikan entity field di class book
String[] fields = new String[]{"title", "subtitle", "authors.name", "publicationDate"};
//parser field untuk dapat mengenerate query
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
String queryCondition = "Franch";
//proses indexing menggunakan lucene
org.apache.lucene.search.Query qry = parser.parse(queryCondition);
org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(qry, Book.class);
List results = hibQuery.list();
for(Object b : results){
System.out.println("results "+b.getClass());
}
//filter
String[] fieldsAuthor = new String[]{"id", "name"};
MultiFieldQueryParser parserAuthor = new MultiFieldQueryParser(fieldsAuthor, new StandardAnalyzer());
String queryConditionAuthor = "JK.Rowling";
org.apache.lucene.search.Query qryAuthor = parserAuthor.parse(queryConditionAuthor);
FullTextQuery ftq = fullTextSession.createFullTextQuery(qryAuthor, Book.class).setProjection("name" );
ftq.enableFullTextFilter("filterBookToAuthor" ).setParameter("name", queryConditionAuthor);
String resultsAuthor = ftq.getQueryString();
System.out.println("resultsAuthor "+resultsAuthor);
tx.commit();
}
}
package simple.lucene.actions;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.jpa.FullTextEntityManager;
import org.testng.annotations.Test;
import simple.lucene.entity.Book;
public class PersistenceSearchSample {
@Test
public void persistenceQuery() throws ParseException{
Ejb3Configuration configuration = new Ejb3Configuration();
EntityManagerFactory emf = configuration.configure("/hibernate.cfg.xml" ).buildEntityManagerFactory();
EntityManager em = emf.createEntityManager();
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
em.getTransaction().begin();
String[] fields = new String[]{"title", "subtitle", "authors.name", "publicationDate"};
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
org.apache.lucene.search.Query query = parser.parse( "Indonesian" );
javax.persistence.Query persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Book.class);
List results = persistenceQuery.getResultList();
System.out.println("result persistence "+results.size());
em.getTransaction().commit();
em.close();
}
}
Konsep dari lucene itu sendiri yaitu dia akan melakukan query parser dan akan mengembalikan nilai yang didefinisikan di ".projection" sehingga nilai return value nya itu yang akan diquery ke database menggunakan List<TypeList>. jadi tidak akan mengakses ke database terlebih dahulu sebelum mendapatkan index mana saja yang sesuai dengan kriteria yang ditetapkan di filter nya.
-Mila Yuliani-
ITU-T Specification
Jadi, pada dasarnya ITU-T itu merupakan basic dari pengembangan Telecommunication Management Network(TMN) sedangkan ITU-T merupakan spesifikasi yang mengambil referensi dari 3GPP Specification.
>> Standarisasi ITU-T
Istilah "X.500" digunakan baik untuk merujuk pada Rekomendasi X.500 tertentu dan untuk seluruh kategori X.5xx.
>> Telecommunication Management Network(TMN)
Telecommunication Management Network (TMN) adalah suatu model protocol yang berbasis ITU-T untuk mengatur System jaringan telekomunikasi. Sebuah konsep untuk mendistribusikan Network Elements(NEs) yang berfungsi untuk mengatur satu atau beberapa device untuk dapat diintegrasikan satu sama lain.
Operating System(OS) berkomunikasi dengan Network Elements dengan mengunakan berbagai macam protocol jaringan antara lain: CORBA, SNMP, CMIP, TCP, UDP.
>> Ruang lingkup TMN
1. Manajemen Bisnis (Business Management)
Mencakup untuk pengelolaan aspek bisnis, menganalisa tren dan permasalahan kualitas, penghitungan billing dan untuk kebutuhan laporan finansial.
2. Manajemen Pelayanan (Service Management)
Mengatur Service -service yang terdapat di dalam jaringan yang bersangkutan .
3. Manajemen Jaringan (Network Management)
Mendistribusikan resource jaringan seperti penanganan konfigurasi, pengedalian serta pengawasan sebuah jaringan.
4. Manajemen Elemen (Element Management)
Mengangani permasalahan Network Element atau komponen-komponen yang mendukung integrasi didalam sebuah jaringan.
-Mila Yuliani-
3GPP Specification
Iya yah, kenapa sang guru bisa memberikan tugas "mencatat" pada muridnya. hal ini disebabkan karena dengan mencatat, kita akan terus ingat dengan apa yang pernah kita catat/tulis. walaupun sebenarnya pada ujungnya memang "menyalin" tapi apa yang diperoleh ketika kita kembali mencatat adalah hal yang sangat bermanfaat bagi kita suatu hari nanti.
well, ini saya coba review otak saya. yang beberapa saat saya sudah mempelajari topik ini. "3GPP Specification". 3GPP Specification merupakan spesifikasi dokumen yang digunakan untuk dapat membangun atau mengembangkan teknologi berbasis telekomunikasi. 3GPP itu sendiri merupakan singkatan dari 3rd Generation Partnership Project. alias project yang dibuat antar rekanan/partner di generasi ke-3. yang kita tau generasi ke-3 ini mengimplementasikan konsep telekomunikasi yang lebih canggih dibandingkan dg generasi ke-2(baca : GSM(GPRS,Edge)).
Generasi ke-3 ini mencakup CDMA,W-CDMA. sedangkan batch selanjutnya di generasi ke-4 yang sudah mulai diimplementasikan saat ini di generasi ke-3 yaitu LTE(Long Term Evolution).
mungkin sekilas kita sudah sangat sering mendengar istilah diatas yah.yup.. itu merupakan salah satu dari 3G/Generasi ke-3. banyak provider di negeri kita ini yang menawarkan berbagai pelayanan yang sangan wOw..
tergantung kita sebagai konsumen pilih-pilih mana yang banyak mengandung benefit untuk kita.. :D
pada dasarnya tipe CDMA mempunyai bandwidth range yang lumayan tinggi dibandingkan dg GSM, sekitar 14.4 Kbps. makanya dewasa ini kok sebagian orang lebih memilih tipe CDMA ini baik untuk voice recognition atau bahkan hanya untuk internetan. karena dinilai lebih mempunyai nilai bandwidth yang tinggi sehingga menyebabkan nilai nominal yang harus dikeluarkan pun menjadi semakin murah. karena banyak mengandalkan radio frekuensi diudara.. :D
Kebayang, jadi semakin tinggi nilai bandwidth dari tipe 3G maka akan semakin murah nominal services yang harus kita bayar.
then, apa bedanya dengan W-CDMA, nah ini lebih banyak lagi kekuatan radio frekuensi nya dinilai lebih cepat dari CDMA, sekitar 384 Kbps walaupun masih ada yang paling cepat diantara mereka yaitu tipe LTE. ini merupakan generasi ke-4 tetapi mulai saat ini sudah mulai diimplementasikan.
tipe LTE ini nih yang masih di research kan oleh pakar telekomunikasi. karena LTE ini akan bisa diimplementasikan seperti apa suatu hari nanti.. wireless mungkin.. jadi kita sudah tidak perlu lagi membayar layanan yang disediakan oleh provider.. lol
-Mila Yuliani-
Telecommunication Management Network(TMN)
Akhir-akhir ini dikantor saya mendapatkan project tentang Network Management yang dijalankan dibidang Telecommunication. yang kita tau, mungkin tanpa adanya telekomunikasi di dunia ini manusia harus saling 'bertatap muka' untuk mendiskusikan sesuatu, atau bahkan mungkin harus menggunakan kabel untuk dapat menggunakan teknologi telekomunikasi.
dengan adanya jaman yang serba modern ini. untuk dapat menggunakan telekomunikasi manusia tidak perlu lagi menggunakan kabel sebagai alat, tidak perlu lagi selalu bertatap muka untuk dapat mendiskusikan suatu masalah. bahkan dapat kita rasakan manfaatnya bukan sekarang ini. dengan adanya handphone yang tidak memerlukan kabel, dg adanya internet, jaringan tanpa kabel(wireless).
nah, disini ada yang namanya TMN yaitu suatu konsep untuk pengaturan sistem jaringan yang ada di bidang telekomunikasi. pengaturan disini mencakup dokumen-dokumen spesifikasi yang digunakan sebagai standarisasi teknologi dan merupakan pengaturan didalam sistem jaringan yang digunakan.
pada umumnya dokumen spesifikasi yang digunakan menggunakan ITU-T(International Telecommunication Union).
terlepas dari itu, banyak juga spesifikasi dokumen yang digunakan untuk implmentasi dibidang telekomunikasi. seperti Internation Mobile Telecommunication-2000(IMT-2000), 3Generation Partnership Project(3GPP).
Meruvian Software Development Life Cycle
SDLC atau yang lebih dikenal dengan sebutan Software Development Life Cycle merupakan sebuah metodologi pengembangan sistem yang mengacu pada step-step atau roadmap pengembangan sistem.
Setiap perusahaan tentunya mempunyai konsep yang berbeda-beda. dan mempunyai ciri khas tersendiri. yang saya posting disini merupakan SDLC ala Meruvian.
Phase SDLC diatas punya style tersendiri. dan this is our own business. saya jelaskan fase-fase yang ada pada SDLC pada perusahaan kita.
1. Business Process Mapping
Pada Fase ini Business Analyst akan melaksanakan tugasnya yaitu mapping Business Process. setelah negosiasi, deal project dan scoping telah dilaksanakan, business analyst akan mapping seluruh proses requirement user dalam bentuk Standard Operating Procedure(SOP).
2. Information Architecture
Seorang IA atau Designer Flow akan menggambarkan implementasi dari seorang BA(Business Analyst). Setelah BA menggambarkan detail Standard Operating Procedure maka sang IA akan berkomunikasi dengan sang BA dan akan membuat designer form dari flow yang dibuat BA. Sang IA dapat memberikan gambaran untuk System Design, dan menjadi penengah antara BA(Business Analyst) dan SA(System Analyst).
Information Architecture merupakan salah satu blueprint atau merupakan sebuah pattern yang menjadi acuan pada saat Quality Assurance dilaksanakan.
3. System Design
System Design tidak hanya menggambarkan Relasi dari Database yang akan digunakan, akan tetapi dia akan mapping System yang akan berjalan dan teknologi yang digunakan untuk kasus Business Process yang telah di mapping oleh seorang Business Analyst, yang kemudian akan dapat langsung di mengerti oleh developer. jadi, System Design ini dilakukan oleh seorang System Analyst dimana kerjanya mapping System yang akan dibuat oleh programmer/developer.
4. Development
nah, pada fase ini developer sudah menerima flow dari sang BA, sudah menerima mockup dari sang IA, dan menerima design database dan system dari sang SA. lengkap bukan?
disini si developer hanya tinggal menjahit saja, karena emang bahan, arsitektur telah di design dan di mapping sebelumnya oleh para eksekutor..
so, fungsi developer hanya membuat coding nya saja, sehingga proses development akan dinilai lebih cepat dan efisien.
5. Deployment
Setelah Aplikasi selesai di develop/dikembangkan, maka langkah selanjutnya sang Integrator dapat menginstall aplikasi pada server. baik server yang disediakan oleh client maupun server yang kita sediakan untuk client. tentunya jika aplikasi di running di server kita, itu masih bersifat demo dan tentunya jika aplikasi itu web based, maka bisa diakses oleh client diluar sana.
nah, urusan install menginstall kita serahkan pada Integrator saja. tentunya diinstall ketika sudah fix tidak ada lagi bug fixing atau masa Quality Assurance.
6. Support
Fase ini merupakan fase support dimana setelah aplikasi berjalan dengan sempurna kita bisa memberikan support service online tergantung dari NDA(non-disclosure Agreement) yang ditandatangani pada saat negosiasi.
Mungkin bagi anda yang tertarik untuk mempelajarinya lebih lanjut bisa menghubungi kita.
-Mila Yuliani-
Ux as user experience
Dari dulu,sy ingin menjadi seorang penulis. karena pekerjaan ini dinilai mudah tetapi juga cukup ribet.
Mudahnya karena setiap org mempunyai kesempatan yg sama untuk menjadi seorang penulis. tetapi memang perlu sy akui membuat bahasa yang baik dan berkualitas itu sangat sulit.
Alah bisa karena biasa. begitu kata pribahasa.
ga ada di dunia ini manusia yg bisa segalanya. nah disini lah pentingnya sebuah pengalaman. pengalaman manusia itu berbeda-beda karena disitulah letak "unique" seorang manusia.
saya senang membuat pengalaman. karena dengan pengalaman kita menjadi tahu. pengalaman baik yang berkesan tentunya yah..
nah, daripada jelasin terus pengalaman yang ga ada henti-hentinya. lebih baik kita simak bacaan saya kali ini tentang UX atau user experience.
Banyak yang bertanya mungkin yah. apa itu UX?
UX atau User Experience yang dikemukakan oleh iceberg yaitu sebuah metode yang digunakan untuk dapat merealisasikan kebutuhan client terhadap visual design yang diinginkannya.
Klo dilihat dari asal katanya User dan Experience yaitu sebuah mekanisme yang menjadi penghubung didalam pengembangan suatu aplikasi(versi sy dari segi teknis).
dari pengertian secara general, UX itu bisa diartikan orang yang mempunyai pengalaman yang baik atau paham didalam sebuah pengembangan project. misalnya didalam Analisa suatu bisnis, system, serta mekanisme SDLC (Software Development Life Cycle).
dibawah ini saya tampilkan urutan menjadi UX :

Bisa kita lihat dari gambar diatas, level yang paling bawah itu terletak pada user specification needs didalam sebuah pengembangan project. low level yang merupakan kebutuhan dari user/client. semakin naik level keatasnya itu sudah termasuk tugasnya Analyst. baik Business Analyst, System Analyst, maupun Architecture Analyst.
Semakin banyak pengalaman yang dimiliki oleh user maka dia akan terus naik level dari UX nya. so keep your experience.. carilah sebuah pengalaman karena itu yang akan meningkatkan posisi anda.
then, dimana posisi anda??
-Mila Yuliani-
[Yama] SpringMVC Chapter 1
A.OVERVIEW
Spring MVC merupakan sebuah Single Controller utama yang mengimplementasikan filter dispatcher patern yang terdapat pada arsitektur Pemrograman J2EE. Spring MVC dikenal sebagai Dependency Injection yang dapat didefinisikan sebagai injection controller didalam sebuah pemrograman web. Spring MVC
Filter Dispatcher Servlet yang terdapat pada Spring MVC berfungsi sebagai pengolahan alur controller pada web tier yang bisa menangani masalah logika-logika dan navigasi.
Konfigurasi web-tier pada Spring MVC yaitu terdapat pada ApplicationContext yang akan me-load data tier dan konfigurasi untuk web-tier. Web-tier merupakan komponen-komponen framework yang diintegrasikan dan dijalankan dengan kolaborasi yang dapat menciptakan fungsi-fungsi yang dapat dipergunakan. Seperti Hibernate untuk solusi Model, Spring MVC untuk solusi controller dan solusi dynamic web application, dan sebagainya.
Nah, sekarang kita membahas tentang fitur-fitur yang ada pada SpringMVC 3.0 yaitu sebagai berikut :
1.Inversion of Control (IoC) atau Dependency Injection (DI)
Spring menawarkan loosly coupling dengan adanya fitur yang bernama IoC yang dapat digunakan untuk mengkoordinir setiap object di system. Baik menggunakan method mutator dan accessor maupun menggunakan konstuktor sebagai media IoC.
Pada Dependency Injection (DI) container akan membuat semua object yang didefinisikan kemudian me-wire semua object tadi dengan cara mensetting property-property yang dibutuhkan, dan memanggilnya saat method bean dipanggil.
2.Aspect Oriented Programming (AOP)
Merupakan salah satu paradigma pemrograman dengan tujuan untuk meningkatkan modularisasi dengan memfokuskan pada pemisahan-pemisahan modul untuk mencapai suatu tujuan khusus. Biasanya Aspect Oriented Programming ini digunakan untuk AspectJ dimana mengimplementasikan suatu strategi yang digunakan untuk crosscutting didalam pemrograman java menggunakan metode AspectJ.
3.Container
Spring berfungsi juga sebagai Container yang berfungsi untuk mengatur dan mengkonfigurasi object yang ada di Spring. Bagaimana sebuah object dapat berfungsi dengan baik, dapat dikonfigurasikan serta dapat berasosiasi dengan object yang lainnya.
4.Lightweight Container
Tanpa mekanisme Lightweight Container, kita dituntut untuk dapat mengerti dan memahami alur atau aturan dari sebuah Framework tertentu. Misalnya seperti EJB kita dituntut untuk mengerti spesifikasi dan cara kerja dari EJB tersebut. Sedangkan dengan mekanisme Lightweight Container semuanya tidak perlu lagi, karena kita hanya mengimplementasikan class POJO yang bisa digunakan di framework2 lainnya. Tanpa kita harus membuat service bean yang terdapat di EJB-Container.
Ciri-ciri Lightweight Container :
POJO
Life-cycle management
Dependency Injection
Consistent Configuration
Service Attachment
5.Framework
Spring telah berfungsi sebagai sebuah framework yang dapat dikolaborasikan dengan framework-framework lainnya yang dapat diintegrasikan dengan Spring. Karena konfigurasi dan setting container di Spring terdapat di file xml.
Integration Struts-REST and Spring
REST merupakan salah satu alternatif teknologi baru-baru ini yang bisa dijadikan sebagai pengganti ESB(Enterprise Service Bus) disamping SOAP yang selama ini dikenal sebagai ESB.
Sekedar sharing dari apa yang telah saya dapatkan akhir-akhir ini, yaitu tentang RESTful yang merupakan yang belakangan ini telah di implementasikan dengan Struts2. ini merupakan versi terbaru dari Struts2 yang mempunyai suatu plugins convention yang mana ini merupakan suatu teknologi terbaru yang mengimplementasikan action hanya dengan bentuk @action saja.
Dulu dan bahkan mungkin sampai sekarang masih banyak yang menggunakan Struts2 sebagai Controller pada konsep MVC yang notabene menyimpan action dan result nya pada sebuah xml. dan mungkin ini berbeda dengan konsep Struts2.1.8 keatas yang sudah mendukung JSON dan XML sebagai salah satu alternatif untuk dapat dilihat di berbagai media device yang mendukung. seperti halnya untuk Android Programming, mungkin yang akan di jadikan response setelah mengakses halaman tersebut adalah JSON nya, disamping itu, mungkin untuk beberapa Aplikasi menggunakan XML khususnya untuk pemrograman web. karena XML dinilai lebih mudah untuk diakses dan di implementasikan.
konsep berikut adalah bagaimana cara untuk meng-integrasikan Spring dengan Struts-Rest sebagai Controller nya. sedangkan untuk modeling dengan database kita masih menggunakan Hibernate.
well, kita harus mempersiapkan library seperti berikut :
- commons-beanutils-1.8.0.jar
- commons-chain-1.2.jar
- commons-collections-3.2.jar
- commons-digester-2.0.jar
- commons-fileupload-1.2.1.jar
- commons-io-1.3.2.jar
- commons-lang-2.3.jar
- commons-logging-1.0.4.jar
- commons-logging-api-1.1.jar
- commons-validator-1.3.1.jar
- dom4j-1.6.1.jar
- ehcache-1.2.3.jar
- ejb3-persistence.jar
- ezmorph-1.0.3.jar
- freemarker-2.3.16.jar
- hibernate3.jar
- hibernate-annotations.jar
- hibernate-commons-annotations.jar
- hibernate-entitymanager.jar
- hibernate-tools.jar
- hsqldb.jar
- javassist-3.9.0.GA.jar
- json-lib-2.3-jdk15.jar
- jta-1.1.jar
- slf4j-api-1.5.8.jar
- slf4j-log4j12-1.4.2.jar
- struts2-convention-plugin-2.2.1.jar
- struts2-core-2.2.1.jar
- struts2-embeddedjsp-plugin-2.2.1.jar
- struts2-jquery-grid-plugin-2.2.0.jar
- struts2-jquery-plugin-2.2.2.jar
- struts2-json-plugin-2.2.1.jar
- struts2-junit-plugin-2.2.1.jar
- struts2-rest-plugin-2.2.1.jar
- struts2-spring-plugin-2.2.1.jar
- velocity-1.6.3.jar
- velocity-tools-1.3.jar
- xstream-1.2.2.jar
- xwork-core-2.2.1.jar
Setelah itu setting untuk struts.xml nya seperti ini :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Overwrite Convention -->
<bean type="com.opensymphony.xwork2.ActionProxyFactory" name="cimande" class="org.blueoxygen.rest.CimandeRestActionProxyFactory" />
<bean type="org.blueoxygen.rest.manager.ContentHandlerManager" class="org.blueoxygen.rest.manager.DefaultContentHandlerManager" />
<bean type="org.blueoxygen.rest.handler.ContentHandler" name="jsonHandler" class="org.blueoxygen.rest.handler.JsonContentHandler" />
<bean type="org.blueoxygen.rest.handler.ContentHandler" name="xmlHandler" class="org.blueoxygen.rest.handler.XmlContentHandler" />
<constant name="cimande.rest.extension.prefix" value="service" />
<constant name="cimande.rest.idParameterPrefix" value="pub/" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="struts-default" />
<constant name="struts.convention.package.locators" value="actions"/>
<package name="default" extends="struts-default">
<action name="view"
class="org.blueoxygen.rest.profile.actions.ViewPersonalProfileDetail">
<result name="success" type="velocity">
/vie]w/profile/formProfileDetail.vm
</result>
</action>
<action name="in"
class="org.blueoxygen.rest.profile.actions.PersonalProfileDetail">
<result name="success" type="velocity">
/view/profile/formProfileDetail.vm
</result>
</action>
</package>
</struts>
Java Class Controller :
@Results({ @Result(name = ActionSupport.SUCCESS, type = "velocity", location = "/view/profile/formProfile.vm" ) })
public class PersonalProfileController extends CimandeAction implements HibernateSessionFactoryAware{
protected String id;
protected String nick_name;
protected @Autowired SessionFactory sf;@Action("/profile/" )
public String execute() throws Exception{//code here
}
//setter getter here
Hibernate Configuration untuk ORM Database :
<?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="Cimande"><mapping class="org.blueoxygen.papaje.entity.LevelingMember"/> //mapping entity class
</session-factory>
</hibernate-configuration>
ApplicationContext.xml untuk membuat datasource :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns: xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:property-placeholder location="classpath:cimande.properties" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="com.mysql.jdbc.Driver" p:username="root"
p:password="xxxx" p:url="jdbc:mysql://localhost:3306/mervpolis" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource" p:configLocation="classpath:hibernate.cfg.xml"
p:hibernateProperties="classpath:hibernate.properties">
<property name="eventListeners">
<map>
<entry key="merge">
<bean
class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
</entry>
</map>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
nah, sekarang kita buat satu class yang digunakan untuk menyimpan list, dll. dan ngambil koneksi database menggunakan datasource yang diinstate di ApplicationContext.xml
public class ViewPersonalProfileDetail extends PersonalProfileController{
private String sql;
public String execute(){
sess = sf.openSession();
sess.getTransaction().begin();
if(getId() != null && !"".equalsIgnoreCase(getId())){
sql = "select a from "+Employee.class.getName()+" a where id='"+getId()+"' order by logInformation.createDate asc";
employeeLists = sess.createQuery(sql).list();
for(Employee employee : employeeLists){System.out.println("education "+employee.getEducation().getUniversity());
}
}
return SUCCESS;
}}
nah, kita membuat view nya untuk itu. saya menggunakan velocity untuk menampilkan list tadi.
#foreach($!eL in $!employeeLists)
$!eL.education.university
#end
Pengalaman Surabaya
Yup. ini merupakan kali pertama saya pergi ke Surabaya. tepatnya ITS Nopember Surabaya. banyak hal yang menarik disini. mulai dari tinggal di Wisma Penginapan, mobilisasi ke kampus(maklum kampus dengan Wisma sangat berjauhan), mengikuti perlombaan, dll.
tepatnya, ini merupakan kali kedua saya mengikuti perlombaan untuk perwakilan. yeah! berat memang. sangat berat.
Disini saya mendapat banyak pelajaran. khususnya softskill yang ada dan menuntut untuk bisa. actually, saya mendapatkan pelajaran untuk ini. banyak malah. ternyata hidup itu tidak seperti yang kita bayangkan.
ok, kita lanjutkan pembicaraan kita tentang pengalaman saya ke Surabaya. well, saya dan SATU orang teman saya pergi ke Surabaya menggunakan Pesawat. yeah, pesawat. ini merupakan kali pertama saya naik pesawat. pemberangkatan kita tepatnya pukul 05.45. saya dan teman saya sudah berangkat dari rumah sekitar jam 2.00 dini hari. soalnya peraturan yang berlaku pada Airport yaitu harus sudah berada di sana 1.45 menit. nah, daripada kita telat, yasudah kita memutuskan untuk pergi lebih awal, lebih baik tunggu disana.
setelah itu, kita sampai di Airport Soekarno-Hatta jakarta. dan nunggu + 2.30 jam karena ternyata kita cuman membutuhkan waktu 45 menit dari rumah ke airport. ok well, saatnya sudah tiba. saya mendapatkan seat di no.8B. kemudian saya menukarkan tempat duduk saya dengan teman saya. karena yang deket dengan jendela itu adalah seat no.8A...:D
ketika pesawatnya hendak landing, hatiku sangat terenyuh melihat lingkungan sekitar yang beda dengan apa yang biasanya dilihat..huffhh! perasaan kagum bercampur terharu. karena allah telah membuat dunia ini menjadi indah. sangat indah!! layaknya seperti sedang melihat google map yang asli. semakin tinggi pesawat, semakin terlihat seperti tanah, yang mempunyai banyak kelokan2 yang sangat indah. BEST VIEW GOD!!
indah! sesuatu yang indah dan akan selalu indah!!
setelah itu, semakin tinggi pesawat. orang2 yang ngomong itu sudah tidak terdengar oleh telinga. bahkan telingaku mendengung begitu keras nya. sampai2 operator passengers pun sudah tidak jelas dia ngomong apa. huffh. ternyata saya berada di atas awan yang hampa udara!!
saya sudah tidak berkata apa2 lagi waktu itu. perasaan terharu bercampur kagum akan kebesaran tuhan melandaku. sesampainya kita di Juanda Airport, kita langsung menuju lokasi ITS Nopember itu sendiri.
kami langsung menuju kampus ITS menggunakan travel. kebetulan dari Airport ke kampus itu ternyata sangat lama.. mungkin memakan waktu 1 jam. *kirain deket gitu*.
sesampainya disana kita dikasih tau panitia geMasTIK harus pergi ke Wisma STIESIA yang letaknya lumayan jauh dari sana untuk melakukan checkin ke wisma tersebut. penginapan yang cukup sederhana juga. satu kamar bisa menampung 3 orang peserta finalis. kebetulan yang waktu itu pada saat saya datang, saya belum mendapat teman sekamar.
then, ada orang yang mulai ketuk pintu kamar saya, dan itu adalah teman sekamar saya. namanya amelia dari UBL. dan dia adalah seorang finalis dari game development.
acara demi acara telah saya lewati mulai dari babak penyisihan, presentasi didepan juri, lomba pameran, berkenalan dengan mahasiswa lainnya, dll. yang lebih menarik itu adalah moment-moment ketika mobilisasi dari wisma STIESIA ke ITS yang jaraknya lumayan jauh. tapi dari sana kita bisa melihat surabaya yang begitu panas dengan berbagai aktifitas dari orang-orang disana. sungguh! saya senang bisa menjadi wakil dari kampus ku. yang sebenernya hanya bisa mengirimkan satu kelompok saja hanya untuk Lomba Aplikasi. klo dilihat dari universitas lain mereka hampir mengirimkan seluruh kategori lomba.
sekali lagi saya katakan "Pengalaman adalah guru yang sangat berharga". saya suka mencari pengalaman, karena itu akan menjadikan kita bisa hidup bersosialisasi dengan yang lainnya. mungkin saya harus memberikan pertanggungjawaban kepada kampus saya tercinta Universitas Gunadarma, agar suatu saat nanti kita bisa menjadi orang yang bisa dibanggakan.
thanks to Meruvian yang sudah membuat mental saya menjadi lebih kuat. insya allah. tanpa Meruvian saya bukan siapa2.
Setting Development Environment in WAS#2
Mengarah pada postingan sebelumnya, untuk setting development pada WAS(WebSphere Application Server), pada postingan kali ini saya akan mencoba untuk mendeklarasikan bagaimana men-setting development pada WAS untuk hal setting datasource untuk mengkoneksikan ke Database.
Ada 2 Cara yang dapat dilakukan oleh kita jika kita ingin membuat koneksi database dengan Application Server kita.
1. Setting Datasource di Application Server
2. Configuration Setting Datasource pada Application(hibernate,dll)
nah, sekarang saya akan membicarakan tentang Setting Datasource pada Application Server. karena untuk Application yang kita gunakan saat ini adalah WebSphere Application Server.
Berikut step yang kita bisa ikuti untuk Setting Datasource pada WebSphere Application Server :
1. Settelah WebSphere Running pada IDE kita, langkah selanjutnya adalah dengan men-setting Administration Console pada WebSphere

2. Kemudian pilih Secure administration, applications, and infrastructure. kemudian akan muncul tampilan sbb :

3. Pilih J2C authentication data. kemudian akan tampil sbb :

4. Click Ok, setelah itu kita harus membuat Datasource yang terhubung dengan
Profile WAS yang telah di konfigurasikan.


5. Pilih Scope as "Node=aiu01". tergantung dari profile yang telah dibuat Kemudian click New.
nah, untuk men-test setting Datasource tadi kita coba click test connection yang ada pada WAS kita.
hopefully the best..
Upload File from Struts2 then Put into a Folder
Actually, sometime if we want to upload file using Java Programming and Struts2 for the specific you used, you can follow my step to try it.....
After you upload that file, the file will put into .metadata folder from our project location be. likes a tmp file. it can read by us manually, but we must read it with read copy file of tmp file which can accessed by us. then it will make our easy to get the file which we needed.
in this blog, i want to write about how to step and may be it will handled if we want to put the file into a folder in our application web based.
Step to 'how to upload file use Struts2 and put into a folder' :
1. From our view(JSP, Velocity, HTML, etc) :
< form action="saveUpload.action" method="post" enctype="multipart/form-data" >
< table>
< tr>
< td> Upload File : < /td>
< td>< input type= " file " name=" upload ">< /td>
< /tr>
< /table>< /form>
2. Java Class will save into database for save uploadFileName and UploadContentType
public class SaveUpload extends ActionSupport{
protected File upload; // name of variable from view form
protected String docUploadFileName;
protected String docUploadContentType;
public String execute(){
if(docUpload != null) {
try {
//-------------- to put file into folder
File file1 = docUpload;
File file2 = new File(outPath+"/images/photo/"+docUploadFileName);
String outPath = MyIO.getBaseFolder().getPath();
InputStream in = new FileInputStream(file1);
//For Append the file.
//OutputStream out = new FileOutputStream(file2,true);
//For Overwrite the file.
OutputStream out = new FileOutputStream(file2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
//--------------this is to put data upload into database using hibernate
employee.setDocUploadName(docUploadFileName);
manager.save(employee);
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
3. Class MyIO for putting path File Upload into /WebContent of our Application
public class MyIO {
public static File getBaseFolder() throws IOException {
ProtectionDomain domain = MyIO.class.getProtectionDomain();
CodeSource source = domain.getCodeSource();
URL url = source.getLocation();
if (!"file".equals(url.getProtocol())){
throw new IOException("Code source location not a file:" + url);
}
String path = url.getPath().replaceAll("", " " );
return (new File(path.substring(0, path.lastIndexOf("/WEB-INF/" ))));
}
}
then for displaying that image which we had putted into /WebContent we can access it easily.
4. View for Displaying the image
< table>
< tr>
< td colspan=2 align=right style="padding-top=10px">
<img src="#surl("value=/images/photo/$!{employee.docUploadName}" )" border="1" height="150" width="130">
</td>
</tr>
<tr>
<td>Name</td>
<td>: $!employee.name</td>
</tr>
< / table>
then we can result of our code :

ok. it's so simple right?
thanks to: Home153179
Setting Development Environment in WAS#1
WAS adalah singkatan dari WebSphere Application Server. Merupakan salah satu Application Server yang sering digunakan oleh para Developer J2EE atau pun Developer yang menggunakan Application Server WebSphere.
Nah, disini saya mencoba untuk membagi sedikit ilmu bagaimana men-setting Development Environment di WAS. berikut step-step yang harus dijalankan :
1. Install WebSphere Application Server (versi berapapun baik yang berbayar maupun yang versi Community)
2. Install Database(disini saya mencoba menggunakan DB2 sebagai Database)
3. Install IDE(Integrated Development Environment) untuk Development(bisa menggunakan Eclipse, Netbeans, AST, RAD, dll)
Ok, disini saya tidak akan mendeskripsikan step-step instalasi baik itu dari WAS sendiri maupun dari IDE yang digunakan. karena ini dianggap sangat mudah..
Setelah meng-install WAS dan IDE yang digunakan maka kita harus membuat profiles di IDE tersebut untuk men-setting Aplikasi kita dalam hal ini saya menggunakan Application Server Toolkit sebagai IDE.
step-step nya sebagai berikut :
1. Pada AST klik Window -> Preferences -> Server -> WebSphere -> Create
2. Setelah ini akan muncul tampilan sbb :
3. Kemudian Pilih Next dan akan muncul tampilan sbb :
4. Kemudian pilih Next akan tampil sbb :
5. Pilih Advanced Profile creation dan klik Next untuk melanjutkan dan akan muncul tampilan sbb :
6. Pilih Deploy the Administrative console(Recommended), dan akan muncul tampilan sbb:
7. Kemudian klik Next untuk melanjutkan dan akan tampil sbb:
8. Masukkan Node dan Host kita dimana Node itu adalah nama dari Profile Computer Name kita. kemudian klik Next untuk melanjutkan, dan akan muncul tampilan sbb:
9. Masukkan user name dan password pada saat kita meng-installasi WAS. kemudian klik Next dan akan muncul tampilan sbb :
10. Berikut keterangan dari port yang digunakan untuk mengakses Application maupun Administrative Console dari WAS. klik next dan Create
Ok segitu dulu deh, udah di uber-uber waktu nih. next blog yaitu bagaimana kita meng-configure Database dengan Administrative Console di WebSphere menggunakan Datasource...
Hopefully the best
Exclude List for JSP Reload
Cukup simple juga, ketika sebuah aplikasi running dan kita mendapatkan perubahan pada View khususnya JSP maupun view yang lainnya, kita diharuskan untuk me-restart aplikasi server kita. supaya perubahan dapat ditampilkan di browser(khusus untuk Web Application). nah agar kita tidak selalu me-restart aplikasi server kita, disini saya membuat sebuah konfigurasi kecil yang mengambil dari fungsi DOS xcopy, untuk kali ini saya menggunakan windows sebagai Operating System. dan berfungsi untuk me-reload sebuah view tanpa kita harus me-restart aplikasi server di setiap perubahan pada jsp, velocity,dll.
Langkah-langkah nya yaitu :
1. Pada IDE(Eclipse) Klik Run -> External Tools -> External Tools kemudian akan tampil sbb:
2. Klik New pada Program kemudian ketikkan Nama di 'Name'
3. Untuk Location masukkan URL Path untuk program DOS xcopy.exe
C:\WINDOWS\system32\xcopy.exe
4. Working Directory : diisi workspace directory yang akan kita copy
${workspace_loc:/bnkweb-bb/WebContent/WEB-INF}
5. Arguments : berisi perintah untuk xcopy dari Workspace ke InstalledApps atau metadata file yang di deploy oleh Aplikasi Server.
D:\dev\S137R1\environment\product\j2ee\ear\modules\bnkweb-bb\WebContent\WEB-INF\*.*
D:\dev\ws\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\bnkweb-bb\WEB-INF /E/C /H /R /Y /Z /EXCLUDE:D:\dev\excludeList.txt
Context Syntax : <Workspace Directory> <metadata Directory> /EXCLUDE: <File Exclude List>
adapun isi dari Exclude List file berupa :
\.svn\
.jpg
.gif
.png
.css
\.js\
.swf
HTML5
HTML singkatan dari Hyper Text Markup Language. HTML versi terbaru yaitu HTML5 yang banyak digunakan pada Pemrograman Mobile sekarang ini.
Apa yang baru dari HTML5?
<header></header>, <section></section>,<label for=""></label>, <footer></footer>, dll.
Apa fitur yang tersedia di HTML5?
1. Drag and Drop
2. Edit Content
3. Storage Offline, dll
Berikut saya buat sample dari HTML5 dan Compare dari HTML4 yang sangat familiar dengan kehidupan kita sehari-hari..
HTML5
<header><h1>Sample Form</h1></header>
<form><label for=""contact_name"">Name:</label>
<input id=""contact_name"" placeholder=""Enter" your="" name"="" autofocus="" />
<label for=""contact_email"">E-mail:</label>
<input id=""contact_email"" placeholder=""Enter" your="" email="" address"="" type=""email"" />
<label for=""contact_phone"">Phone:</label>
<input id=""contact_phone"" placeholder=""Enter" your="" phone="" number"="" type=""tel"" />
<input value=""Submit"" type=""submit"" />
</form>
hasilnya akan nampak seperti berikut ini :
Sample Form
Sample Form
| Name | : |
| : | |
| Phone | : |
Kita dapat melihat perbedaannya, dimana pada HTML5 dengan menggunakan <input type=""namavar"" /> akan membuat sebuah textfield dibandingkan dengan jika kita membuat textfield pada HTML4 yang harus mendefinisikan <input name=""namavar"" type=""text"" />..so? keep easy with the new other.
Hopefully the best,
MY
OOP#5 Looping Control
Looping Control i think same with Structure Control which one of Basic Programming in every Programming Language. yeah let us remembering about it.
1. While
Context Syntax to loop use While :
int a = 0;
while(a<=10){
System.out.print(a);
a++;
}
output of that code:
012345678910
2. Do-While
Like with While syntax, do-while is used for looping too. but different context with other syntax. and it will do first statement in branch of do before while.
int a = 0;
do{
System.out.print(a);
a++;
}while(a<=10);
3. For
Mostly every one always using "for" for looping. cause it's so simple to make it.
int a;
for(a=0; a<=10; a++){
System.out.print(a);
}

