본문 바로가기

Java

[JAVA] 클래스 hot deploy #2 라고 하기까진 뭐하고... 그냥 classloader를 바꿔버리는 것을 이용해서 해보았다. 예전에 실패했을 때의 원인이었던것... (http://devyongsik.tistory.com/274) 기본적으로 클래스패스에 있던 클래스는 이미 시스템클래스로더가 클래스를 로딩한 상태이기 때문에 그 하위 클래스로더에서 아무리 URLClassLoader를 사용해 바꿔치기 해봤자 영향이 없다는 것... 그렇다면, 방법은.. 우리가 hot deploy를 해보고 싶은 클래스를 시스템 클래스로더가 아닌 우리가 정의한 (즉, 우리가 컨트롤 할 수 있는) 클래스로더가 물고 올라가도록 하면 이후에도 우리가 컨트롤 할 수 있지 않을까... 생각했다. 이클립스에서 workspace를 c: 쪽을 사용하고 있는데 일단 이런저런 생각하.. 더보기
Jrebel Ibatis plugin. 보니까.. Jrebel 에서 플러그인 제공하는 방식이 프레임워크에 소스를 끼워넣어서 인터셉트 혹은 특정 메서드 실행 후에 동작 할 수 있도록 해주는 방식이 있어서... 아주 심플하게 생각해서... sqlmapclient를 사용하기 위해 SqlMapClientBuilder를 사용해서 SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader); 를 실행 할 때마다 reader를 체크하여 reload해주면 되지 않을까 생각... 그냥 쓸 때마다 xml을 읽어오도록 구성 되어 있으면 문제 없지만 보통은 최초 기동시에 xml 정보를 읽어 놓고 그것을 재사용 하는 방법을 사용하고 있을 것이므로... 재기동이 문제가 되는 경우가 있다. 일단 , 최종 수정.. 더보기
URLClassLoader를 사용 한 class hot deploy (실패) Jrebel을 알게 되면서 class를 hot deploy 하는 방법이 뭘까... 하고서 찾아보았다. classloader가 한번 class를 load하게 되면 그 클래스를 unload 할 수 없기 때문에 URLClassLoader를 사용해서 classloader를 새로 생성하여 class를 동적으로 로딩하면 가능하다라는 것을 알게 되어서 막 코딩을 시작. -_- public class Reloader { private Log logger = LogFactory.getLog(Reloader.class); URLClassLoader appClassLoader = null; File dir = new File("C:/TDPWrokspace/test/bin/hotdeploy/"); public void run.. 더보기
[JAVA] Pattern, Matcher 더보기
그냥 우연히 뭔가 해보다가.. main 메서드가 있는 일반적인 자바 어플리케이션을 만들어서 아래와 같이 돌려보았다.. 이렇게 해서 돌려보니까... main end......................... Thread-0 : [0] Thread-6 : [6] Thread-5 : [5] Thread-2 : [2] Thread-7 : [7] Thread-1 : [1] Thread-4 : [4] Thread-3 : [3] Thread-10 : [10] Thread-8 : [8] Thread-9 : [9] Thread-13 : [13] Thread-17 : [17] Thread-12 : [12] Thread-16 : [16] Thread-14 : [14] Thread-18 : [18] Thread-11 : [11] Thread-15 : [.. 더보기
그냥 한번 생각해보는 글. - 5 - 한 4일간 무섭게 몰아치던 감기가 이제 좀 나은 것 같습니다. 늦감기 정말 무섭네요.. 건강 조심하세요~ 저번 포스트에서.. 소계와 합계를 구했고.. 그리고 화면에 뿌리기 좋게~ 정렬까지 되어있는 ArrayList를 만들었습니다. 저도 실제로 이런식으로 (물론 소트기능이라던가 좀 더 많은 기능을 개발한 상태로..) 플젝에서 만들어 사용하고 있습니다. 이렇게 사용해놓고 보니.. 일단 처음에는 "쿼리 작성 시간 단축" "View에서 테이블을 그리기 위해 과도한 if else의 사용을 하기 싫다. 나중에 컬럼하나 추가되거나 하면.. 유지보수 하는 사람은.." "이걸 하나 만들어 놓으면 비슷한 표를 그려야 하는 사람도 사용 할 수 있을 것 같다." 그리고 포스트에는 적지 않았지만 쿼리 결과의 ROW가 표에서의 .. 더보기
그냥 한번 생각해보는 글. - 4 - 지난번에 최종적으로 작성된 코드입니다. 소계까지 만들어 놓은 상태에서 이제는 합계를 구해봐야 할 것입니다. 우리가 최종적으로 view에서 뿌릴 때 쓰려는 객체는 첫번째카테고리별로 그룹핑을 해 놓은 Map domainListGroupByFirstCategory 이 객체는 아닙니다. (물론 이걸 그대로 사용 할 수도 있습니다. 쓰기 나름이죠 뭐..) 저는 그냥 loop를 돌면써 뿌리면 될 수 있게, List resultDomainList 이 리스트에다가 위 표의 순서대로 똑같이 도메인 객체를 넣어놓을 생각입니다. 즉, resultDomainList 여기에는 {합계, 의류-소계, 의류-치마,의류-셔츠, ... , 가전 - 소계, 가전-TV, 가전-냉장고... } 이런 모양으로 아예 list를 만들어 놓으려고 .. 더보기
그냥 한번 생각해보는 글. - 3 - 첫번째카테고리별로 그룹핑을 해놨습니다. 그리고 그것은 Map 객체에 들어가 있습니다. 첫번째 카테고리별로 list를 가지고 있기 때문에, 이제 첫번째카테고리별 소계를 만들어 볼 수 있을 것 같습니ㅣ다. 구현하기 나름이겠지만.. 일단, grouping을 했으니까 그것을 가지고 소계와 합계를 가지고 있을 Domain 객체를 새로 만들어서 넣어보겠습니다. 지금까지 작성된 StatusTable.java 현재 domainListGroupByFirstCategory에 그룹핑을 시켜놓은 상태는 첫번째카테고리소트키를 키로 갖고 해당 카테고리의 Domain 객체 리스트가 Map에 들어가 있는 상태입니다. 앞에서 그리려고 했던 표에서는 소계가 각 카테고리의 제일 상단에 나오기 때문에 각각의 첫번째카테고리에 해당되는 리스트.. 더보기
그냥 한번 생각해보는 글. - 2 - 이제 domain 객체 List를 가지고 소계와 합계를 만들어서 새로운 list를 만드는 Table 클래스를 만들어 보겠습니다. 방법은 여러가지가 있을 수 있습니다. 구현하기 나름이니까요.. 저 같은 경우는 그냥 예전에 구현했던대로 Dao에서 결과로 받아온 domain 객체 list를 가지고 소계와 합계 domain 객체를 생성해서 list 중간중간에 끼어넣는 형태로 만들어보겠습니다. 상세코드까지 구현하지는 않고 의사코드 정도로 하려고 합니다. 앞에서 dao를 통해 결과를 받아왔습니다. List resultList = dao.getOrderInfoDomainList(); //DB에서 쿼리해온 결과.. 그리고 이제 이것을 가지고 Table 클래스가 사용 할 것입니다. StatusTable.java 이런식이.. 더보기
그냥 한번 생각해보는 글. - 1 - 보통 DTO 나 VO 를 사용 할 때 (사실 저는 DTO나 VO나 Domain에 대한 정의가 명확하지 않아서...그냥 이후 Domain 클래스라고 할게요...) 일반적으로 필드를 정의하고 나서 getter,setter 메소드를 준 상태로 사용하는 경우를 많이 봤습니다. 어떠한 로직도 들어가지 않는 경구가 많고, 단순히 값을 전달하기 위한 객체로 사용하기도 합니다. 그렇기 때문에 굳이 Domain 클래스를 새로운 클래스로 만들지 않고, Map으로 사용하는 경우도 있습니다. 만약에 주문에 대한 정보를 관리하는 뭔가를 만든다고 해보면.. OrderInfoDomain.java 대략 요런 모양이 나올겁니다. 카테고리는 Id와 이름이 한쌍으로 이루어집니다. 그리고 소트키는 나중에 표에서 나오는 정렬 순서를 결정 할.. 더보기