Whiteship's Note


이클립스 3.5 갈릴레오 설치 인증샷

Good Tools : 2009.06.24 22:58


http://www.eclipse.org/downloads/

이클립스 JEE Mac OS X carbon 버전을 설치했습니다.

http://blog.springsource.com/2009/06/24/installing-sts-into-eclipse-35/

좀 전에 올라온 스프링 소스 블로그 글을 보고 STS 설치를 시도했지만, AJDT 플러그인 사이트에는 연결이 안되고, 스프링 IDE 사이트에서 접근 가능한 플러긴은 AJDT 관련 플러긴 밖에 없길래 포기했습니다. @_@ 뭐.. 조만간 STS 2.1.0 RC 버전이 나온다고 하니.. 아직은 3.5 기반 STS를 좀 더 오래 기다려야 할 것 같습니다.


top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.25 11:52 PERM. MOD/DEL REPLY

    저거 설치하다가 잠도 제대로 못 잤네요...ㅡ_ㅡ;;;
    우여곡절끝에 설치 완료 했습니디만... 결국 당분간은 Galileo는 못 쓸것 같네요... @_@;;;
    Galileo JEE 자체에 버그가 있는거 같습니다. ㅠ_ㅠ
    'Web Resources' 기능이 제대로 작동 안 하는거 같아요.
    버그 리포팅 해야겠습니다.
    애초에 걱정은 사용중인 plug-in설치가 잘 될까 였는데,
    plug-in들은 어떻게 다 설치를 마쳤지만,
    (M2Eclipse stable development 버전이랑 Subclipse 1.6.x 버전도 설치가 잘 되네요).
    결국 Eclipse JEE 기본 기능 버그라는 엄청난 복병이... ㅠ_ㅠ
    아놔, 잠도 못자고 시간낭비 했네요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.25 11:55 신고 PERM MOD/DEL

    고생하셨네요; 전 아직 서버시브 설치도 안 해봤어요.

    한 세달 정도 지나면 쓸만해 질지도...ㅎㅎ

  2. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.27 12:30 PERM. MOD/DEL REPLY

    오늘 SpringSource에서 Eclipse 3.5기반의 STS 2.1.0 RC1을 내놨네요. (3.4 기반도 RC1)
    plug-in 설치하려고 한 제노력은 삽질이 되어 버리는 희소식입니다... @_@;
    AspectJ 사용하기 편한 기능들이 추가 됐다고 해서 기대하고 있습니다. :)

    Favicon of http://whiteship.me BlogIcon 기선 2009.06.27 14:44 PERM MOD/DEL

    네 저도 좀 전에 보고 다운 받아뒀습니다. ^^
    왠만하면 Subversive도 같이 설치해서 배포해주면 할 일이 하나 줄어들텐데 그건 직접해야겠네요.

    MoreUnit도..ㅋㅋ

  3. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.27 20:04 PERM. MOD/DEL REPLY

    제가 실수 했네요. 지금 보니까 Eclipse 3.5 기본 기능에 문제가 있는게 아닌거 같습니다.
    그동안 설치하면 plug-in부터 깔기 시작해서
    순수한 Eclipse JEE만 써본적이 거의 없어서 몰랐는데,
    기본 기능이 아니고,
    M2Eclipse 아니면, STS 에 있는 기능 하나가 제대로 안 돌아가는거 같네요.
    Web Resources 기능이 동작을 안 합니다.
    아주 중요한건 아니지만, 없으면 좀 불펀한데... :(

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.06.27 21:28 PERM MOD/DEL

    조만간 해결되겠죠?
    제대로 써보질 않아서 어떤 문제가 있는지 몰겠네요.

Write a comment.


[하이버네이트 퀴즈] Flush

Hibernate/etc : 2009.06.24 14:08


    @Transactional
    @Test
    public void crud() throws Exception {
        Emp emp = new Emp();
        emp.setName("ks");
        ed.save(emp);

        assertThat(ed.getAll().size(), is(1));
        assertThat(ed.get(emp.getId()).getName(), is("ks"));

        emp.setName("tb");
        ed.update(emp);
        assertThat(ed.get(emp.getId()).getName(), is("tb"));

        ed.delete(emp);
        assertThat(ed.getAll().size(), is(0));
    }

이런 테스트가 있는데, 콘솔 창에 쿼리를 봤더니.

Hibernate: insert into Emp (id, dept_id, name) values (null, ?, ?)
Hibernate: call identity()
Hibernate: select emp0_.id as id4_, emp0_.dept_id as dept3_4_, emp0_.name as name4_ from Emp emp0_
Hibernate: delete from Emp where id=?
Hibernate: select emp0_.id as id4_, emp0_.dept_id as dept3_4_, emp0_.name as name4_ from Emp emp0_

update문이 빠져있다. 여기서 발생하는 의문점이 한 두가지가 아니다.

1. DB에 update가 되지도 않았는데 테스트는 어떻게 통과한 것일까?

2. 왜 update 문은 날아가지 않은 것일까?

3. 역으로, 왜 insert와 delete는 날아간 것일까?

이 세 가지 의문을 해결하려면 위에서 작성한 코드를 좀 더 자세히 살펴볼 필요가 있다. 바로 ed.save(), ed.get(), ed.getAll(), ed.update(), ed.delete()  들이다. 이 녀석들이 어떻게 구현되어 있는지 보지 않고서는 알 수 없다. 또하나 Flush 모드 역시 알아야 한다.

- Flush 모드는 기본 모드인 AUTO를 사용했다.
- save(), get(), update(), delete()는 하이버네이트의 Session API와 동일하다고 생각하면 되며, getAll()은 다음과 비슷하게 구현되어 있다. session.createQuery("from Emp"); 실제로는 이 모든게 GenericDao 구현체에 들어있어서 약간 다르긴 하지만, 본질은 그렇다.
- 테스트는 @Transactional한 녀석으로 기본으로 rollback될 녀석이다.

자.. 이제 위 세가지 질문에 대답할 수 있을 것이다. 그랬다면, 다음 퀴즈도 덤으로 풀어보자.
update 쿼리를 볼 수 있는 방법은 현재 두 가지 정도가 떠오른다.

4. 위 테스트 코드에서 한 줄을 삭제하여 update 쿼리가 콘솔에 찍히게 해보자.

5. 위 코드에 ed.flush()를 어디에 추가하면 update문을 볼 수 있을까?

정답은 비공개.. 영원히..
top

  1. Favicon of http://igooo.org/tc BlogIcon igooo 2009.06.24 23:37 PERM. MOD/DEL REPLY

    emp.setName("tb";); 위에서 flush시키면 update가 나오기

    assertThat(ed.get(emp.getId()).getName(), is("ks";)); 지우면 update가 나타나지 않을까요?


    이클립스 설치하느라 실행은 못시켜봤습니다 .ㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2009.06.25 08:33 PERM MOD/DEL

    안타깝게도.. 둘 다 땡입니다.

  2. koasu 2009.06.25 10:39 PERM. MOD/DEL REPLY

    4번: @Transactional 을 지우면 update 가 나타날꺼 같아요.
    5번: ed.update(emp); ed.flush(); 순으로 하면 update가 나타날꺼 같나요.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.25 11:02 신고 PERM MOD/DEL

    4번은 땡. 그거 없이 dao 테스트하기는 좀 그르치요. 당장엔 트랜잭션이 없다고 에러가 날 겁니다. 트랜잭션 설정을 롤백=false로 바꾼다 하더라도 결과는 마찬가지 입니다.

    5번은 맞추셨습니다.

  3. crystal 2009.06.25 11:34 PERM. MOD/DEL REPLY

    4. 위 테스트 코드에서 한 줄을 삭제하여 update 쿼리가 콘솔에 찍히게 해보자.
    // ed.delete(emp);


    5. 위 코드에 ed.flush()를 어디에 추가하면 update문을 볼 수 있을까?
    update()아래, delete()전

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.25 11:41 신고 PERM MOD/DEL

    딩동댕!

  4. crystal 2009.06.25 11:38 PERM. MOD/DEL REPLY

    1. DB에 update가 되지도 않았는데 테스트는 어떻게 통과한 것일까?
    update전 emp객체가 컨택스트에 관리되는 객체, 즉 persistant 상태에 있기 때문이다.

    2. 왜 update 문은 날아가지 않은 것일까?
    아래 해당 객체의 delete가 있기 때문이다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.06.25 11:41 신고 PERM MOD/DEL

    딩동댕~

Write a comment.