วันอังคารที่ 28 มิถุนายน พ.ศ. 2554

การ Connect Oracle JDBC โดยใช้ Java




import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;

public class JDBCDriverOracle {

      public static void main(String[] args) throws Exception {
            System.out.println("Getting Column Names  ");
            Connection con = null;
            String url = "jdbc:oracle:thin:@192.163.1.14:1521:TEST01";
            String driver = "oracle.jdbc.driver.OracleDriver";
            String user = "user1234";
            String pass = "password1234";
            try {
                  Class.forName(driver);
                  con = DriverManager.getConnection(url, user, pass);
                  if (con != null) {
                        System.out.println("Got Connection.");
                        DatabaseMetaData meta = con.getMetaData();
                        System.out.println("Driver Name : " + meta.getDriverName());
                        System.out.println("Driver Version : " + meta.getDriverVersion());
                        System.out.println("Got Connection success....");
                  } else {
                        System.out.println("Could not Get Connection");
                  }
            } catch (Exception e) {
                  e.printStackTrace();
            } finally {
                  if (con != null) {
                        con.close();
                  }
            }
      }

}

Output
Getting Column Names 
Got Connection.
Driver Name : Oracle JDBC driver
Driver Version : 8.1.7.0.0
Got Connection success....

** ปล.อย่าลืม ต้องไปหา Library ชือว่า classes12.jar ด้วยนะครับ

J2EE Technology หรือ JEE Technology


      ในการนำ J2EE มาใช้งาน จะต้องใช้พื้นฐาน จาก J2SE มาใช้งานด้วย ซึ่งจะพบว่า การทำงาน ใน J2EE เป็นการทำงานที่มีขนาดใหญ่มากพอสมควร ดังแสดงในรูปที่ ด้านล่าง ใน J2EE จะประกอบด้วย API ต่างๆ ดังนี้
  1. EJB Specification ซึ่งใน J2EE Version 1.3 จะ Support EJB 2.0
  2. Java Remote Method Invocation (RMI) และ RMI/IIOP RMI เป็นการเรียกใช้งาน Component ข้ามเครื่อง (Distributed Component) ส่วน RMI/IIOP นั้นเป็นส่วนที่มีความสอดคล้องกับ CORBA
  3. Java Naming and Directory Interface (JNDI) เป็นส่วนที่ติดต่อกับการใช้ Resource ต่างๆ เช่น การติดต่อใช้ EJB ก็ต้องใช้ JNDI ในการติดต่อ
  4. Java Database Connectivity (JDBC) ใช้ในการติดต่อฐานข้อมูลเชิงสัมพันธ์ต่างๆ (Relational Database)
  5. Java Transaction API (JTA) และ Java Transaction Service (JTS) ใช้การทำ Transaction ของระบบงาน ถ้าจะทำการเขียนเอง ก็ใช้ JTA แต่จะใช้บริการ Application Server ก็จะใช้ JTS
  6. Java Message Service (JMS) เป็นการใช้การติดต่อโดยใช้ Message แทน ซึ่งเป็นแนวคิดใหม่ที่จะใช้กับ RMI/IIOP โดยจะส่ง Message ไปยัง Message Oreinted Middleware (MOM) เพื่อเข้าคิว แล้วตัว MOM จะส่ง Message ไปให้แทน จะใช้ในกรณีที่ไม่ต้องการทำงานแบบ Transaction หรือ Realtime มีข้อดีคือ จะรับประกันการส่ง Message ว่าไม่มีการสูญหาย ส่งถึงผู้รับแน่นอน
  7. Java Servlet เป็น Server - Side Component ชนิดหนึ่ง ที่ใช้หลัก Request/Response ซึ่งต่างจาก EJB ที่ต้อง Run บน Application Server
  8. Java Server Page เป็น ภาษา Script ที่ทำหน้าที่คล้ายกับ Servlet มาก เพราะจะต้องแปลง JSP ไปเป็น Servlet เหมาะสำหรับการ Presentation ของ Web Page
  9. Java IDL (Interface Definition Language) เป็นการนำ Specification ของ CORBA มาใช้ใน Java
  10. Java Mail เป็น API ที่ใช้ในการเขียน โปรแกรมรับส่ง E-Mail
  11. JavaBean Connector Architecture เป็นการเขียนโปรแกรมเพื่อเชื่อมต่อรับ Legacy System หรือ ระบบงาน อื่นๆ เช่น ระบบงาน ของ Business Partner เป็นต้น
  12. Java API for XML Parsing/Processing เป็นชุด API ที่ใช้เขียนโปรแกรมร่วมกับ เทคโนโลยี XML
  13. Java Authentication and Authorization Service (JAAS) เป็น API ที่ดูแลเกี่ยวกับระบบรักษาความปลอดภัย
       จากรายการ API ข้างต้นทั้งหมด จะพบว่า J2EE ได้จัดเตรียม API ชุดใหญ่ ไว้อย่างเพียบพร้อมที่จะให้นักพัฒนาที่ต้องการพัฒนาระบบงานในระดับหน่วยงานขนาดใหญ่ได้เป็นอย่างดี ซึ่งทั้งนี้จะต้องรวมกับชุด API ในส่วนของ J2SE ด้วย เช่น AWT, IO หรือ NET เป็นต้น


จากรูป เป็นการแสดงการนำ J2EE มาใช้งาน จะพบว่า แบ่งเป็น 3 ส่วน คือ Client Tier จะประกอบไปด้วย Web Browser , Wireless Device, Business Partner โดยใช้ Web Services และ CORBA Client และมีในส่วนของ Application Server ที่ยึดตาม Specification ของ J2EE เราอาจเรียกว่า J2EE Server จะแบ่งได้เป็น Servlet/JSP , EJB หรือ Connector ต่างๆ ในส่วนที่ 3 คือ ส่วนที่เป็น Back End ก็คือส่วนที่เป็น Database หรืออาจจะเป็น Legacy System หรือ จะเป็นระบบงานของ Business Partner ก็ได้

วันจันทร์ที่ 27 มิถุนายน พ.ศ. 2554

การ Connect แบบ JDBC โดยใช้ Java


การ Connect แบบ JDBC โดยใช้  Java

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCDriverInformation {
      static String userid="root";
      static String password = "password";
      static String url = "jdbc:mysql://127.0.0.1:3306/ecom";    
      static Connection con = null;
      public static void main(String[] args) throws Exception {
          Connection con = getMySqlJDBCConnection();
          if(con!= null){
             System.out.println("Got Connection.");
             DatabaseMetaData meta = con.getMetaData();
             System.out.println("Driver Name : "+meta.getDriverName());
             System.out.println("Driver Version : "+meta.getDriverVersion());
             System.out.println("Got Connection success....");
          }else{
                System.out.println("Could not Get Connection");
          }
      }

      public static Connection getMySqlJDBCConnection(){

            try {
                  Class.forName("com.mysql.jdbc.Driver");  
            } catch(java.lang.ClassNotFoundException e) {
                  System.err.print("ClassNotFoundException: ");
                  System.err.println(e.getMessage());
            }

            try {
               con = DriverManager.getConnection(url, userid, password);
            } catch(SQLException ex) {
                  System.err.println("SQLException: " + ex.getMessage());
            }

            return con;
      }

}

// Output >>
Got Connection.
Driver Name : MySQL-AB JDBC Driver
Driver Version : mysql-connector-java-5.0.7 ( $Date: 2007-03-09 22:13:57 +0100 (Fri, 09 Mar 2007) $, $Revision: 6341 $ )
Got Connection success....

ขอให้สนุกกับการทดลองนะครับ http://java-thai-talk.blogspot.com/

วันพฤหัสบดีที่ 10 กุมภาพันธ์ พ.ศ. 2554

EJB คือ?

EJB - Enterprise Java Bean Architecture



EJB Component.

1. Session Bean
 เป็น Bean ที่ใช้สำหรับการทำงานตาม business logic ต่างๆ หรือ อาจเรียก session bean ว่าเป็น bean สำหรับให้บริการ
session bean แบ่งเป็น 2 ประเภทคือ
1.1. stateless session สำหรับ EJB ประเภทนี้ Application server จะไม่เก็บ State ของ client ไว้ ทำให้การทำงานใช้ทรัพยากรน้อย แต่ละ instance ของ session bean จะให้บริการ client ได้หลาย client
1.2. statefull session สำหรับ EJB ประเภทนี้ Application server จะเก็บ State ของ client ไว้ และไม่มีการใช้ instatnce ร่วมกันของ Client การให้บริการ session bean กับ client จะเป็น 1 ต่อ 1 ซึ่งจะแตกต่างจาก stateless ที่ยอมให้ Client มีการใช้ instance ของ session bean ร่วมกันได้

2. Entity Bean เป็น EJB ที่ใช้สำหรับการทำงานเกี่ยวกับ Data ซึ่งจะทำหน้าที่เป็นตัวแทนของข้อมูลในฐานข้อมูล Entity Bean แบ่งออกเป็น 2 ประเภท คือ
2.1. CMP - Entity Bean (Container-Managed Persistence Entity Bean)
2.2. BMP - Entity Bean (Bean-Managed Persistence Entity Bean)
การสร้าง Stateless Session การ implement Stateless Session Developer จะต้องประกอบไปด้วย
1. remote interface
2. home interface
3. Class สำหรับการ implement Interface
4. ส่วนที่เป็น client (JSP or servlet) เพื่อเรียกใช้งาน session bean

ตัวอย่างการสร้าง Stateless Session Bean
Remote Interface

จะต้องทำการสร้าง method ที่ทำหน้าที่เกี่ยวข้องกับการประมวลผลทาง business process โดย remote interface จะต้อง extends EJBObject. เช่น
HelloObj.java                

package test;
import java.rmi.*;
import javax.ejb.*;
public interface  HelloObj extends EJBObject {
                                String hello() throws RemoteException;
               }
               
Home Interface
Home interface จะทำหน้าที่ในการ create a remote object. ใน class นี้จะมีเพียง methods create() เท่านั้น

HelloHome.java 

package test;
import java.rmi.*;
import javax.ejb.*;

public interface   HelloHome extends EJBHome {
                                 HelloObj create() throws CreateException, RemoteException;
               }
               
Class Implement Interface
จากตัวอย่างการสร้าง interface class ข้างต้นจะต้องทำการ implement method ใน class remote inteface สำหรับตัวอย่างนี้จะต้อง implement method hello() ดังนี้

HelloBean.java 

package test;
import java.rmi.*;
import javax.ejb.*;
import com.caucho.ejb.*;

public class HelloBean extends AbstractSessionBean {
               // no initialization needed
               public void ejbCreate() {
               }
               public String hello() {
                             return "Hello, world";
               }
}
               
จะได้ session bean แบบ stateless แล้วครับ จากนั้นก็มาสร้าง client หรือ ส่วนเรียกใช้งาน session bean ข้างต้น ตัวอย่างนี้จะให้เรียกจาก jsp

Client


สร้าง client ขึ้นมาเพื่อการร้องขอใช้บริการ หรือ เรียกใช้ EJB มีลำดับขั้นตอนการทำงาน คือ

1 . สร้าง home handle สำหรับ remote home.
2. หา home stub โดยอาศัย home handle ที่ได้จากข้อ 1
3. สร้าง remote stub โดยอาศัย home object ที่ได้จากข้อ 2
4. Client เรียกใช้งาน business process หรื method ต่างๆ ใน remote interface ที่เตรียมไว้.

EJB client จะหา home handle ได้จากการช่วยเลือของ JNDI.
ตัวอย่างต่อไปนี้จะแสดงให้เห็นถึงการเรียกใช้งาน EJB โดย JSP ซึ่งจะทำหน้าที่เป็น EJB client และเรียกใช้ method hello ของ EJB ที่ได้เตรียมไว้ด้านบนดังตัวอย่างการ เขียน JSP ได้ดังนี้

hello-ejb.jsp 

<%@ page import="com.caucho.burlap.*, test.*, javax.ejb.*" %>

<%

String url = "http://localhost:8080/ejb/hello";

// create the home handle
HomeHandle homeHandle = new BurlapHomeHandle(url);

// get the home stub
HelloHome home = (HelloHome) homeHandle.getEJBHome();

// create the remote object
HelloObj hello = (HelloObj) home.create();

%>

message: <%= hello.hello() %>



ตัวอย่างการสร้าง Stateless Local Session Remote Interface
การทำงานจะคล้ายกับ EJB ในตัวอย่างข้างต้น แต่จะทำการ extends EJBLocalObject แทน EJBObject.
CounterLocal.java 
package test;
import javax.ejb.*;

public interface CounterLocal extends EJBLocalObject {
int hit();
}

Local Home Interface
จะใช้สำหรับการสร้าง counter instance และจะมีเพียง create() methods เท่านั้น

CounterLocalHome.java 
package test;
import javax.ejb.*;

public interface CounterLocalHome extends EJBLocalHome {
CounterLocal create() throws CreateException;
}

Class สำหรับการ implement 
CounterBean.java 
package test;
import javax.ejb.*;
import com.caucho.ejb.*;

public class CounterBean extends AbstractSessionBean {
int count;

// no initialization needed
public void ejbCreate()
{
}
public int hit()
{
return ++count;
}
}

Client
สร้าง client ขึ้นมาเพื่อการร้องขอ หรือ เรียกใช้ EJB มีลำดับขั้นตอนการทำงาน คือ
1. หา home stub ด้วยการเรียกใช้บริการจาก JNDI.
2. สร้าง local stub โดยอาศัย home object ที่ได้จากข้อ 1.
3. Client เรียกใช้งาน business process จาก Object ที่ได้. 

counter.jsp 
<%@ page import="test.*, javax.ejb.*, javax.naming.*" %>
<%!
CounterLocalHome home;

// Get the home stub once and save it in home
public void _jspInit()
throws ServletException
{
try {
Context env = (Context) new InitialContext().lookup("java:comp/env");

home = (CounterLocalHome) env.lookup("local-ejb/counter");
} catch (NamingException e) {
e.printStackTrace();
}
}
%><%

// create the remote object
CounterLocal counter = home.create();
%>
hit: <%= counter.hit() %><br/>
hit: <%= counter.hit() %>



ตัวอย่าง Entity Bean
 

Home.java 
package test;
import java.rmi.*;

public interface Home extends javax.ejb.EJBHome {
public String hello() throws RemoteException;

public int add(int a, int b) throws RemoteException;
public HomeObj findByPrimaryKey(String a)
throws RemoteException, FinderException;
}

HelloObj.java 
package test;
public interface HelloObj extends javax.ejb.EJBObject {
}

HelloBean.java 
package test;
import javax.ejb.*;

public class HelloBean extends com.caucho.ejb.AbstractEntityBean {
public String ejbHomeHello()
{
return "Hello, world";
}

public int ejbHomeAdd(int a, int b)
{
return a + b;
}

public String ejbFindByPrimaryKey(String key)
throws FinderException
{
throw new FinderException("no children");
}
}

Servlet Implementation

The client in this example is a servlet. As with other EJBs, the client gets the home interface using JNDI. Since it's only necessary to do the JNDI lookup once, the servlet caches the home object as a servlet variable.

package test.entity.home;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import javax.ejb.*;
import javax.naming.*;

public class HomeServlet                extends GenericServlet {
               Home home;
 public void init() throws ServletException {
               try {
                               Context env = (Context) new InitialContext().lookup("java:comp/env");
                               home = (Home) env.lookup("ejb/home");
                               } catch (Exception e) {
                              throw new ServletException(e);
                     }
               }
 public void service(ServletRequest  req, ServletResponse res) throws IOException, ServletException {
               PrintWriter pw = res.getWriter();
               
               try {
                              pw.println("message: " + home.hello() + "");
                              pw.println("1 + 3 = " + home.add(1, 3) + "");
                              pw.println("7 + 1 = " + home.add(7, 1) + "");
                              } catch (Exception e) {
                              throw new ServletException(e);
                     }
     }
}

credit :  http://www.itmelody.com/tu/ejb.htm

Distributed System คือะไร?


จุดประสงคข์ของ Distributed System คือะไร?

Distributed System คือการสร้าง System ขึ้นมาจาก Component เล็ก ๆ ที่แต่ละ Component สามารถทำงานเสร็จสมบูรณ์ได้ในตัวของมันเอง นำประกอบกันขึ้นเป็นระบบใหญ่ระบบเดียว (Component Based นั่นเอง) จุดประสงค์ของ Distributed System มีอยู่ด้วกัน 3 ข้อด้วยกัน คือ

1. Availability คือ เราต้องการให้ระบบของเราทำงานได้ใกล้เคียง 24 x 7 มากที่สุด Distributed System ทำตรงจุดได้ เนื่องจากว่า ระบบของเราประกอบด้วย Component ต่าง ๆ ทำงานร่วมกัน ถ้ามี Component ใด ๆ ตายไป ส่วนอื่นก็ยังสามารถทำงานต่อไปได้ หรืออาจใช้ความสามารถในการทำ Clustering ของ Application Server เข้าช่วย

2. Scalability คือ ระบบของเรา วันนี้มีคนใช้ 100 คน วันหน้า ถ้าคนใช้เพิ่มเป็น 1000 คน ระบบของเราต้องสามารถรองรับได้ ใน Distributed System ก็สามารถทำได้โดยการเพิ่ม Component เข้าไป หรือทำ Cluster

3. Mainainability เนื่องจากว่า ระบบของเราประกอบขึ้นจาก Component ย่อย ๆ ก็สามารถทำให้เราดูแลจัดการระบบของเราได้ง่าย Application Server หลาย ๆ ตัว ก็สามารถที่จะ Monitor และ Tuning ตัว EJB แต่ละตัวที่รันอยู่ใน Application Server ได้ค่อนข้างละเอียด

นี่ก็เป็น Concept ทั่ว ๆ ไปนะครับ ถ้าเราจะพัฒนา Distributed System ขึ้นมา การใช้ EJB ก็จช่วยลดเวลาในการพัฒนา Distributed System ได้ค่อนข้างเยอะ Developer จะสามารถ Focus ไปที่ Business Logic ได้ ในขณะที่ Application Server จะจัดการ Service ต่าง ๆ ในระดับ Low-Level ให้ เช่น

- Transparency: Client ของ EJB ไม่จำเป็นต้องรู้แน่ชัดว่า Component ที่เราต้องการใช้งานอยู่ที่ไหน Client สามารถอ้างถึง EJB ที่ต้องการใช้ด้วยชื่อ
- Declarative Decurity: สามารถกำหนด Security Constraint ได้โดยการ Config และกำหนดได้ในระดับ Method เลยว่า ใครสามารถใช้ Method ไหน บน EJB ตัวไหนได้บ้าง
- Declarative Transaction: สามารถรกำหนด Behavior ของ EJB ในการทำงานใน Transaction ได้โดยการ Config
- Component Pooling: EJB เป็น Managed Object ซึ่ง Life-Cycle ของมัน ถูกจัดการโดย Container เราไม่จำเป็นต้องสนใจในการสร้าง และ Destroy ตัว EJB, Container สามารถขใช้ EJB จำนวนน้อย ๆ ในการทำงานให้กับ Client จำนวน ๆ มาก ๆ ได้ หรือถ้า Request เข้ามาเยอะ ตัว Container ก็สามารถ Instantiate EJB ขึ้นมาช่วยกันทำงาน ให้เพียงพอกับ Request ที่เข้ามาได้