2012년 8월 9일 목요일

egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl 버그

public void afterPropertiesSet() throws FdlException {
        try {

            egovProperties = new ExtendedProperties();

            // 외부파일이 정의되었을때
            if (extFileName != null) {
                refreshPropertyFiles();
            }

            Iterator it = properties.entrySet().iterator();
            while (it.hasNext()) {

                Map.Entry entry = (Map.Entry) it.next();
                String key = (String) entry.getKey();
                String value = (String) entry.getValue();

                if (EgovPropertyService.LOGGER.isDebugEnabled()) {
                    EgovPropertyService.LOGGER.debug(messageSource.getMessage(
                        "debug.properties.property",
                        new String[] {key, value }, Locale.getDefault()));
                }

                if (key == null || key.equals("")) {
                    if (EgovPropertyService.LOGGER.isErrorEnabled())
                        EgovPropertyService.LOGGER.error(messageSource
                            .getMessage("error.properties.check.essential",
                                new String[] {}, Locale.getDefault()));
                    throw new FdlException(messageSource,
                        "error.properties.check.essential", null);
                }

                egovProperties.put(key, value);
            }

        } catch (Exception e) {
            if (e instanceof FdlException)
                throw (FdlException) e;
            else {
                if (EgovPropertyService.LOGGER.isErrorEnabled())
                    EgovPropertyService.LOGGER.error(messageSource.getMessage(
                        "error.properties.initialize.reason", new String[] {},
                        Locale.getDefault()));
                throw new FdlException(messageSource,
                    "error.properties.initialize", e);
            }
        }
    }

위의 코드에서

  egovProperties.put(key, value);

이 부분이 버그이다.
이 소스를 그대로 쓰면

public class Test {
   private EgovPropertyService propertiesService;

   public void showKeys() {
       Iterator keys = soapPropertiesService.getKeys();
       while(keys.hasNext()) {
         System.out.println(keys.next());
       }
   }
}


위와 같이 했을 경우 key값이 절대로 나오질 않는다.
ExtendedProperties 가 hashMap을 상속받아서
addProperties란 메소드를 쓰지 않으면  keys 들어가질 않는다.
put으로 HashTable에서 직접 key,value을 넣으니 기능을 잘돌아가지만
getKeys로 해서 가져올려고 할 경우엔 값이 나오질 않는 버그가 있다. ㅡㅡa

만들어 놓고 테스트도 안하고 배포 하는거 같다.

2012년 8월 3일 금요일

:use :require :import 다른 점

https://groups.google.com/d/topic/clojure/c8TRHm93ZWs/discussion


  • :use 
    •  namespace 사용없이 파일에 있는 함수를 호출해 옴
    • 자바에서 static import 랑 비슷하면 
    • import static org.junit.Assert.* 와 같은
    • 사용법
      • (ns some.namespace
          (:require [clojure.contrib.json :as json])
          (:use [clojure.string :only [trim lower-case split]]
                [clojure.contrib.shell-out]
                [clojure.pprint]
                [clojure.test]))
        
  • :require 
    • namespaec을 사용하면 파일에 있는 함수를 호출해 옴. 
    • 자바에서 import 와 같음
    • 사용법
      • (ns rosettacode.24game
          (:require [clojure.string :as str]))
        
        (defn parse-infix-data
          "input '1+2+3+4'
           output (1 + 2 + 3 + 4)
           where the numbers are clojure numbers, and the symbols are clojure operators"
          [string] (map read-string (next (str/split string #""))))
        
  • :import
    • java class를 import 해 옴 
    • 사용법
      • ;; Multiple imports at once.
        (import '(java.util Date Calendar)
                '(java.net URI ServerSocket)
                java.sql.DriverManager)
        
      • user=> (import java.util.Date)
        java.util.Date
        
        user=> (def *now* (Date.))
        #'user/*now*
        
        user=> (str *now*)
        "Tue Jul 13 17:53:54 IST 2010"
        

:

2012년 8월 1일 수요일

clojure 개발 방법

leiningen 설치방법 
wget https://raw.github.com/technomancy/leiningen/preview/bin/lein
chmod +xr lein
lein self-install

leiningen 설명
http://ageldama.tistory.com/94

프로젝트 생성
lein new 프로젝트명

emacs 설정

  • starter kit 설치 
  •  M-x package-install clojure-mode


swank 추가 
emacs project.clj
 
(defproject firstClojure "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :plugins [[lein-swank "1.4.4"]]
  :dependencies [[org.clojure/clojure "1.4.0"]])

slime 실행 

M-x clojure-jack-in