제일 처음 자바를 시작했을 때, 에러(Error와 Exception 나뉘지만 에러로 표기합니다)화면을 보고 깜짝 놀랬습니다.
2008-10-06 13:27:06 ApplicationDispatcher[/] Servlet.service() for servlet download threw exception java.lang.IllegalStateException: getWriter() has already been called for this response at org.apache.coyote.tomcat5.CoyoteResponse.getOutputStream(CoyoteResponse.java:568) at org.apache.coyote.tomcat5.CoyoteResponseFacade.getOutputStream(CoyoteResponseFacade.java:148) at kr.pe.okjsp.DownloadServlet.doGet(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at kr.pe.okjsp.ControllerServlet.doGet(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) ... 중략 ... at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:619)
저런 식으로 우수수 떨어지는 에러메시지는 초보에게는 공포감을 일으키기 충분합니다. "내가 그 정도로 잘못했는지 정말 몰랐어요"라는 감정이 생기죠. 사실 에러메시지의 상단 2~3줄만 봐도 문제의 원인을 파악할 수 있는데, 스택트레이스(Stack Trace)라 불리는 사정없는 에러메시지는 정말 "안 좋아"였습니다.
Users > Ecosystems > Members > Committers 사이클의 의미가 새롭게 다가옵니다.
일반적인 서비스는 제공자(Provider)와 소비자(Consumer)로 나뉩니다. 하지만 다른 제품들은 생태계(Ecosystem)를 만들어냅니다. 블리자드의 스타크래프트를 떠올려 볼 수 있습니다. Map을 사용자가 직접 만들어서 배틀넷에서 플레이할 수 있습니다. 놀이터를 만들어서 자유롭게 게임을 즐길 수 있도록 한 것입니다. 시나리오 모드에 감격하고 끝나면 소비에서 마치게 되지만 배틀넷에서 Use Map Setting 모드의 게임들은 상상초월의 재미를 가져다 주게 됩니다. 물론 모든 사용자가 만든 맵들이 공평하게 대우받지는 못합니다. 재미 요소를 가진 맵들이 생존하고 주도권을 잡게 되는 것이죠.
이클립스 플랫폼이 추구하는 것도 같다고 봅니다. PDE(Plugin Development Environment)를 제공해서 스스로 진화할 수 있는 통로를 열어놓았습니다.
"너희는 주는대로 받아 먹어라"는 서비스와 "자 이제 같이 함께 놀아봅시다 당신의 생각은 어떤 것인가요"라고 판(플랫폼)을 펼쳐 놓는 것은 다릅니다.
http://findbugs.sourceforge.net 메릴랜드(Maryland) 대학에서 공개한 도구입니다. 자바의 버그패턴에 맞춰서 자바 소스코드를 컴파일된 바이트코드로 정적 분석한 후에 어느 부분이 문제가 되는지 자동 리포팅해줍니다.
누군가 내 코드를 검사한다는 것이 개발자에게는 탐탁치 않지만 임신진단시약처럼 자가테스트를 한다면 다른 얘기가 되겠죠. 남에게 보이기 전에 자신의 코드를 깔끔하게 만들 수 있으니까요.
제 pc는 jdk를 압축을 푼 상태라 jnlp 확장자 파일에 대한 연결프로그램이 지정되지 않았습니다. 때문에 java findbug.jnlp 라고 실행하니 답이 없군요. %JAVA_HOME%\bin 아래 있는 여러 파일 중에 시도를 해보니 javaws 가 제대로 실행이 되더군요.