2009년 12월 22일 화요일

동일한 요청의 다중전송 방지

골치 아픈 문제 때문에 고민하다가 너무나 간단한 해결책을 찾아냈다.
보통 웹이 아닌 클라이언트/서버 프로그램에서 클라이언트의 화면에서 '조회' 등의 버튼을 한번만 클릭하고 결과를 기다려야 하는데 사용자가 조회시간이 좀 걸린다고 여러번 클릭하는 경우가 있다. 이걸 막아야 하는 일이 생겨서 고민했는데 의외로 간단하다.

보통 서버로 요청을 보내기 위해서는 RemoteObject를 통해서 서버의 메소드를 호출하는데, 이 RemoteObjectconcurrency라는 속성이 있다. 이 속성의 디폴트값은 multiple이라서 같은 메소드의 호출응답을 받기 전에 호출해도 계속 요청이 날아가게 되어 있다. 그런데, 속성의 값을 single로 하면, 서버 메소드 호출에 대한 응답을 받기 전에 또 화면에서 호출하면 에러를 발생시킨다.
이때 발생하는 에러이벤트는 FaultEvent이고 event.fault.faultCode == "ConcurrencyError" 조건을 만족하면 조회중이니 잠시 기다려 달라는 메시지를 뿌려 주면 된다. 물론 이러는 동안에도 처음 요청은 잘 갔다가 응답까지 잘 받는다.

보니까 RemoteObject 뿐만 아니라, method 태그에도 이 속성을 사용할 수 있는 것 같다. RemoteObject에 사용하면 그 안에 포함된 메소드 전부에 적용이 되고, method 태그에 사용하면 메소드 단위로 제어가 가능한 것 같다. 테스트해 보질 않아서 더이상의 설명은 패쓰~

2009년 12월 16일 수요일

Hibernate에서 CLOB 컬럼 사용하기

Hibernate에서 오라클 CLOB 컬럼을 사용하려면,

매핑파일에서 컬럼의 type을 text로 설정하고,
[code xml] <property name="clob"  type="text" column="CLOBCOLUMN" /> [/code]

이 컬럼에 해당하는 Value Object의 변수는 String으로 선언해서 사용하면 된다.
[code java] private String clob; [/code]

혹시 이렇게 했는데 에러가 나면 최신 오라클 JDBC 드라이버로 바꿔 보는 정도의 센스는 기본~