Whiteship's Note


[BBC News] Golden Glove winners announced

모하니?/English : 2010.02.23 23:15


http://www.bbc.co.uk/worldservice/learningenglish/language/wordsinthenews/2010/01/100118_witn_golden_globes.shtml

James Cameron, who's spent the past five years working on Avatar, was names the best director. The firm, whitch is on course to become the highest grossing of all time, is now considered to be in poll position.

The Handover, a firm aound a stag party in Las Vegas, won the aword for best comedy. Jeff Bridge, who plays a country music singer of the firm Crazy Heart, was named the best actor. And Marln Streep took the aword for best actress in a comedy for her portlayor of the American TV cheaf, the last Julia Child in Julie and Julia.

The most of celebraties worn ribbons in support of the peoples of Haiti. The TV watchers are encouraging to give money. The organisers of the show, the Holywood Forein Press Association, said they were donating $100,000 to the earthquake relief fund.

오늘은 LinkageError 때문에 녹음과 검사는 생략;;
top

Write a comment.


자바 클래스로더 입문 퀴즈 정리

Java : 2010.02.23 22:30


  1. 21:15:40 [ClassLoader 퀴즈 끝] SpringSprout와 WhiteshipFactory가 참조하는 Whiteship은 누구인가.
  2. 2010/02/22 [ClassLoader 퀴즈 6] SpringSprout는 과연 Whiteship의 이름을 알 수 있을까? (2)
  3. 2010/02/22 [ClassLoader 퀴즈 5] Whiteship은 언제 로딩 될까? (2)
  4. 2010/02/21 [ClassLoader 퀴즈 4] SpringSprout가 알고 있는 Whiteship은 누구인가? (9)
  5. 2010/02/19 [ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까? (2)
  6. 2010/02/19 [ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!! (5)
  7. 2010/02/19 [ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까? (8)

입문 과정 퀴즈를 푸는데 필요한 학습 자료
- ClassLoader APi, 소스 학습
- URLClassLoader API, 소스 학습
- http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch2.chapter.html#d0e2314

과제
- 위 Jboss 문서 2.2.2를 참조하여 클래스 로딩 관련 주요 예외 3종 세트 재현하기
- ClassCastException
- IllegalAccessException
- LinkageError

파이팅입니다.
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.24 03:17 신고 PERM. MOD/DEL REPLY

    언제 7번까지 나온거에요 ㅡㅡ;; 일단 내일 맑은 정신으로 풀어야겠삼;;ㅋ LinkageException 이야기가 여기 나오는 내용이군요 .. ㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.24 08:30 PERM MOD/DEL

    나도 첨봤다네

Write a comment.


[ClassLoader 퀴즈 끝] SpringSprout와 WhiteshipFactory가 참조하는 Whiteship은 누구인가.

Java : 2010.02.23 21:15


참조: http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/Server_Configuration_Guide/Class_Loading_and_Types_in_Java-LinkageErrors___Making_Sure_You_Are_Who_You_Say_You_Are.html#LinkageErrors___Making_Sure_You_Are_Who_You_Say_You_Are-Classes_demonstrating_the_need_for_loading_constraints

   @Test
    public void linkageError() throws Exception {
        FlaggedFileUrlClassLoader cl1 = new FlaggedFileUrlClassLoader("C:/intellij9-workspace/springsprout2/temp2/");
        FileUrlClassLoader cl0 = new FileUrlClassLoader("C:/intellij9-workspace/springsprout2/temp/", cl1);
      
        Class springSproutClass = cl0.loadClass("SpringSprout");
        Object springSprout = springSproutClass.newInstance();
        springSprout .getMethod("link").invoke(o1);
    }



public class SpringSprout {

    public void link(){
        System.out.println(Whiteship.class.getClassLoader() + " SpringSprout's Whiteship");
        Whiteship w = WhiteshipFactory.getWhiteship();
    }

}

public class Whiteship{
   
}

public class WhiteshipFactory {

    public static Whiteship getWhiteship(){
        System.out.println(Whiteship.class.getClassLoader() + " WhiteshipFactory's Whiteship");
        return new Whiteship();
    }
}

굵은 글씨 부분에서 아주 기가막힌 일이 벌어지도록 FlaggedFileUrlClassLaoder(FCL)를 만들었고, 그것으로 delegate하여 클래스를 로딩하는 UrlClassLoader(UCL)를 사용하여 SpringSprout 클래스를 로딩했습니다.

(parent 구조)

UCL -> FCL -> null

FCL은 temp2 폴더를 클래스패스로 취하며, UCL은 temp 폴더를 클래스패스로 취하고 있습니다.
temp2에는 SpringSprout가 참조하는 WhiteshipFactory가 들어있고..
temp에는 SpringSprout와 Whiteship이 들어있습니다.

(dependency)

SpringSprout -> WhiteshipFactory, Whiteship
WhiteshipFactoru -> Whiteship

1. SpringSprout는 UCL이 로딩합니다. UCL이 SpringSprout의 Defining CL이 되며, 동시에 Initial CL이 됩니다.

2. SpringSprout의 Defining CL인 UCL이 SpringSprout가 의존하는 WhiteshipFactory와 Whiteship을 로딩합니다.
- 이때 WhiteshipFactory는 UCL의 parent인 FCL의 클래스패스에 있기 때문에 FCL이 최초로 로딩합니다. 따라서 Defining CL는 FCL이 됩니다.
- Whiteship은 UCL의 클래스패스에 있기 떄문에 Defining CL은 UCL입니다.

3. WhiteshipFactory가 의존하는 Whiteship을 로딩합니다.
- 이때 WhiteshipFactory의 defining CL인 FCL이 Whiteship 로딩을 시도하는데 원래대로라면 FCL의 클래스패스에 Whiteship이 없기 때문에 ClassNotFoundException이 나와야 정상이지만 제가 만든 FCL은 자기가 로딩해버립니다. 따라서 WhiteshipFactory가 참조하는 Whiteship의 Defining CL은 FCL입니다.

4. SpringSprout의 link() 메서드를 실행합니다.
- Whiteship(UCL) = Whiteship(FCL) 최종적으로 이런 공식이 되버립니다.
- 이 위험한 순간 레퍼런스를 대입하기 전에.. loader constraint violation이 발동하여 LinkageError를 발생시킵니다.
- Whiteship 타입을 여러 클래스로더에서 안전하게 사용할 수도록 확인해주는 이 에러는 Liang와 Bracha가쓴 논문을 바탕으로 개선되었습니다. JVM 1.1 이하 버전에서는 이런걸 그냥 허용했다고 합니다.

loader constraint violation
- 레퍼런스를 대입하기 전에 해당 타입을 정의한 defining CL들이 다른지 확인하여 다르다면 에러를 발생시켜 줍니다.
- 이때는 initative CL이 다르던 말던 상관없습니다.


LinkageError를 재현해 보느라.. 오늘 하루를 몽땅 소진했습니다.

이번 퀴즈는.. 이 방법 말고 좀 더 간단하게 LinkageError를 재현해주는 분이 맞추시는 겁니다.
부디 나타나 주시길....
top

Write a comment.


백기선's 2010 Weekly Report - 2/23

모하니?/Planning : 2010.02.23 05:51



이제 5시에 일어나는데 완전히 적응됐다. 주말에 알람 설정을 잘못해서 6시에 일어났더니 이제는 자다가 알람이 안 울린거 아닌가 하고 3시와 4시에 자동으로 눈이 떠지기도 했다. 하지만 몸이 피곤하긴 하다. 일요일은 보드를 타러가지 못하고 집에서 자고 밥먹고 공부하고 자고 밥먹고 놀고를 반복하며 푹 쉬었다.

그 뒤 하루 계획 짜는 시간은 1시간에서 30분으로 줄였다. 처음에는 5시에 못일어나서 헤롱 헤롱 거릴까봐 일부러 계획 짜는 시간을 넉넉하게 잡았는데 이제는 그럴 필요가 없을 것 같다. 남는 30분 정도는 영어 교재를 읽어야겠다.

번역은 생각보다 진도가 잘 안나갔다. 출근하자마자 보통 퀴즈를 풀거나 학습에 빠지는 바람에 잘 지키지 못했는데 오늘부턴 꼭 2시간 풀타임으로 번역을 하리라. 계획을 작성할 때 2시간 동안 몇 페이지까지 하겠다고 적어둬야겠다.

클래스로더 공부하는 시간과 시큐리티 PPT 만드는 시간을 바꿨다. 좀 더 머리가 잘 돌아갈 때 클래스로더를 공부하고 조금 피곤해지고 집중력이 떨어지는 시간에 시큐리티 PPT를 만드는게 체질에 맞는것 같다.

회사일도 번역만큼 집중이 잘 안 됐다. 잠깐 쉰다는 생각으로 일에도 신경써야겠다. 그런 의미에서 매일 회사일로 진행할 개발 일정을 미리 캘린더에 상세하게 적어두는게 좋겠다.

BBC News는 출퇴근 길 전철에서 풀타임으로 스크립트를 외운다. 덕분에 집에서는 별다른 학습 시간을 투자하지 않고 확인하는 시간만 가진다. 전날 저녁에 리스닝한 스크립트를 외웠는지 적어보고, 아내에게 외워서 낭송한 뒤, 아이팟으로 녹음해서 들어본다. 그리고 다음날 외울 스크립트를 골라서 리스닝을 한다.

운동하기는 잘 진행됐다. 단, 살이 빠지지 않고 오히려 찌고 있다. @_@;; 올라가는 그래프를 보고 있자니 씁쓸하다. 리듬 복싱을 했더니 어깨가 뭉친다. 더 뭉치기 전에 풀어줘야겠다.

책 읽기 시간도 잘 진행되지 않았다. 앞의 일정들이 조금씩 뒤로 밀리는 경향이 많았다. 그래도 잠은 일찍 자야 5시에 일어날 수 있으니 보통 11시 반 ~ 12시 사이에 잠을 잔다. 그러다보니 자연스래 책 읽는 시간이 줄어드는데 아무래도 책도 그날 그날 읽을 곳을 표시해놔야겠다.

전반적으로 세부 일정의 목표가 구체적일 수록 잘 지켜졌다. 회사일과 번역같이 뭉뚱그러진 일정은 잘 지켜지지 않았지만 위핏과 BBC News는 매우 잘 지켜졋다. 클래스로더 학습은 지나치게 많은 시간을 투자했다. 빠져들어서 공부하는게 재미도 있고 성과도 있어서 이부분은 어떻게 해야할지 잘 모르겠다. 한참 집중해서 하고 있는데 시간 됐다고 내팽게칠순 없으니 말이다. 한계점을 설정하고 그 시간 내에서 최대한 집중해서 공부하는 식으로 고쳐나가야겠다.

마지막으로 일정에 가장 큰 영향을 끼치는 변수를 찾았다. 친구들과의 술약속인데 거의 퇴근 이후의 일정을 하나도 하지 못한다. 그렇다고 인연을 끊을 수는 없지 않은가. 많이 봐야 한달에 한번인데 그 정도는 봐주자.

좋아.. 이래저래 planning 끝.
top

TAG TODO
  1. Favicon of http://bluepoetworld.tistory.com/ BlogIcon bluepoet 2010.02.23 11:00 PERM. MOD/DEL REPLY

    저도 덕분에 구글 캘린더로 계획세우며 생활하고 있습니다.

    화이팅!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.02.23 11:14 PERM MOD/DEL

    넵 화이팅이요~

Write a comment.