테스트케이스 클래스에 @Trasactional 을 선언하여 트랜잭션을 자동으로 복구하려고 하는데
iBatis에 의해서 실행되는 프로시저 내부에 트랜잭션Trasaction이 걸려 있는 경우, 
 org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [ZZZZZ]; error code [7713];   
--- The error occurred in .....xml.  
--- The error occurred while applying a parameter map.  
--- Check the ...-InlineParameterMap.  
--- Check the statement (query failed).  
--- Cause: com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'honeymon...runTransactionInProcedure' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.
; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in .....xml.  
--- The error occurred while applying a parameter map.  
--- Check the ...-InlineParameterMap.  
--- Check the statement (query failed).  
--- Cause: com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'honeymon...runTransactionInProcedure' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.
위와 같은 메시지가 나온다. trasaction mode를 사용해야 한다고 하는데, 그 명령을 실행하는 메소드 상부에
 @Transactional(propagation=Propagation.NOT_SUPPORTED)
  이것은 특수한 상황의 예이며, 또다른 경우가 나타난다고 한다.
위의 경우는, Sybase DB 를 사용하는 시스템에서 iBatis를 이용하여 DB를 제어하는 경우에 생기는 문제였다. 

그때그때 달라요!!! 뭐냐!!
 
허니몬의 참가 트랙 및 현장 스케치
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 2번째 Track : 도메인주도 개발(DDD)
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 3번째 Track : Realtime Web application with Java
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 4번째 Track : Framework Enginering
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 5번째 Track : MongoDB with Play!

  지난 6월 19일, 삼성동 COEX에서 11번째 한국자바개발자컨퍼런스(http://kjdc.org/) 열렸습니다. KT가 주관사로 참여하고, 행사주관을 위한 이벤트기업과 계약하면서 행사진행이 이전의 컨퍼런스에 비해서 매끄러워졌다고 이야기들을 하시더군요. ^^

  원래는 MS에서 팝콘부스를 마련하여 맥주와 팝콘을 제공하려고 했었는데, COEX측에서 이를 거부하면서 팝콘돌이가 기운이 빠져있는지 계단에 널부러져 있습니다. 팝콘돌이가 열심히 돌아다니면서 개발자들과 어울려보려고 했지만, 우리나라 개발자들의 특성 중 하나인 '조용하고 내성적임'으로 인해 호응이 없자 기운빠져하는 모습이 역력했습니다.

  우리나라 개발자들도 잘 놀면 참 좋을텐데 말이죠. ^^;

  참고로, 저는 잘 못 놉니다. >ㅅ<);;;;

  계단 한구석에 앉아 넷북을 꺼내들고 뚜닥거리고 있는 사이에, 저와 비슷하게 도착한 이들이 들어가지 못하고, 행사장 입구에 있는 계단에 앉아서 트랙이 끝나기를 기다리고 있습니다. 가끔 해외 컨퍼런스에 참여한 개발자들이 보내오는 미국이나 해외컨퍼런스의 모습을 보면, 개발자들이 삼삼오오 모여 편안한 의자나 바닥에 앉아서 개발에 대한 이런저런 이야기를 나누면서 맥주한잔 하는 모습이 정말 부러웠는데, 그런 분위기를 연출할 기회가 잠시 주워졌었습니다. 하지만, 고품격(?) 전시회장인 코엑스에서는 행사관람객들이 아무곳에나 널부러져있는 것을 용납하지 않는 시설구조를 갖추고 있습니다. ㅡ_-); 어디 쪼구려앉아 있으면 시설물과의 부조화에 의한 위화감이 참 대단합니다.

이번 컨퍼런스는 크게 3개 주제로 진행이 되었습니다. 자바, 클라우드 컴퓨팅, 실습 의 주제로 7곳에서 50분씩 5개, 총 35개의 발표가 진행이 되었습니다. 오픈소스인 NoSQL에 속하는 MongoDB 쪽에 대한 많은 관심이 있었습니다. 아마도 클라우드 컴퓨팅, SNS의 대용량 데이터 처리에 대한 다양한 사례들이 나오면서 큰 유행을 일으키는 중이고, 앞으로도 NoSQL DB를 바탕으로 하는 다양한 서비스들이 출시될 것입니다.

  1500여 명의 개발자들이 참여한 이번 컨퍼런스는 제법 사람들로 북적였습니다. ^^; 저 사람들과 얼굴을 익히고 알게된다면 얼마나 좋을까요? 저에게는 살짝 무리일지도 모르겠습니다. 3개월동안 얼굴을 안보면, 얼굴과 이름을 까먹는 캐쉬메모리 기억력의 소유자거든요.... 헙...

한빛미디어에서 저자사인회를 주최하였습니다. 책을 구매하거나 가져온 책에 사인을 받으면 고급의 머그컵을 사은품으로 주는 사인회였습니다. 다만 아쉬운 점이라면, 한빛미디어가 행사장 안쪽에 부스를 개설하면서, 사인회도 구석에 마련되어 쉽게 발견할 수 없었다는 겁니다.  아는 분들이 모여 있어서 찾아가보니 저자분들의 사인회가 진행되고 있었습니다. 이렇게 구석에 마련된 사인회를 보고'헐~'하고 한탄이 절로 나오더군요.

  이왕 사인회를 할거면, 행사장을 향해서 자리를 잡았으면 더 많은 사람들이 찾아오고 저자분들도 많은 독자들과 만날 기회가 있었을텐데...


아마, 이날 코엑스에서 검은 백팩을 메고서 조용한 성격을 가졌을 것으로 보이는 사람들을 보셨다면,
99.99% 개발자였을 겁니다.


  많은 개발자들과 '우리나라 개발자' 들에 대한 이야기를 나누다보면 공통적으로 나오는 이야기가 있다.
'우리나라 개발자들은 조용하고 즐길 줄을 모른다.'
  오늘 JCO에서는 이례적으로 여성 아이돌그룹 '달샤벳'의 공연이 있었다.
http://yfrog.com/6fkhxz
  일반 대학 축제나 공연에서였다면 달샤벳은 열광적인 사람들의 환호성을 받으면서 공연을 마쳤을지 모른다.
기조연설이나 공연은 건너뛰고 와서, 사람들의 반응이 궁금해 물어보니, "팔짱을 끼고 조용히 경청했어요."라고 이야기해주는 이야기를 들으며 피식 웃음을 지을 수밖에 없었다. 그 아이돌 그룹은 얼마나 어색했을까?
  모두 팔짱을 켜고 조용히 그들의 춤사위에 집중하고 있었던걸까? ^^;;
  그나마 내가 만나는 많은 개발자들은 자신의 이야기를 상대에게 전하는 것에 어색해하지 않는다. 자연스럽게 자신의 생각과 기술에 대한 이야기들을 털어놓을 수 있는 흔하지 않은 개발자들이다. 한창 많은 것을 듣고 보고 배워야할 지금 내 입장에서, 그런 개발자들이 주변에 많다는 것은 너무나 이로운 일이다. ^^
   개발자는 자신이 배우고 알게된 것을 누군가에게 전하는 것을 즐길 수 있을 때 비로소 진정한 고수의 반열에 들어서게된다.
자신만 잘 아는 것은 결코 고수라 할 수 없다.
나도 내년에는 저 앞에 서서 발표를 하고 싶어졌다.

Java 에서 제공하는

자바를 비롯한 언어가 가지고 있는 특징에 대해서 이해하기 위해서는 사양설명서(Specification, 줄여서 Spec)를 읽는 만큼 효과적인 것이 있을까...?

하지만, 전부 영어다! 당연하지. 자바를 비롯한 언어들의 대부분이 영어권에서 개발되었으니까 말이다.

개발자에게 영어란 피할 수 없는 숙명과 같다. 피하지 말고 즐기자. 그래서 아침 저녁 출퇴근 길에 굿모닝팝스를 들으며 귀를 열어보려 시도하고 있다.

 

JVM 의 위치

출처 : http://download.oracle.com/javase/6/docs/

Java_SE_6_Documentation_-_Google_크롬_005.png

자바는 윈도우, 리눅스, 유닉스, MacOS 등 다양한 환경에서 실행될 수 있는 멀티플랫폼 언어라고 한다. 이는 각 운영체제 환경에서 실행되는 JVM이 존재하기 때문이며, 특별한 경우를 제외하고는 일반적인 언어들의 경우 별도의 수정없이 서로다른 운영체제에서 실행이 가능하다는 장점을 가지고 있다. 또한 웹서버 운영환경에서 개발환경으로 Java를 기반으로 하는 WAS들이 널리 보급되면서 국내외적으로 많은 사용자와 개발자를 보유하고 있는 강력한 영향력을 가진 언어이기도 하다.

이 글은 스프링노트에서 작성되었습니다.

자바성능을결정짓는코딩습관과튜닝이야기
카테고리 컴퓨터/IT > 프로그래밍/언어 > JAVA > JAVA
지은이 이상민 (한빛미디어, 2008년)
상세보기

- Collections Framework enhancements : http://download.oracle.com/javase/1,5.0/docs/guide/collections/changes5.html
Collection
Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스
SortedSet : 오름차순을 갖는 Set 인터페이스이다.
HashSet : 데이터를 해쉬 테이블에 다믄 클래스로 순서 없이 저장됨
TreeSet : red-black 이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다. HashSet보다 성능상 느리다. 데이터를 담으면서 동시에 정렬할 때 유용하다.
LinkedHashSet : 해쉬 테이블에 데이터를 담는데, 저아된 순서에 따라서 순서가 결정된다.
List : 순서가 있는 집합을 처리하기 위한 인터페이스 - 인덱스가 있어 위치를 지정하여 값을 찾을 수 있다. 중복을 허용하며, List 인터페이스를 상속받는 클래스 중에서 가장 많이 사용하는 것은 Vector이다
Vector : 크기를 객체 생성시에 지정할 필요가 없는 배열 클래스이다.
ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않다.
LinkedList : ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행한다.
Queue : 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스 - 기본적으로 FIFO따름
‣ java.util 패키지에 속하는 LinkedList와 priorityQueue
‣ java.util.concurrent 패키지에 속하는 컨커런트 큐 클래스
‣ Queue 들
PriorityQueue : 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나오도록 되어 있는 큐
LinkedBlockingQueue : 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐
ArrayBlockingQueue : 저장되는 데이터의 크기가 정해져 있는 FIFO 기반의 블로킹 큐
PriorityBlockingQueue : 저장되는 데이터의 크기가 정해져 있지 않고, 객체의 생성 순서에 따라서 순서가 저장되는 블로킹 큐
DelayQueue : 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐
SynchronousQueue : put() 메소드를 호출하면, 다른 스레드에서 take() 메소드가 호출될 때까지 대기하도록 되어있는 큐이다. 이 큐에는 저장되는 데이터가 없다. API에서 제공하는 대부분의 메소드는 0이나 null을 리턴한다.
•  Map : 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스 : 중복되는 키를 허용하지 않는다.
SortedMap : 키를 오름차순으로 정렬하는 Map 인터페이스
Hashtable : 데이터를 해쉬 테이블에 담는 클래스 이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이 클래스를 사용
HashMap : 데이터를 해쉬 테이블에 담는 클래스이다. Hashtable 클래스와 다른 점은 null을 허용한다는 것과 동기화되어 있지 않다는 것
TreeMap : red-black 트리에 데이터를 담는다. TreeSet과 다른 점은 키에 의해서 순서가 정해진다는 것이다.
LinkedHashMap : HashMap과 거의 동일하며 이중 연결 리스트(Doubly-linked list)라는 방식을 사용하여 데이터를 담는다는 점만 다르다.

Sun에서 정리한, 각 인터페이스별로 가장 일반적으로 사용되는 클래스. 가장 안정적인 클래스로 선정된 녀석들
 Interface  클래스
 Set  HashSet
 List  ArrayList
 Map  HashMap
 Queue  LinkedList



  프로그래밍을 하다가 나도 모르게 사용하고 있던 ArrayList, HashMap, HashSet을 보면서 '왜 이 녀석들을 쓰는거야?'라고 느끼다가 이 책에서 어느정도 정리가 되는 느낌이다. 처음에는 이 책의 가치를 잘 몰랐지만, 개발 프로젝트를 진행하면서 조금씩 조금씩 이 책이 지닌 가치가 눈에 보인다. 차근차근 이 책을 읽어가면서 내 것으로 만들어보자.

오랜만에 JCO가 열립니다. ^^ 자바 개발자분들이 오셔서 많은 이야기들을 듣고 느낄 수 있는 기회가 되었으면 합니다. ^^


+ Recent posts