레이블이 싱글톤인 게시물을 표시합니다. 모든 게시물 표시
레이블이 싱글톤인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 24일 목요일

ORACLE ROWNUM을 이용한 테스트 대량 데이터를 가진 테이블 만들기

ORACLE ROWNUM을 이용한 테스트 대량 데이터를 가진 테이블 만들기 

connect by 를 잘 이용하시면 됩니다.

CREATE TABLE emptest
    AS
      SELECT ROWNUM                    AS id
      ,      MOD(ROWNUM,100)            AS grp  --2000개씩 그룹핑
      ,      DBMS_RANDOM.STRING('u',5)  AS val  --랜덤 문자5개
      ,      DBMS_RANDOM.STRING('u',30) AS pad  --랜덤문자 30개
      FROM  dual
      CONNECT BY ROWNUM <= 2000000  --200만건 만들자... 

2013년 10월 21일 월요일

자바 싱글톤, 쓰레드 예제

자바 싱글톤, 쓰레드 예제

public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("Sington Class의 인스턴스 생성!");                   
    }
    public static Singleton getInstance() {       
        return singleton;
    }                                        
}
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");       
        Singleton obj1 = Singleton.getInstance();
  Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
   System.out.println("obj1 == obj2");
        }
  else {
   System.out.println("obj1 != obj2");
  }
    }
}
 
=======================================
 
 
public class Singleton {
    private static Singleton singleton = null;
    private Singleton() {
        System.out.println("인스턴스 생성...");
        slowdown();                            
    }
    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
    private void slowdown() {                  
        try {                                  
            Thread.sleep(10);                
        } catch (InterruptedException e) {     
        }                                      
    }                                          
}
 
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");
        new Main("A").start();
        new Main("B").start();
        new Main("C").start();
        System.out.println("End.");
    }
    public void run() {
        Singleton obj = Singleton.getInstance();
        System.out.println(getName() + ": obj = " + obj);
    }
    public Main(String name) {
        super(name);
    }
}

2013년 8월 5일 월요일

[자바프레임워크,자바교육,오라클자바교육]Struts ActionForm(스트럿츠 액션폼), 오엔제이프로그래밍

Struts에서 ActionForm 처리 



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr 


ActionForm 객체는 클라이언트에서 입력한 데이터를 비즈니스 계층으로 전달하는 역할을 합니다. Struts Framework에서는 사용자의 입력 화면에서 입력한 데이터를 자동으로 모아 ActionForm 인스턴스의 setter를 이용해 설정하며 이를 통해 비즈니스 계층으로 데이터를 전달 할 수 있습니다.

여기서 한가지 주의 할 점은 ActionForm을 비즈니스 계층으로 직접 전달 하기 보다는 적절한 DTO(Data Transfer Object)를 생성하는 것이 훨씬 효율적 입니다.

스트럿츠에서는 다음과 같이 ActionForm 을 처리 합니다.

1.        Action의 매핑 정보를 확인 하고 Action이 설정 되어 있는지 확인 합니다. Action 매핑의 name 속성에 해당 하는 <form-bean > 매핑이 있는지 확인 하는 겁니다.

<!-- ========== Form Bean Definitions ================================ -->
    <form-beans>
        <form-bean name="loginForm" type="login2.LoginForm">                 
            <form-property name="pwd" type="java.lang.String" />
            <form-property name="id" type="java.lang.String" />           
        </form-bean>           
    </form-beans>



<!-- ========== Action Mapping Definitions ============================ -->
    <!--valiedate를 true라고 함으로써 LoginForm의 validate가 호출됩니다.      -->
    <action-mappings>
            <!-- loginAction에 대한 정의 -->
        <action         
                path="/LoginSubmit"
                type="login2.LoginAction"
            name="loginForm"                       
            validate="true"
            input="/login.jsp"
        />
       
        <!-- logoffAction에 대한 정의 -->
        <action         
                path="/logoff"
                type="login2.LogoffAction"
            name="logoffForm"                       
            validate="false"         
        />                     
    </action-mappings>


2.        메모리에 ActionForm 인스턴스가 있는지 확인하여 이미 만들어진 타입이 같고 scope가 적당 한 것이 있으면 재사용하고 없으면 새로 인스턴스를 생성 합니다. 새 인스턴스를 만드는 경우엔 scope 속성이 있다면 속성에 따른 scope에 저장 합니다.

3.        ActionForm의 reset 메소드를 호출 합니다.
       
        public void reset(ActionMapping mapping, HttpServletRequest request) {
                pwd = "";
                id = "";
        }

4.        ActionForm의 setter를 통해 요청 파라미터 값을 ActionForm에 입력 합니다.

public void setId(String id) {
                this.id = id;
        }
       
        public void setPwd(String pwd) {
                this.pwd = pwd;
        }

5.        validate속성이 “true”로 설정 되어 있으면 validate() 메소드를 실행 하고 에러가 있다면 에러를 반환 합니다.

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
                ActionErrors errors = new ActionErrors();
               
                if((id == null) || (id.length()<1)) {
                        errors.add("error.id.required", new ActionError("error.id.required"));
                }
               
                if((pwd == null) || (pwd.length()<1)) {
                        errors.add("error.pwd.required", new ActionError("error.pwd.required"));
                }
               
                return errors;                       
        }


폼 데이터를 전송 하는 모든 HTML 페이지에서 ActionForm 사용해야 하는데 HTML의 폼필드의 이름과 ActionForm의 속성의 이름이 일치한다면 ActionForm을 여러 페이지에서 사용 가능 합니다.

중요한 메소드는 reset(), validate() 메소드 인데 하나씩 보도록 하죠~

reset() 메소드의 원형은 다음과 같습니다.

public void reset(ActionMapping mapping, HttpServletRequest request);

스트럿츠의 ActionForm 클래스의 위 두메소드는 기본적으로 아무 기능도 수행 하지 않으므로 ActionForm을 상속한 하위 클래스에서 필요하다면 재정의(Override) 해야 합니다.

Controller는 요청 파라미터에 있는 ActionForm의 인스턴스에 입력 하기전에 reset() 메소드를 수행 합니다. 결국 reset이라는 것은 초기화의 의미이며 폼빈의 인스턴스를 공유하는 경우엔 중요한 부분 입니다.

Controller는 요청값들이 ActionForm의 setter에 의해 설정 되면 validate가 “true”로 설정 된 경우에는 valiedate() 메소드를 호출 하는데 이 메소드에서는 사용자의 입력 값에 대한 validation check를 수행 합니다. 오류가 있다면 ActionError 객체에 담아서 리턴 합니다. ActionForm에서의 validate()는 비즈니스 로직 이라기 보다는 입력 값의 단순한 검사 정도로 보시면 되며 실제 들어온 값에 대한 논리적인 타탕성등 여러가지 검사를 하기 위해서는 별도의 비즈니스 로직을 만들어 처리해야 합니다.

validate() 메소드의 원형은 다음과 같습니다.

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request); 

2013년 8월 2일 금요일

JAVA

"자바 디자인 패턴 입문" 이라는 책의 내용을 정리하여 올립니다.

시스템내에 단 한 개만 존재하는 것을 프로그램으로 표현시 클래스의 인스턴스를 하나만 만든다.
 지정한 클래스의 인스턴스가 하나만 존재하고 이를 프로그램 상에서 보장하는 패턴을 Singleton Pattern이라 한다.
 다수의 인스턴스가 존재하는 경우 상호간에 영향을 주어 예기치 못한 오류가 발생할 확률이 높으므로 이를 제한하는 경우에 사용



 예제의 Singleton Class는 인스턴스를 하나만 만들고 static으로 singleton이 정의되어 클래스가 메모리에 로드될때 한번 초기화 된다. 

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


생성자가 private으로 되어 있으므로 외부에서 new Singleton()을 하게되면 컴파일 시에 오류가 발생한다.Singleton 패턴의 경우 개발자가 부주의 하더라도 인스턴스는 하나만 존재


// Singleton.java
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("인스턴스 생성!");                   
    }
    public static Singleton getInstance() {       
        return singleton;
    }                                         
}


//Main.java
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");       
    Singleton obj1 =    Singleton.getInstance();
      Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
System.out.println("obj1 == obj2");
        }
        else { System.out.println("obj1 != obj2");
        }
    }
}