Selasa, 15 Juli 2008

Sumber Belajar Java EE

Saya seringkali menjumpai pertanyaan ini di milis2 Java. Yah, pada awalnya saya termasuk golongan orang2 itu. Selalu mengaku newbie, menanyakan sumber belajar, minta e-book dll. Sampai pada akhirnya saya menyadari, jawaban dari pertanyaan tsb sebetulnya sudah saya dapatkan. E-book, online tutorial, hampir semua yang disodorkan si penjawab pertanyaan sudah saya jumpai. Kecuali buku2 impor tentu saja.

Yah, tinggal bagaimana saya nya sendiri, apakah bisa memanfaatkan resource yang ada. Ternyata saya sangat tidak efektif memanfaatkan resource tsb. Di komputer saya ada sekitar 30-an lebih e-book Java. Di perpustakaan mini saya juga ada lebih dari 5 buku Java. Dari itu semua saya hanya membaca seperempatnya saja (sekitar 10 e-book maupun buku). Itu pun saya hanya membaca sekilas, seperti membaca pengumuman. Sangat cepat, nyaris tak ada yang masuk ke otak saya. Karena itu saya berkesimpulan bahwa masalah ada pada diri saya sendiri. Dan izinkanlah saya untuk men-generalisasi bahwa masalah ini juga pasti dihadapi oleh Anda yang selalu merasa ga mudeng2 belajar Java.

Satu lagi yang saya dapatkan dari perenungan ini. Setiap orang memiliki style yang berbeda. Kalo saya membaca jawaban2 pertanyaan di muka, ada orang yang hanya membaca tutorial Java dari Sun sudah bisa menguasai Java. Ada juga yang menyarankan membaca buku2 misalnya Core Java, atau Thinking in Java dsb. Saya pribadai belajar Java EE dari kombinasi J2EE Passion, tutorial Java EE dari Sun serta buku2 lokal maupun impor. Kembali lagi kepada kita sendiri. Kita yang tau persis, kita nyaman belajar lewat media yang mana.

Saat ini saya bukan dalam taraf advance, atau intermediate sekalipun dalam dunia Java. Tapi saya emoh (=ogah) bilang kalo saya newbie yang minta disuapin satu per satu untuk mengeja Java.

Jumat, 11 Juli 2008

Arsitektur Java EE [dari kacamata naif]

Berikut arsitektur JavaEE server dan Container yang diambil dari J2EETutorial Sun.

 
1. Client
Client di sini dapat berupa Java application (biasanya diekseskusi dengan java NamaClass, atau bisa juga swing) serta applet. Mungkin akan dibahas di judul selanjutnya biar ga panjang. Client inilah yang meminta request kepada server (dalam hal ini J2EE Server). Nanti client akan menerima respon dari server sesuai dengan request tadi.
2. J2EE Server
Contoh J2EE Server adalah Sun Java System Application Server, JBoss, Tomcat dsb. J2EE Server ini akan menerima request dari client untuk diproses. Jika request tersebut membutuhkan akses ke database, maka J2EE Server akan berhubungan dengan database. Hasilnya akan dikirim ke client berupa respond.
J2EE Server terdiri dari dua container, yaitu Web dan EJB (Enterprise JavaBeans).
- Container
Container adalah tempat berjalannya component. Application Server yang disebut di muka juga dapat dikategorikan sebagai container.
- Component
Component bisa dianggap sebuah program. Component bisa ditulis dengan Java atau JSP.
- Web Container
Container ini berfungsi untuk melayani request client dengan antarmuka web. Web container terdiri dari Servlet dan JSP. Servlet ditulis dengan Java, sedangkan JSP tentu saja ditulis dengan JSP. Bedanya terletak pada cara menampilkan. Biasanya halaman web ditampilkan dengan kode HTML. Kalau Servlet, kode2 HTML tersebut dilewatkan pada PrintStream. sehingga akan banyak baris kode yang dibutuhkan alias ga efisien. Perhatikan contoh berikut.

   1: out.println("<html>");
   2: out.println("<head>");
   3: out.println("<title>HelloServlet</title>");
   4: out.println("</head>");
   5: out.println("<body>");
   6: out.println("Hello, "+userName);
   7: out.println("</body>");
   8: out.println("</html>");
   9: out.close();

Jadi susah untuk seorang editor web, Java banget. Padahal yang ingin ditampilkan Hello, . Lalu lahirlah JSP yang memudahkan bagi editor web. Adapun kode2 yang berhubungan dengan kontrol, business rule ditulis dengan Java dan dilewatkan dalam JSP. Berikut contoh JSP yang menampilkan hasil yang sama dengan Servlet di muka.

   1: <html>
   2: <head>
   3: <title>First-Servlet: HelloServlet</title>
   4: </head>
   5: <body>
   6: Hello, <%=userName%>
   7: </body>
   8: </html>

Mudah bukan?

Web container juga dapat mengakses EJB container jika request dari client memerlukan penanganan dari sisi business rule, atau bisa juga langsung mengakses ke database.


-EJB Container


Container ini berisi business rule. Biasanya terdiri dari beberapa Enterprise Bean. Enterprise Bean sendiri adalah file2 Java dimana di dalamnya terdapat business rule yang spesifik. Service yang diberikan oleh container ini tentu saja logic/business rule. Request bisa berasal dari client atau dari web container. Sama seperti web container, EJB container dapat mengakses database jika diperlukan.


3. Database


Dalam buku2 teks Java EE, biasanya disebut juga dengan Enterpirse Information System atau Legacy System. Database ini adalah database yang berasal dari aplikasi2 yang berjalan dalam operasional perusahaan sehari-hari.


Dalam prakteknya client tidak harus berupa Java application atau applet. Tapi juga bisa juga cukup dengan browser yang mengakses URL JSP atau Servlet.


Demikian pengantar arsitektur Java EE. Oya, saya menyebut Java EE karena mulai Java 5 (penerus Java 1.4, Sun tidak menggunakan lagi istilah J2EE).

Selasa, 08 Juli 2008

Belajar Java EE [secara naif]

Saat ini saya sedang mulai membuka [lagi] materi2 Java Enterprise Edition baik dari Tutorial Sun maupun dari Java Passion. Adapun yang saya pelajari sampai saat ini adalah sebagai berikut.
1. Java Enterprise Edition Architecture dan Web Application Architecture
2. Servlet
3. Java Server Pages
4. Enterprise JavaBeans
5. Java Database Connectivity

1. Java Enterprise Edition Architecture dan Web Application Architecture

- Java Enterprise Edition (Java EE) Architecture
Dalam dunia enterprise, sebuah arsitektur sangat penting untuk jalannya sebuah aplikasi. Mulai dari core, component di atas core, cara komunikasi antar komponen adalah hal-hal yang perlu mendapat perhatian untuk memahami Java EE. Buat saya awalnya cuek terhadap gambar2 arsitektur enterprise ini. Dan ternyata itulah kesulitan terbesar saya untuk memahami konsep2 Java EE yang sangat banyak. Satu hal lagi yang perlu diketahui, untuk menjalankan aplikasi Java EE, anda memerlukan Application Server yang compatible. Produk opensource yang cukup terkenal dalam jajara Application Server adalah JBoss, Sun Java System Application Server yang biasanya include dalam instalasi Java EE SDK.

- Web Application Architecture
Arsitektur ini awalnya kabur buat saya. Ternyata ini tak lebih dari membuat aplikasi berbasis web dengan Java. Setahu saya untuk membangun aplikasi berbasis web dengan Java digunakan Servlet atau Java Server Pages (JSP). Servlet sendiri adalah Java likely code yang berarti untuk menulis kode HTML harus dilewatkan sebagai string untuk kemudian ditampilkan dengan method print() atau println() sebagaimana layaknya Java code. Sedangkan JSP bisa juga disebut HTML likely code, yang menuliskan kode HTML tetap sebagai kode HTML serta menyisipkan kode Java ke dalam file JSP tersebut dengan tag tertentu. Dua komponen inilah yang digunakan untuk membangun web application berbasis Java. Satu hal lagi yang perlu diketahui, untuk menjalankan web application ini tidak harus dengan Application Server seperti JBoss atau Sun Java System Application Server, tetapi juga dapat menggunakan servlet container seperti Apache Tomcat. Perbedaanya Apache Tomcat spesifik menjalankan aplikasi yang terdapat Servlet atau JSP di dalamnya.

2. Servlet
Sebagaimana dijelaskan di muka, kode Java yang dihasilkan oleh Servlet terlebih dahulu harus dikompilasi agar dapat dijalankan. Ini akan merepotkan web developer karena selalu recompile setiap ada update code. Oya, dalam menangani sebuah request dibutuhkan penanganan oleh web component (dalam hal ini Servlet) untuk selanjutnya menghasilkan respond yang dapat dibaca/diterima user. Memang Servlet sangat merepotkan dalam hal coding HTML, tetapi sangat ampuh dalam controlling dan dispatching. Sederhananya begini, dalam pembuatan web application ada mekanisme untuk memisahkan code visual dan code control/business logic dengan tujuan memudahkan pemeliharaan coding. Nah, Servlet berisi control/business logic dari aplikasi tersebut. Jadi kalo kita melihat coding Servlet kita hanya akan melihat logika atau proses bisnisnya saja sedangkan tampilan HTML nya ada di JSP.

3. Java Server Pages (JSP)
JSP menggunakan syntax HTML untuk menuliskan kode halaman web. Adapun untuk keperluan memanggil kode2 Java, digunakan tag, baik JSTL (JSP Standard Tag Library), JavaBeans maupun custom tag. Dengan tag tersebut kode Java ditulis, sehingga kita dapat menulis logika bisnis dalam tag tersebut. Atau kita cukup memanggil class Java di dalam JSP dan melewatkan nilai property untuk mendapatkan hasil yang diinginkan. Kombinasi Servlet dan JSP inilah yang memudahkan pembuatan web application berbasis Java.

4. Enterprise JavaBeans (EJB)
Pada intinya komponen EJB adalah sebuah komponen yang dipanggil oleh Java application, swing dsb dari sisi client untuk selanjutnya diolah (misal memanggil dan memanipulasi database) dan mengeluarkan output ke client. Komunikasi yang digunakan adalah dengan Remote Method Invocation (RMI). RMI sendiri adalah sebuah konsep dimana client dapat invoke (memanggil) method server secara remote. Arsitektur dari EJB sendiri pada dasarnya bertujuan untuk memisahkan komponen business logic dari hosting environment (container). Masalah security dsb dimanage oleh container sehingga kita tidak perlu pusing2 menuliskannya dalam kode EJB. Untuk membuat komponen EJB perlu 3 file.
- EJB Home Interface, yang mendefinisikan method yang akan digunakan oleh client yang memungkinkan dibuat dan ditempatkannya bean.
- EJB Remote Interface, yang mendefinisikan business method dari bean
- Bean itu sendiri yang berisi business logic dari aplikasi
Container komponen EJB sendiri membuat objek implementasi dari EJB home interface dan EJB remote interface. Object ini berupa EJB home object dan EJB remote object.

5. Java Database Connectivity (JDBC)
Pada dasarnya JDBC merupakan API untuk mengakses database agar aplikasi tidak berurusan dengan detail struktur database. API tersebut berisi DriverManager. DriverManager tsb akan menghasilkan Connection yang digunakan untuk koneksi ke database. Setelah terkoneksi programmer dapat menjalankan query2 SQL.

Perlu dijelaskan sekali lagi bahwa saat ini saya masih dalam tahap belajar Java EE. Sehingga apa yang saya tuliskan saat ini sangat mungkin berubah seiring dengan pemahaman saya terhadap suatu konsep di kemudian hari.