Simple Me

Indexing Search Lucene

Jan 17, 2012 by Mila Yuliani

Lucene merupakan salah satu project dari Apache Foundation. lucene ini biasa digunakan untuk proses indexing search engine library. konsep ini juga yang dijadikan pedoman bagi si mbah(baca : google) untuk indexing library "keywords" yang dimasukkan oleh usernya.

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

2. dependency (pom.xml)


    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
        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>

3. Setelah itu, jalankan mvn clean install untuk menginstall dependency yang sudah dideklarasikan di pom.xml


    ~$ mvn clean install<enter>
    ~$ mvn eclipse:eclipse<enter>

4. Development application lucene

Step development lucene search index :
a.  hibernate.cfg.xml pada /src/main/resources


    <?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>

            <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>

b. class entity pada /src/main/java

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;

    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;
        }  
    }

- Author.java

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;

    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();
        }
    }

- PersistenceSearchSample.java


    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

Oct 22, 2011 by Mila Yuliani

Sama halnya dengan spesifikasi 3gpp ITU-T Specification ini mengatur spesifikasi yang dibutuhkan didalam pengembangan aplikasi berbasis Telecommunication. baca postingan saya disini

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

Oct 04, 2011 by Mila Yuliani

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)

Oct 03, 2011 by Mila Yuliani

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

Jul 12, 2011 by Mila Yuliani

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

May 13, 2011 by Mila Yuliani

 

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

Feb 23, 2011 by Mila Yuliani


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

Oct 13, 2010 by Mila Yuliani

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

Oct 08, 2010 by Mila Yuliani


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

Sep 29, 2010 by Mila Yuliani

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

Sep 22, 2010 by Mila Yuliani

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

Sep 01, 2010 by Mila Yuliani

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

Aug 25, 2010 by Mila Yuliani

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

Aug 17, 2010 by Mila Yuliani

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








Sekarang kita Compare dengan HTML4 

<h1>Sample Form</h1>
<table>
<tr>
<td>Name</td>
<td>: <input name=""name"" type=""text"" /></td>
</tr><tr>
<td>E-Mail</td>
<td>: <input name=""email"" type=""text"" /></td>
</tr><tr>
<td>Phone</td><td>: <input name=""phone"" type=""text"" /></td>
</tr><tr>
<td><'input value=""Submit"" type=""submit"" /'></td>
</tr>
</table>

 

Dapat kita lihat hasilnya seperti ini :


Sample Form

Name:
E-Mail:
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

Aug 14, 2010 by Mila Yuliani

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);
}


Search

 

« February 2012
SunMonTueWedThuFriSat
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
   
       
Today

Links

Feeds

Navigation