달력

112018  이전 다음

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  

최근에 블로그에 일부 글을 올리긴 했는데 이클립스 디버깅 기능을 한번 정리해보고 싶었습니다. 

근데 보니 외국에 어느 컨설턴트 분이 자세히 잘 정리해두신게 있네요. 

숟가락만 올리려고 간단히 번역했습니다. 

http://ldg.pe.kr/Wiki.jsp?page=EclipseDebug

참고로 원문은 http://www.vogella.com/articles/EclipseDebugging/article.html 입니다. 


와치포인트나 Debug뷰의 여러가지 옵션들은 모르고 있었네요. 




Posted by 이동국

댓글을 달아 주세요

  1. Risefeli  댓글주소 수정/삭제 댓글쓰기 2014.07.03 08:07 신고

    Hello...

1) 톰캣 서버 디버그 모드로 시작

이클립스를 사용해서 디버그 기능을 사용하기 위해서는 애플리케이션을 디버그 모드로 실행해야 한다. 웹 애플리케이션은 톰캣과 같은 WAS를 디버그 모드로 시작하면 된다. 톰캣을 디버그 모드로 시작하기 위해 아래 그림처럼 마우스 우측 버튼을 클릭 후 나오는 메뉴에서 Debug를 선택한다. 


2) Breakpoint 지정

디버그 모드를 사용하면 애플리케이션이 실행중인 가운데 애플리케이션의 코드마다 할당되는 실제 값들을 확인할 수 있다는 큰 기능이 제공된다. 코드마다 할당된 값을 확인하고자 할때는 Breakpoint 를 지정해야 해당 지점에서 애플리케이션이 대기한다. 이클립스에서 아래그림처럼 소스코드옆의 라인번호 좌측에 마우스를 올려보자. 

마우스를 올린 후 더블클릭을 하면 아래 그림처럼 파란색 점같은 표기가 되는 것을 알 수 있다. 이 파란색 점이 Breakpoint 를 나타낸다. 


3) 애플리케이션을 실행

Breakpoint 를 지정하고 해당 소스코드의 라인을 지나도록 애플리케이션을 실행해보자. 그러면 아래그림처럼 파란색 점 옆에 파란색 화살표가 가리키는 것을 보게된다. 이것은 현재 애플리케이션이 실행중에 해당 소스코드 라인부분을 처리하는 중이라는 것을 나타낸다.

한번 Breakpoint에 머문뒤에는 Breakpoint 가 지정된 라인 앞의 코드에서 각각의 변수에 할당된 값을 확인할 수가 있다. 그러기 위해서는 아래 그림처럼 특정 변수를 더블클릭해서 범위를 정하고 마우스를 사용해서 메뉴를 열어보자. 메뉴에는 Watch, Inspect, Display 등의 디버그와 관련된 3가지 메뉴가 나온다. 


4) Watch메뉴의 Expressions 뷰

Expressions뷰에서는 Watch 메뉴를 통해 지속적으로 값을 확인하려는 변수 목록이 나온다. 원시타입인 경우 값을 바로 확인할수도 있고 객체 타입의 경우에는 객체를 구성하는 세부속성을 확인할 수 도 있다. 

그리고 뷰 하단의 "Add new expression" 을 사용하면 소스코드에는 없지만 표현식을 통해 다른 값들도 확인이 가능하다. 


5) Inspect메뉴 창

Inspect 메뉴를 사용하면 Expressions뷰를 사용하지 않고 바로 아래와 같은 창이 떠서 세부적인 정보를 보여준다. 



6) Display메뉴 창

Display메뉴를 사용하면 아래와 같은 창을 통해 세부적인 정보를 확인할 수 도 있다. 















Posted by 이동국

댓글을 달아 주세요

그 동안 잘 사용하던 m2eclipse..
갑자기 이상한 에러를 수업이 뿌려댄다. 

2012-02-23 17:06:06 [WARN ](AnnotationAttributesReadingVisitor :91 ) Failed to classload type while reading annotation metadata. This is a non-fatal error, but certain annotation metadata may be unavailable.

java.lang.ClassNotFoundException: org.junit.Before
.. 중략


org.eclipse.wst.common.component 파일을 열어본다. 
이 파일은 해당 프로젝트의 .setting 디렉터리안에 있다. 

1. 이전 파일 내용

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="xxx">
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources-local"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/acceptance-test/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/acceptance-test/resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
        <property name="java-output-path"/>
        <property name="context-root" value=""/>
    </wb-module>
</project-modules>


2. 수정한 파일내용

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="xxx">
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources-local"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
        <property name="java-output-path"/>
        <property name="context-root" value=""/>
    </wb-module>
</project-modules>


이 설정으로 인해 테스트 코드가 실제 webapps에 지정된 곳에 함께 배포되어 발생한 에러로 추측된다. 
위처럼 테스트 관련 코드를 설정에서 제거하자 정상으로 돌아왔다. 
Posted by 이동국

댓글을 달아 주세요

이전에 SpringSource TC Server 를 살펴보면서 간단히 만들었던 소개  문서를 공유합니다. 
 


많은 내용이 들어있지는 않습니다. ^^

Posted by 이동국

댓글을 달아 주세요


eclipse 의 maven 플러그인을 업그레이드하거나 STS 를 업그레이드하면 m2e 플러그인이 1.0을 사용하게 된다.
이 경우 기존 환경과 다른 부분이 많아 오류가 발생하는 부분이 있다.
위처럼 프로젝트별로 maven builder 오류가 발생하면 해당 프로젝트의 .project 파일을 직접 수정하도록 한다.

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>news-telematics-service</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
... 중략
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
... 중략
    </buildSpec>
    <natures>
... 중략
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
... 중략
    </natures>
</projectDescription>


Posted by 이동국

댓글을 달아 주세요

SpringJDBC를 사용할때, PreparedStatement 의 파라미터를 로그에 찍기 위해서는 로그레벨을 TRACE로 해야 한다.

<logger name="org.springframework.jdbc.core" additivity="false">
    <level value="TRACE" />
    <appender-ref ref="console" />
</logger>

Posted by 이동국

댓글을 달아 주세요

웹사이트에 업로드 요청했는데, 휴가 갔다 왔나봅니다.
오늘에서야 답변이..~~~
다음주 쯤에나 업로드 되려나..


http://groups.google.com/group/mybatis-user/browse_thread/thread/b084c532c18f7f89/07c699f9ce7d618e?lnk=gst&q=korean#07c699f9ce7d618e


Posted by 이동국

댓글을 달아 주세요

1. web.xml 설정
<error-page>
    <error-code>404</error-code>
    <location>/html/error/notFound.html</location>
</error-page>    
<error-page>
    <error-code>500</error-code>
    <location>/error/system.mvc</location>
</error-page>

여기서 404에 해당되는 notFound.html 파일은 정적인 단순 html 파일입니다.
하지만 500에 해당되는 system.mvc 를 SpringMVC 를 사용하는 동적 페이지입니다.

2. servlet.xml 설정
<mvc:view-controller path="/error/system.mvc" view-name="/error/temporarySystemError"/>

/error/system.mvc 에 대해 view-name 은 /error/temporarySystemError 로 정했습니다.

3. decorators.xml 설정
<decorator name="error" page="pageDecorator_error.jsp">
    <pattern>/error/system.mvc</pattern>
</decorator>

/error/system.mvc 로 요청이 오면 pageDecorator_error.jsp 페이지의 데코레이터가 먹도록 설정을 했습니다.

4. pageDecorator_error.jsp 파일
... 중략

<body>

    <page:applyDecorator name="header"/>
    <decorator:body/>

</body>
</html>

page 태그의 applyDecorator 가 먹을 줄 알았는데, 이상하게 먹지 않더군요.
근데 특이한 건 에러 페이지가 아닌 직접 /error/system.mvc 형태로 접속하면 정상적으로 데이터레이터가 먹는 것이었습니다.

5. temporarySystemError.jsp 파일
<div>
어쩌고 저쩌고
<div>


해결방법은 decorators.xml 파일의 url-pattern 을 사용하지 않고 결과 jsp에 decorator 를 직접 적용하는 것이었습니다. 즉 결과 페이지인 temporarySystemError.jsp 파일을 아래처럼 수정한 것이죠.

... 중략

<body>

    <page:applyDecorator name="header"/>
    <div>
    어쩌고 저쩌고
    <div>

</body>
</html>


http://www.java2go.net/blog/205?TSSESSION=1f8421104a0d5b693e30aaea745da9d6 이 글이 도움이 많이 되었습니다.








Posted by 이동국

댓글을 달아 주세요

1. XML 데이터
<PARENT>
    <HEAD>
        <RESULT_CODE>00001</RESULT_CODE>
        <RESULT_MESSAGE>success</RESULT_MESSAGE>
    </HEAD>
    <BODY>
        <STATUS>true</STATUS>
    </BODY>
</PARENT>

2. Bean 설정
<bean id="unmarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="aliases">
        <props>
            <prop key="PARENT">kr.or.openframework.model.Parent</prop>
        </props>
    </property>
    <property name="autodetectAnnotations" value="true" />
</bean>

3. Repository 소스
@Repository
public class ParentRepository {
    @Resource(name = "unmarshaller")
    private Unmarshaller unmarshaller;
   
    public Object xmlToObject(URL url) {
        InputStream urlInputStream = null;
        try {
            urlInputStream = url.openConnection().getInputStream();
            return unmarshaller.unmarshal(new StreamSource(urlInputStream));
        } catch (IOException e) {
        } finally {
            if (urlInputStream != null) {
                try {
                    urlInputStream.close();
                } catch (IOException e) {
                }
            }
        }
    }
}

4. 모델 클래스
package kr.or.openframework.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("PARENT")
public class Parent {
    @XStreamAlias("HEAD")
    private Head head;
    @XStreamAlias("BODY")
    private Body body;

    public Head getHead() {
        return head;
    }

    public void setHead(Head head) {
        this.head = head;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }
}

@XStreamAlias("HEAD")
class Head extends BaseModel {
    @XStreamAlias("RESULT_CODE")
    private String resultCode;
    @XStreamAlias("RESULT_MESSAGE")
    private String resultMessage;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMessage() {
        return resultMessage;
    }

    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }
}
@XStreamAlias("BODY")
class Body {
    @XStreamAlias("STATUS")
    private String status;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status= status;
    }
}

5. 결과 출력
kr.or.openframework.model.Parent@e72f0c[
  head=kr.or.openframework.model.Head@12eabae[ 
  resultCode=00001
  resultMessage=success
]
  body=kr.or.openframework.model.Body@10948cf[
  status=true
]
]


Posted by 이동국

댓글을 달아 주세요

[maven] javadoc 생성

자바 2011.02.15 13:03
@ pom.xml 설정
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<configuration>
<stylesheetfile>openframework.css</stylesheetfile>
<aggregate>true</aggregate>
<minmemory>128m</minmemory>
<maxmemory>256m</maxmemory>
<breakiterator>true</breakiterator>
<quiet>false</quiet>
<source>1.6</source>
<verbose>true</verbose>
<linksource>true</linksource>
<outputDirectory>${project.build.directory}/javadoc</outputDirectory>
<reportOutputDirectory>${project.build.directory}/javadoc</reportOutputDirectory>
<destDir>api</destDir>
<locale>ko_KR</locale>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
</configuration>
</plugin>
</plugins>
</reporting>

@ maven goal
javadoc:javadoc

@ 참고 URL
Posted by 이동국

댓글을 달아 주세요