@Override annotation 과 J2SE 6

Annotation은 Java code만으로 전달할 수 없는 부가적인 정보를 컴파일러나 개발툴로 전달할 수 있다. @Override annotationsuper classinterface의method를 override하고 있음을 명시한다. 하지만, 사소한 syntax 실수 등으로 orverride가 구현되지 않는경우가 있는데, 이는 runtime 레벨에서 오작동 등으로 드러나게 되므로 그 원인을 찾기가 쉽지 않다. 여기에@Override annotation을 사용하면 compile 레벨에서 상위 메소드를 정확히 구현하고 있는지를 체크할 수 있다.@Override annotation이 컴파일러에게 Override method임을 알려주기 때문이다.

하지만, @Override annotation을 사용했을 때, must override a superclass method라는 에러가 발생한다면, 컴파일러의 버전을 의심할 필요가 있다. J2Se 5.0, 그러니까 JDK 1.5는 @Overrider annotation을 지원하지만, super class에 대해서 지원할뿐, Interface에 대해서는 지원하지 않는다. Interface에 대한 지원은 JDK 1.6을 사용할 때 가능하다.

Interface의 method를 override하는 경우 @Override annotation을 사용하고 싶다면, JDK 1.6버전(J2SE 6.0)을 사용하도록 하라. 그렇지 않으면, annotation을 지우는 수 밖에.

by 남쉐이 | 2008/08/20 13:21 | Java | 트랙백

Ruby를 사용한 XML-RPC 호출 예제

#!/usr/bin/ruby -w
#xmlrpc-upc.rb
require 'xmlrpc/client' #xml-rpc 사용!
require 'pp'  #pretty-printer를 사용합니다.

def find_product(upc)
 server = XMLRPC::Client.new2('http://www.upcdatabase.com/rpc')
 begin
  response = server.call('lookupUPC', upc)
  pp response        # 이쁘게 출력합뉘다.

 rescue XMLRPC::FaultException => e
  puts "오류 : "
  puts e.faultCode
  puts e.faultString
 end
end

#puts find_product("001441000055").each{}
#puts find_product("001441000055")['description']
#puts find_product("001441000055")['foundsize']
#puts find_product("001441000055")['size']
find_product("001441000055")
# "Trader Joe's Thai Rice Noodles"

by 남쉐이 | 2008/03/21 16:32 | Web | 트랙백

ORA-01843: 지정한 월이 부적합합니다.

  TO_DATE('17-DEC-1980', 'DD-MON-YYYY'),  800, NULL, 20)
                       *
3행에 오류:
ORA-01843: 지정한 월이 부적합합니다. 원인을 검색해 본 결과 NLS_DATE_FORMAT이 맞지 않아서 생기는 오류였다. 위의 예제 테이블 생성(sql)에서의 NLS_DATE_FORMAT은  'DD-MON-YYYY' 인데, 시스템의 NLS_DATE_FORMAT은 다른 형식으로 설정되어 있어서 오류가 생겼다.(이 글을 작성한 후 꽤 시간이 지나고 나서 알았지만 위의 오류의 정확한 원인은 아래의 NSL_LANGUAGE 설정 문제였다. NLS_DATE_FORMAT의 설정과는 무관한 문제였다.)

 NLS_DATE_FORMAT의 확인은 다음의 명령어로 알아볼 수 있다.

select sysdate from dual;
  NLS_DATA_FORMAT을 변경하는 방법은 다음과 같다.

alter session set nls_date_format='DD-MON-YYYY';
 이렇게 수정해 주었음에도 불구하고, 에러가 났는데 원인은 입력하려는 데이터의 DATE 타입은 영문 기준인데, 현재 설정되어 있는 NLS_LANGUAGE가 KOREAN으로 설정되어 있어기 때문이다. DATE 타입이 영문으로 표기하면, 'DD-MON-YYYY' 의 경우 '22-MAR-2007'과 같은 형태가 되지만, 한글로 표기하면 '22-3월 -2007'과 같은 형태가 되기 때문에 오류가 생기는 것이였다. 다음의 명령어로 NLS_LANGUAGE를 AMERICAN으로 변경해주고 나서야 정상적으로 예제 테이블 생성 파일(demobld.sql)을 실행(?) 할 수 있었다.

alter session set nls_language='AMERICAN';

 

by 남쉐이 | 2007/12/22 16:34 | DB | 트랙백

◀ 이전 페이지 다음 페이지 ▶