달력

12

« 2017/12 »

  •  
  •  
  •  
  •  
  •  
  • 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
  • 31
  •  
  •  
  •  
  •  
  •  
  •  
STS에서 프로젝트에 빨간 엑스 표시가 있으면 눈에 거슬려서 다른일을 못하겠다. 프로젝트 빌드엔 별 영향이 없는듯한데, 찜찜하니가, 관련 문제를 해결해야 겠다.

SS maven repository 에서 plug-in 릴리즈용 mojo(org.codehaus.mojo) 관련 최신 업데이트 버전을 지원하지 않는듯 하다. 1.1.3에서는 aspectj-maven-plugin 버전이 1.0이였는데, 1.1.5에서는 1.2로 되어 있고, 1.3은 문제가 있어, 1.4버전을 기다리고 있는듯하다. 임시로 1.2를 쓰는듯한데, 1.2는 저장소에서 지원을 안하니, 간단히 1.0으로 바꾸면 문제는 해결된다.

 

          <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <!-- 1.2에서 1.0으로 바꿈 -->
                <version>1.0</version> <!-- NB: do use 1.3 or 1.3.x due to MASPECTJ-90 - wait for 1.4 -->
                <dependencies>
                    <!-- NB: You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) -->
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjrt</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjtools</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <outxml>true</outxml>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

 
신고
Posted by summerwars
2010.09.30 11:17

SpringRoo GWT 생성 로그보기 SpringRoo2010.09.30 11:17

이전글(SpringRoo GWT 예제 테스트)에서 테스트한 내용을 콘솔기준으로 살펴본다. gwt setup 명령으로 생성된 것들은 실행된 로그를 보면, 어떤것들이 생성되고, 관리되어지는지 알수 있다. 그 로그를 분리하여 보자. (STS 프로젝트명은 'gwt1' 이다)

~.domain.Account roo> gwt setup
Created SRC_MAIN_WEBAPP\WEB-INF\spring
Created SRC_MAIN_WEBAPP\WEB-INF\spring\webmvc-config.xml
Created SRC_MAIN_WEBAPP\WEB-INF\web.xml
Managed SRC_MAIN_WEBAPP\WEB-INF\web.xml

gwt명령을 하기전까지는 일반적인 SpringRoo 프로젝트로 Entity기준으로 생성된 구조이다. 여기에 UI 부분을 기존의 Spring Web MVC가 아닌, GWT를 사용하는 것이다. 따라서, 기존의 'controller all' 명령과 비슷하게, Web 프로젝트 관련 파일들을 생성한다. 그 첫번째로, Servelt 설정파일인, webmvc-config.xml파일을 생성하고, web.xml에 DispatcherServlet 관련 web 설정을 생성한다. web.xml을 생성하자마자, Managed 되는데, 이는 gwt1 servlet 관련 설정을 추가하는 것으로 보인다.


Managed ROOT\pom.xml [Added dependency org.springframework:spring-web:${spring.version}]
Managed ROOT\pom.xml [Added dependency org.springframework:spring-webmvc:${spring.version}]
Managed ROOT\pom.xml [Added dependency org.springframework.webflow:spring-js:2.1.1.RELEASE]
Managed ROOT\pom.xml [Added dependency commons-digester:commons-digester:2.0]
Managed ROOT\pom.xml [Added dependency commons-fileupload:commons-fileupload:1.2.1]
Managed ROOT\pom.xml [Added dependency javax.servlet:jstl:1.2]
Managed ROOT\pom.xml [Added dependency javax.el:el-api:1.0]
Managed ROOT\pom.xml [Added dependency joda-time:joda-time:1.6]
Managed ROOT\pom.xml
Managed ROOT\pom.xml [Added dependency com.google.gwt:gwt-servlet:2.1-SNAPSHOT]
Managed ROOT\pom.xml [Added dependency com.google.gwt:gwt-user:2.1-SNAPSHOT]
Managed ROOT\pom.xml [Added dependency org.json:json:20090211]
Managed ROOT\pom.xml
Managed SRC_MAIN_WEBAPP\WEB-INF\web.xml
Managed SRC_MAIN_WEBAPP\WEB-INF\spring\webmvc-config.xml

GWT 프로젝트도 스프링웹 모듈을 사용하기 때문에 관련 jar를 추가하고, gwt jar도 추가하는 pom 관련 로그이다. 마지막에 web.xml도 추가 되는데, 이것은 gwt 요청 관련 servlet(RequestFactoryServlet) 설정을 등록하기 위해서 추가되는 것으로 보인다. (이것은 나중에 생성된 소스코드 분석할때나 또는 Roo모듈인 GWT플러그인 코스를 살펴볼때 좀더 알아본다.) webmvc-config.xml 파일은 '<mvc:view-controller path="/" view-name="/ApplicationScaffold.html"/>' 이라는 시작점 html이 추가된것 이외에는 특이할만한 사항이 없다.


Created SRC_MAIN_JAVA\net\max\gwt
Created SRC_MAIN_JAVA\net\max\gwt\ApplicationScaffold.gwt.xml
Created SRC_MAIN_JAVA\net\max\gwt\ApplicationCommon.gwt.xml
Created SRC_MAIN_JAVA\net\max\gwt\ApplicationMobileScaffold.gwt.xml

XXX.gwt.xml은 gwt 모듈 설정 파일이다. 나는 하나의 Entity를 등록했는데 3개의 설정파일이 생겼다. 소스코드 내용은 나중에 살펴보기로 하고, 대략 설명하면, ApplicationCommon.gwt.xml 은 모든 모듈 설정파일에 공통으로 포함되는것을 빼놓은것으로 PHP의 include 를 생각하면 되겠다. ApplicationScaffold.gwt.xml 가 메인 시작점(entry-point)이다. ApplicationMobileScaffold.gwt.xml은 덤으로 모바일용까지 생성한다. (왜 '덤'까지 만들고 있는지는 알수 없다. 안그래도 생성되는 파일이 많아서 복잡한데...)


Created SRC_MAIN_JAVA\net\max\gwt\request
Created SRC_MAIN_JAVA\net\max\gwt\scaffold
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\gwtLogo.png
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldShell.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldMobileShell.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldShell.ui.xml
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\Scaffold.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldMobileShell.ui.xml
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\mobile.css
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldMobile.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\rooLogo.png
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldPlaceHistoryHandler.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\createButton.png
Created SRC_MAIN_JAVA\net\max\gwt\ui
Created SRC_MAIN_JAVA\net\max\server

UI 관련 폴더를 만들고, 주로 scaffold 폴더의 파일들을 생성하고 있다. Scaffold.java 파일이 GWT의 EntryPoint를 구현하고 있어서 UI의 가장 핵심 폴더이다. 주요 생성 파일만 설명하면 아래와 같다.
 - ScaffoldShell.java : UI를 꾸미는 panel, widget 같은 값을 얻음
 - ScaffoldShell.ui.xml : UI 템플릿 파일
 - Scaffold.java : App의 시작점으로 UI,Data까지 모든것을 바인딩함
 - ScaffoldPlaceHistoryHandler.java : 히스토리 핸들러 인터페이스


Created SRC_MAIN_WEBAPP\ApplicationMobileScaffold.html
Created SRC_MAIN_WEBAPP\ApplicationScaffold.html

html 시작점 페이지 생성, 역시 모바일용과 함께 생성된다.


Created SRC_MAIN_JAVA\net\max\gwt\style
Created SRC_MAIN_JAVA\net\max\gwt\style\Style.gwt.xml
Created SRC_MAIN_JAVA\net\max\gwt\style\client
Created SRC_MAIN_JAVA\net\max\gwt\style\client\userIcon.png
Created SRC_MAIN_JAVA\net\max\gwt\style\client\Styles.java
Created SRC_MAIN_JAVA\net\max\gwt\style\client\groupIcon.png
Created SRC_MAIN_JAVA\net\max\gwt\style\client\openGradient.png
Created SRC_MAIN_JAVA\net\max\gwt\style\client\common.css
Created SRC_MAIN_JAVA\net\max\gwt\style\client\selectionGradient.png
Created SRC_MAIN_JAVA\net\max\gwt\shared

CSS 생성, GWT는 css도 자바로 읽어 들여서, 메서드에서 효과를 주기도 한다. Styles.java가 css 리소스를 읽어 들이는데 쓰인다.


Created SRC_MAIN_JAVA\net\max\gwt\ui\AccountActivitiesMapper.java
Created SRC_MAIN_JAVA\net\max\gwt\ui\AccountEditActivity.java
Created SRC_MAIN_JAVA\net\max\gwt\ui\AccountDetailsActivity.java
Created SRC_MAIN_JAVA\net\max\gwt\ui\AccountListActivity.java

Entity인 Account의 액션들을 처리해 주는 것들로, Controller의 액션 처리 메서드로 생각하면 되겠다.


Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountListView.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountListView.ui.xml
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountDetailsView.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountDetailsView.ui.xml
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountEditView.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountEditView.ui.xml
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountRecordRenderer.java

Entity인 Account의 액션들을 보여 주는 것들로, jspx페이지의 list.jspx, create.jspx 파일의 테그 템플릿 쯤으로 생각해도 되겠다.


Created SRC_MAIN_JAVA\net\max\gwt\request\AccountRecordChanged.java
Created SRC_MAIN_JAVA\net\max\gwt\request\AccountChangedHandler.java
Created SRC_MAIN_JAVA\net\max\gwt\request\AccountRecord.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountListViewBinder.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountDetailsViewBinder.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\generated\AccountEditViewBinder.java

Created SRC_MAIN_JAVA\net\max\gwt\request\AccountRequest.java
Created SRC_MAIN_JAVA\net\max\gwt\request\ApplicationEntityTypesProcessor.java
Created SRC_MAIN_JAVA\net\max\gwt\request\ApplicationRequestFactory.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ApplicationListPlaceRenderer.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldFactory.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ApplicationMasterActivities.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ApplicationDetailsActivities.java
Created SRC_MAIN_JAVA\net\max\gwt\scaffold\ScaffoldMobileActivities.java

GWT에서 서버로 요청을 하고 그 결과를 넘겨주는데, 일반적인 XML이나 JSON 방식이 아닌, 객체로 하는데, 그냥 객체가 아닌 Reocde된 것으로 그런 제반사항을 처리해 주는 클래스 및 인터페이스들이다. 사실 이 멋진 방법들 때문에, 생성되는 파일수가 많다. 그리고 GWT 프로젝트의 특정 패턴(Factory를 이용한 컴포넌트 생성 방법 등)과 aspect적인 클래스들이 한꺼번에 생성되어 복잡해 보인다. 비슷한 기능을 하는 SmartGWT Server Framework에서는 비교적 잘 정리되어 있는것에 반해서 아직 Roo은 만들어지는 과정에 있는듯한 느낌을 지울수 없다.(실제로 생성된 소스코드엔 TODO 메시지가 자주 보인다.)

다음은, 코드 구조보기...

신고
TAG GWT, SpringRoo
Posted by summerwars
2010.09.30 11:15

SpringRoo GWT 예제 테스트 SpringRoo2010.09.30 11:15

Spring STS 2.5.0.M3에서 테스트 하였고, Spring Roo 버전은 1.1.0.M3 [rev e66e029] 이다.

1) Roo 프로젝트 생성후, 아래 명령실행 (log.roo 파일임)

// Spring Roo 1.1.0.M3 [rev e66e029] log opened at 2010-09-30 09:26:35
project --topLevelPackage net.max --projectName gwt1 --java 6
// Spring Roo 1.1.0.M3 [rev e66e029] log opened at 2010-09-30 09:26:39
persistence setup --database HYPERSONIC_IN_MEMORY --provider HIBERNATE
entity --class ~.domain.Account --testAutomatically
field string --fieldName name
field string --fieldName email
gwt setup


2)  콘솔에서 아래 명령 실행

mvn gae:deploy


3) 브라우저에서 확인 (GWT Development Mode)



4) 성공시 화면



다음은, 생성된 소스코드 살펴보기...
신고
TAG GWT, SpringRoo
Posted by summerwars
2010.09.30 11:13

Spring Roo 1.1.0.M4 사용시 기억할것들 SpringRoo2010.09.30 11:13

1) Entity 설정시 @Size가 있을때는, 항상 @NotNull과 함께 와야 한다. 이것은 정확히 Roo와 관련된게 아니라, javax.validation과 관련된 것이지만, 과거 1.0.0 버전과 호환되기 위해서는 알아 둘 필요가 있다.

2) test integration으로 자동 생성된 테스트가 어느날 갑짜기 모두 오류가 떨어진다면, 스프링 설정파일의 변경정보를 확인하라. 

3) 많아진 테스트를 관리하기 위해선 Test Suite가 필수이다. 메인 도메인별로, 묶어서 테스트하라. Data를 한꺼번에 집어넣는 테스트를 만들어 놓은 방법도 좋다. @Category를 사용하면, 편리하게 구분하여 테스트 할수 있다.

3) Entity 객체에 주석을 달지 말아라. 콘솔에서 속성을 추가하면, 모두 제거 된다. 단, '//'주석만 사라지고, '/** **/'는 사라지지 않는다. 모든 주석은 /** **/ 으로 처리해야 삭제되지 않는다.
신고
TAG SpringRoo
Posted by summerwars
STS는 maven과 spring roo가 내장(포함)하여 배포되고 있다. 따라서, 기본값은 그 내장된 버전을 쓰게 되어 있다. 만약, maven설정과 roo 설정이 이미 되어 있다면, 둘중 어떤것을 사용할것인지 선택해야만 한다.

보통은, STS IDE가 버전업 될때마다, 다른 특징들(관련 플러그인 및 모듈 업데이트)이 있어, 변화가 더 자주 일어난다. 해서 기존에 설정된 maven과 roo가 변화가 더딘 반면, IDE에 내장된 버전은 변화가 잦다. 따라서 STS에 기본으로 설정된 maven 과 roo는 일반 사용자(roo가 릴리즈 될때마다 테스트하는)에게 맞고, Git에서 바로 내려받아 테스트하는 나에겐 좋은환견이 아니다.

STS에 내장된 maven과 roo의 환경을 제거하고, 기존의 PC환경을 설정하려면, STS의 Preferences메뉴에서 Maven > Installations와 User Settings를 기존 maven 경로로 변경하고, Spring>Roo Support 의 선택된 Roo 버전의 체크를 제거하면 된다. Roo가 선택되지 않았다는 오류메시지는 무시한다.

이렇게 하면, 도스창에서 roo를 빌드하여, STS로 import하면 된다. 만약, 위와 같은 설정을 하지 않고, STS로 import하면, 각종 오류가 나온다. maven 빌드를 제대로 하지 못하는 오류와 roo 버전이 달라서, 새로운 버전으로 자동 제너레이션 되는 등 머리 아프다.



만약, jsp나 jspx 같은 표현부분에 각종 jsp,html,xml 표시 오류가 나오면, servlet api가 없엇서 그런것으로,  add library로 간단히 Server Runtime 라이브러리를 추가 하면 된다. 또는 maven에서 dependency로 추가해도 된다.

여기까지 했다면, Spring Roo 1.1.0.M4를 Spring STS 2.5.0.M3로 import 시켜서 빨간색 엑스표시는 보이지 않을 것이다.


신고
Posted by summerwars


보통 체크아웃 받아서 roo-dev를 실행시키면 다음과 같은 에러가 난다. 쓰는데 상관은 없지만 꺼림직 하다.


OSGi 번들을 제외시키는 여러가지 방법이 있겠지만(readme.txt파일을 포함해서), roo-dev.bat 파일에서 직접 편집해도 된다.

rem Most Roo bundles are not special and belong in "bundle"
rem copy "%ROO_HOME%\target\all\*.jar" "%ROO_HOME%\bootstrap\target\osgi\bundle" > NUL

rem Move the startup-related JAR from the "bundle" directory to the "bin" directory
rem move "%ROO_HOME%\bootstrap\target\osgi\bundle\org.springframework.roo.bootstrap-*.jar" "%ROO_HOME%\bootstrap\target\osgi\bin" > NUL 2>&1
rem move "%ROO_HOME%\bootstrap\target\osgi\bundle\org.apache.felix.framework-*.jar" "%ROO_HOME%\bootstrap\target\osgi\bin" > NUL 2>&1



위처럼 명령을 모두 리마크 처리 해버렸다. 번들이 사라지면, 그만큼 좀더 빨라진 느낌이다. 그리고 오류 메시지 없이 실행이 잘된다.


현재 사용하는데 문제는 없다. 이후 문제가 되는 것이 있다면 다시 올리기로 한다.

신고
TAG SpringRoo
Posted by summerwars
1. 컨셉

2. 정의

3. 구현

4. 적용
신고
Posted by summerwars


티스토리 툴바