Devlopment/Java

    Java 이전 버전을 받을 수 있는 URL

    http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jre-6u18-oth-JPR 막상 오라클 가서 찾으려고 하니 이전 마이너 버전을 찾기가 쉽지가 않다.오라클 홈페이지에서 제공하고 있는데도 불구하고 말이다. 찾기 힘들어서 최신 버전만 올려두었나 싶었을 정도였다.

    Java 실행

    1. Java 실행법java CLASS_FILE_NAMEjavaw CLASS_FILE_NAME bat 파일에서 자바를 실행할 경우 콘솔창이 남게 된다. 이 경우에 콘솔창을 프로그램 실행 후 사라지게 하고 싶다면 도스 명령어 start를 쓰면 된다. -사용법 (bat 파일에서)- start javaw 클래스명 2. 데몬 형태 실행 (리눅스)자바 서버를 돌릴 때 주로 하며 백그라운드로 돌리게 된다.nohup 실행명령어 1>/dev/null 2>&1 & 위에 명령어에 대한 설명이 궁금하다면 [1]을 참조 3. 데몬의 중지 (리눅스) 1. ps -ef | grep java 와 같은 형태로 실행한 프로세스의 PID를 찾는다. 2. kill -9 JAVA_PID 4. 로그 파일 모니터링 (리눅스) tail 명령어를..

    Tomcat & Java의 memory leak 분석

    Tomcat & Java의 memory leak 분석

    쓰레드풀에서 생기는 메모리 릭 분석을 하다보니 또 포스팅하게 되었다.생각해보면 학부 이후 Java 개발을 시작한 2008년도부터 늘 걱정되는 부분이다. JVM 덕분에 메모리 관리를 하지 않아도 되서 자바가 편하지만, 반대로 메모리 문제가 생기면 정말 짜증나게 하는 것이 또 자바이다. 가끔은 내가 왜 C/C++만을 하지 않았을까 하는 후회가 들 때도 있다. C/C++을 이용하여 Visual Studio에서 개발하는 것이 그립기도 하고 순수 MFC 개발자가 부러울 때가 종종 있다. 잡설은 집어치우겠다.. 메모리 릭 현상을 분석하다가 로그의 한계가 드러났다.자세하게 분석을 해봐야겠다고 판단하였고 다시 한번 Eclipse MAT(http://www.eclipse.org/mat/)을 사용해봐야겠다고 판단되었다. ..

    Tomcat 및 Java ThreadPool에서 memory leak 현상

    Apache Tomcat6에서 구동하던 웹 애플리케이션에서 다음과 같은 에러를 발견하였다. 심각: The web application [/ AP_NAME ] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.2012. 7. 12 오후 1:58:59 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads심각: The web application [/ AP_..

    자바 기본 메소드의 구현

    toString, equals, hashCode메소드를 구현하는 방법에 대해 적는다.Effective Java에서 보면은 구현해야 할 이유와 잘못된 구현과, 올바른 구현에 대해서 알 수 있다. 예제.toString은 마음대로 구현해도 상관 없다.@Overridepublic boolean equals(Object obj) {if(obj == null || !(obj instanceof AtinStory)) return false; AtinStory inf = ( AtinStory ) obj;return id.equals(inf.id) &&name.equals(inf.name) &&index == inf.index &&subnetIp.equals(inf.subnetIp) &&netmask.equals(inf..

    MyBatis NumberFormatException 문제

    MyBatis를 이용해서 개발중에 NumberFormatException이 발생했다. 발생한 위치는 다이나믹 쿼리에서 발생했는데 그 이유를 알지 못해서 엉뚱한 곳에서 찾다가 문제를 알게 되었다. NumberFormatException의 발생 위치 이 부분인데 iBatis, myBatis를 개발한 사람들이라면 다 알 것이다.문자열 비교시에 ==를 하면 안되고 eq를 써야 한다는 것을 말이다. Java에서 문자열 비교시에 equals를 써야 하듯이 iBatis, myBatis에서는 eq를 써야 한다.iBatis, myBatis에서는 문자열에 따라서 알아서 내부적으로 파싱처리를 한다. 간단한 문법을 까먹어서 잠시 고생을 했다. 그런데 내 기억상으로는 eq로만으로 iBatis에서는 되었던 것 같은데 myBati..

    Java간의 통신

    근래 Java간의 통신때문에 고민하고 있다. 고대부터 전해오던 RMI란 유물이 있지만 이 녀석은 은근히 마음에 들지 않는 녀석이다. 현재 Java간의 통신을 만들 두 시스템은 WAS 없이 데몬으로 실행되는 서버다.서버1은 GUI와 TCP통신을 한다. 그러나 서버1과 서버2를 TCP통신을 하기에는 껄끄러운 면이 많다. 아직 고민중이지만, 통신을 하기 위해 고민했던 사항들을 나열해본다. 1. RMI 자바에서 표준으로 지원해주고 직렬화가 잘 되어있어서 편리한 면은 있지만 방화벽이 있는 경우에 문제가 있고 자바 서버(rmiregistry)를 실행해줘야 하며 통신을 하기 위한 클래스를 stub파일로 생성해주어야 하는 번거로운 면이 있다. Spring에서도 RMI를 지원해준다고 해서 찾아보았지만 자바 서버를 실행시..

    Netty서버에서 1024이상 받지 못하는 문제의 해결법

    Netty를 이용하여 Java 서버를 개발하고 있다.그런데 클라이언트쪽에서 새로운 문제를 얘기해주었다. 서버로 넘기는 데이터의 크기가 크면 처리가 되지 않는다는 것이다. 문제를 찾아보니, Netty에서 기본적으로 1024이상 받지 못하게 되어 있었다.Netty의 기본 리시브 사이즈가 1024로 설정되어 있는 것 같은데 설마 그것에 대한 수정도 안되게 만들지는 않았으리라 생각되었다. 다만 문제는 Netty에 대한 자료가 거의 없기 때문에 애를 먹었다.당연한 얘기지만 국내에서 이를 이용한 것에 대한 문서가 전무했고 외국 웹 사이트를 찾다가 해결했다.(역시 구글신) 이 문제를 해결하기 위해 몇 번의 문서를 주고받으며 사람들이 해결책에 대해 얘기하고 있었고 결국 마지막 문서에서는 누군가가 해결법을 제시했다. b..

    XmlGenerator - Java에서 XML 생성

    프로젝트 도중에 XML 파싱 및 생성을 해야 할 일이 생겼다. 하드 코딩하기에는 별로 마음에 안 들고 쓰기 편하게 생성해주는 클래스를 하나 만들었다. Dom방식으로 하며, String으로 값을 받아서 해당하는 엘리먼트에 엘리먼트나 속성을 추가하는 형태이다. 최종 산출을 창에 뿌리거나 파일로 뽑아내게 해놓았다. package com.galimit.gwf.plugin; import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationExc..

    JAVA.LANG.CLASS를 통한 동적 객체 생성

    간혹 오픈소스의 라이브러리라든지 다른 애플리케이션의 소스를 살펴볼 때, 예를 들어 JDBC와 연관해서 볼 때 A.class를 파라미터로 넘기는 형태를 본 적이 있을 것이다. 또는 Class.forName()을 통하여 클래스의 이름을 넘기기도 한다. 이러한 것은 java.lang.class를 살펴보면 알 수 있게 됀다. Example) class B { B(String str, int n) { System.out.println(str + ":" + n); } } public static void main(String args[]) throws Exception { B.class.getDeclaredConstructor(String.class, int.class).newInstance("a", 5); Cla..