nGrinder에서 Groovy script 사용시 java.lang.UnsupportedOperationException 발생

nGrinder에서 Groovy Maven Project를 만들어 사용할 때, 특히 IntelliJ를 사용하려면 Import Groovy Maven Project in IntelliJ를 참조하면 된다.

잘 될 것 같았는데 Unit test에서 시작부터 아래와 같은 에러가 발생했다.

한참을 검색해본 결과 Eclipse의 경우 build 설정시 Groovy 라이브러리를 지우는 과정이 있다는 것을 알게 되었다.
혹시나 IntelliJ에서도 같은 문제일까 해서 Groovy libraries를 모두 지웠더니(File > Project Structure) 아무 문제 없이 잘 작동하기 시작했다.

Groovy를 사용하면 종종 예상치 못한 일을 만나게 된다고 하는데 – 예를 들어 “Using Groovy? Prepare for the unexpected!” – 이런 일을 겪을 때면 아무래도 이 언어의 ‘한계’ 같은 것이 느껴진다.

Java 7의 Project Coin 중 몇가지

Java 7 (그리고 8)에 포함된 Project Coin 중 유용하지만 (상대적으로) 자주 언급되지 않은 몇 가지.

Binary Literals

Java 7 이전에는 binary 값으로 무언가 하려 하면 ‘parseX’ 메소드를 써야 했다.
예를 들어 “1100110”을 십진수 102로 변수에 지정하려면 아래와 같았다.

하지만 Java 7 부터는 아래와 같다. (왠지 너무나 당연하다)

또다른 재미있는 것 하나는, 긴 숫자 사이에 ‘_’ (underscore)를 넣어 표현할 수 있다는 것이다. (Ruby에서 아이디어를 가져왔다고 한다)
이 ‘_’는 compiler가 나중에 다 지워버리기 때문에 상관없다.

아래 예를 보면 가독성이 확실히 차이남을 알 수 있다.

TWR(Try-with-resources)

Project Coin 쪽에 본 기능에 대한 제안이 도착했을 때 밝혀진 놀라운 사실 하나는, JDK 내 close()를 사용한 code 60% 이상이 bug를 내포하고 있었다는 것이다. (사실 사용한 resource를 100% 확실하게 close 하는 것이 쉽진 않다)

아래 내용은 TWGJD(The Well-Grounded Java Developer, 2013)에서 가져온 것이다.

코드를 보면 InputStream이나 File (즉 OutputStream) 어느 쪽에서도 뭔 일이 벌어질 수 있고, 특히 이런 식으로 exception이 엉켜있게 되면 문제가 생겼을 때 처리하기 여간 성가신 것이 아니다.

그래서, 아래와 같은 문법이 등장했다.
즉 exception이 발생하게 되면 자동으로 모든 열려있는 resource를 close 해준다.

한가지 주의할 점은, 아래와 같은 code는 ObjectInputStream 생성 중 에러가 발생할 경우 FileInputStream을 close 하지 못할 수 있다.

해결책은, 좀 덜 멋있더라도(?) 분리해놓으면 된다.
아래와 같이.