Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Property Utility Examples
 
프로젝트시에 xml이 아닌 Properties클래스를 이용한 환경설정 및 데이터로드에 대한 내역을 factory및 object에 대한 메모리 저장을 이용하여 효과적으로 읽어낼 수 있는 방안을 마련해보도록 한다. ( 2003/03/01 ) 450
Written by ienvyou - 최지웅
1 of 2
 
이번 글에서는 예전에 범용적으로 사용하고자 했던 프로퍼티에 
대한 예전에 프로젝트에 적용했던 내용을 적고자 한다. 사실 요즘이야 xml을 기본으로 하여
설정하는 것이 일반적이지만 불과 1~2년전만 해도 property또는 resource bundle을 이용할 수
없던 시절(?) 이 있었다.

그 당시 프로퍼티를 그때 그때 끌어들이는 무식한 방법이 아니라 cache기법을 이용하여
우리가 사용하게 될 모든 형태의 내용을 메모리에 올려놓는 방법으로 어떻게든 속도차를 
줄이려 했다. 왜냐하면 어차피 프로퍼티는 파일에 직접 writing된 형태이기 때문에 
읽어들이는 시간및 로드시간이 만만치 않기 때문이었다. 너무도 당연하 이야기를 하는건
아닌지 모르겠다.

하여간 이러한 기반에 한꺼번에 쓰이는 모든 프로퍼티속성을 읽어들여 팩토리 형태의
객체에 저장한 후 이후 호출이 있을 경우는 cache가 존재하는지 안하는지의 여부를 factory에 
의하여 판별한 후 처리가 될 수 있도록 하였다.

확장된 형태의 프로젝트에서는 해당 프로퍼티에 대한 분산 객체를 정의하여 여러대의 box가 
존재할 경우 하나의 box에서 property의 변경이 탐지될 경우 그 정보를 다른 box로 
전파(propagation)시키는 클래스들을 작성한 적이 있다.

이 클래스들은 그러한 개념의 가장 기본적인 클래스들의 집합이며, 총 6개의 클래스로
테스트되어질 수 있다.

우선 가장 기본골격인 PropertyManager클래스부터 보도록 한다.

1. PropertyManager.java

package com.common.util;

import java.util.Properties;
import java.util.Hashtable;
import java.util.Date;

public class PropertyManager {

private static PropertyFactory factory = new PropertyFactory();
private static Hashtable propertyTable;
private static PropertyManager manager;

static{
	synchronized(PropertyManager.class){
		propertyTable = factory.getLoadProperties();
		System.out.println("[" + new Date().toString() + "]  Property loading......");
	}
}

private PropertyManager() {}

/**
* WebPage, Query, Message, Environment loading
*/

public static PropertyManager getInstance() {
	if(manager == null) {
		manager = new PropertyManager();
	}
	return manager;
}


public static CommonProperties getProperties(String propertyName){
	return findProperties(propertyName);
}

public static Hashtable getPropertyInfo(){
	return propertyTable;
}
// 해당 factory객체에서 로딩한 프로퍼티가 현재 존재하는지를 확인한다.
private static boolean checkInstance() {
	return false;
}
// 해쉬테이블안에 저장된 각각의 프로퍼티를 검색하여 
//원하는 프로퍼티를 사용할수 있도록 리턴한다.
private static CommonProperties findProperties(String propertyName) {
	CommonProperties prop = (CommonProperties) propertyTable.get(propertyName);
	return prop;
}

};

위의 클래스에서 핵심적인 메소드는 당연히 static initializer와 getProperties이다
static initializer에서는 최초로 로드되어질  프로퍼티들에 대한 정보를
끌어들어 자신이 가지고 있는 static형태의 저장소(repository)에 저장하도록 한다.


		
Written by carouser 2001-07-12
 
1 2
References
 
This article Source Code : properties.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD