By 동치미 on August 20, 2010
maven-gae-plugin 을 이용한 개발 환경 셋팅을 해보자.
환경은 다음과 같다.
eclipse 3.6(http://eclipse.org)
me2eclipse(http://m2eclipse.sonatype.org/)
목차
1. maven settings.xml 수정
2. maven-gae 프로젝트 생성
3. 배포/확인
시작
1. settings.xml(메이븐 셋팅 파일)을 다음과 같이 설정한다.
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:\egun-money\dev\repo</localRepository>
<servers>
<!-- 구글 App Engine 서버 id 및 계정 설정 -->
<server>
<id>appengine.google.com</id>
<username></username><!-- 구글 App Engine 계정 id ex ) egunmoney@gmail.com -->
<password></password><!-- -계정 비밀번호 -->
</server>
</servers>
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>maven-gae-plugin-repo</id>
<name>maven-gae-plugin repository</name>
<url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-gae-plugin-repo</id>
<name>maven-gae-plugin repository</name>
<url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>
2. 프로젝트 생성
2.1 새로운 Maven 프로젝트를 생성한다.

2.2 Add Architype 버튼을 눌러 새로운 Architype을 추가한다. (한번만 하면 됨)

2.3 maven-gae-plugin 에서 제공하는 Architype을 추가한다. (maven-gae-plugin은 3가지 형태의 아키타입을 지원한다. 일반적인 jsp형태, gwt형태, Wicket형태가 그것인데 아래 화면은 일반적인 jsp 형태를 추가하는 모습이다.)
- repository URL : http://maven-gae-plugin.googlecode.com/svn/repository

2.4 앞절(2.3)에서 등록한 architype을 선택한다 .(화면은 jsp형태를 선택)

2.5 생성할 프로젝트의 속성을 입력한다. 일반 maven 프로젝트와 달리 화면에 보이는 속성 모두를 입력한다. 속성 설명을 다음과 같다.
- gaePluginVersion은 maven-gae-plugin의 버전을 칭한다.
- gaeApplicationName은 구글 app engine에 생성한 애플리케이션 명을 칭한다.
- gaeApplicationVertion은 구글 app engine에 생성한 애플리케이션 버전을 칭한다.
- name은 프로젝트 명으로 pom.xml에 추가한다.(add 버튼으로 추가해야 함)
- description은 프로젝트 설명을 pom.xml에 추가한다.(add 버튼으로 추가해야 함)
위의 속성중 name, description이 없으면 올바른 프로젝트가 생성되지 않는다.

2.6 프로젝트가 생성되면 자동으로 만들어주는 JDO 관련 소스를 모두 지우고 index.html 을 수정하여 HelloWorld를 출력하도록 한다.

2.7 마지막으로, pom.xml에서 maven-gae-plugin 부분을 다음과 같이 수정한다.
<plugin>
<groupId>net.kindleit</groupId>
<artifactId>maven-gae-plugin</artifactId>
<version>0.6.0</version>
<configuration>
<serverId>appengine.google.com</serverId>
</configuration>
</plugin>
2.8 컴파일 에러등의 빌드 오류 요소들이 모두 제거 되었으면 gae:deploy 명령어를 이용해 배포한다.
브라우저를 이용해 원하는 화면(여기서는 Hello World!)가 출력되면 ok.
참고
Posted in 개발
By 동치미 on August 19, 2010
JSP 페이지를 작성할때, EL(Expression Language)을 많이 사용한다. 간간히 처음 JSP를 만들고 EL를 적용했을때 화면에 원하는 EL의 정보가 출력되지 않은 경우가 있었는데, 그때마다 JSP 페이지 제일 위에 요걸(<%@page isELIgnored=”false” %>) 넣어 주었다. 하지만, 모든 페이지에 적용하다보니 석연치 않은 부분이 있었는데, 검색해보니 해답이 있긴 하더라.
web.xml파일에서 <web-app 부분을 아래와 같이 수정한다. (2.5버전으로)
<web-app
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<!-- something to do -->
</web-app>
아래의 문서를 보니 j2ee5, j2ee6에서 사용하는 web descriptions version이 다른것을 확인수 있는데, 이것이 문제였던 것 아닐까 한다.
참고 : Java EE : XML Schemas for Java EE Deployment Descriptors (http://java.sun.com/xml/ns/javaee/)
Posted in 개발
By 동치미 on February 12, 2010
Posted in 개인
By 동치미 on February 8, 2010
하나의 프로젝트에 하나의 애플리케이션만을 생성할 수 있다는 정보를 입수하고, 시도하지 않았던 Flex의 Maven 플러그인인 Flexmojos를 시도해 보았다. 모 차장님께서 상당히 많은 도움을 주셔서 만족할 만한 성과를 얻어 이렇게 정리 해 둔다.
환경
Eclipse 3.5 + FlexBuilder (Eclipse 3.5에 FlexBuilder 설치하기)
FlexMojos 3.4.2
FlexUnit 0.8.5
FlexMojos 설치 (FlexMojos 홈페이지 참조)
1. FlexMojos repository url(http://repository.sonatype.org/content/groups/flexgroup) 을 setting.xml 또는, 로컬 서버에 추가한다.
settings.xml 에 추가한예
<repositories>
<repository>
<id>flexgroup</id>
<name>flexgroup</name>
<url>http://repository.sonatype.org/content/groups/flexgroup</url>
</repository>
</repositories>
2. eclipse의 기존 인덱싱을 삭제하고 리인덱싱을 실행한다. (Preferences > Maven > Installations > Reindex Local Repository)

프로젝트 생성 및 FlexMojos, FlexUnit 추가
1. Maven 프로젝트를 생성한다. 생성할 때, Artifact Id에서 flexmojos-archetypes-modular-webapp를 선택하고, GroupId와 ArtifactId를 설정하고 완료한다. (에러 발생시 위에서 생성한 index를 다시한번 삭제하고 본 과정을 실행하도록 한다.)

2. swc, swf, war 프로젝트가 생성된 것을 확인 한 후, 필요한 프로젝트(Web 또는 SWF, SWC)를 모듈 형식으로 추가하도록 한다. 추가하는 프로젝트는 메이븐 Module로 추가하도록 한다.
FlexUnit 실행하기
1. FlexUnit을 실행하기 위해선 FlashPlayer.exe 파일의 위치를 알려주도록 해야 한다. 본인 PC의 기본 PATH에 FlashPlayer.exe 파일의 위치를 잡도록 한다. (기본적으로 FlexBuilder 디렉토리의 Player 디렉토리에 포함되어 있다. )
2. 원하는 프로젝트에 FlexUnit가 설치되어 있음을 확인(프로젝트 생성시 flexunit이 포함되어 설치된다. 각 pom파일을 살펴보라)하고 메이븐을 실행하면(mvn test등) player가 잠시 보였다 사라지며 테스트가 완료 된다.
3. war 디렉토리에 target을 보면 swf가 생성되어 있으면 성공.
Posted in 개발 | Tagged flex eclipse maven
By 동치미 on February 4, 2010
- 절대 패키지명과 동일한 인스턴스명을 사용하지 말것.(Flex Builder가 인스턴스를 제대로 찾지 못하여 컴파일 에러를 발생시킬것)
- 중첩된 패키지를 사용할 수 없습니다. 또는 클래스는 중첩되명 안됩니다. 라는 메시지 가 뜰 경우 거의 컴파일 오류이므로, 패키지 또는 클래스명을 확인하고, import가 제대로 되었는지 확인한다. 또는, 문법 오류이므로 체크해본다. 수정후 꼭, Clean을 실행한다.
- 한글 때문에 컴파일 에러가 날땐 인코딩을 UTF-8 또는 euc-kr로 바꾼다.
Posted in 개발 | Tagged flex
By 동치미 on February 3, 2010
Eclipse 새로 설치시 필요한 플러그인 url 모음이다. eclipse에 등록하여 업데이트 하거나, 다운로드한다.
- maven (m2Eclipse) : http://www.eclipse.org/subversive/downloads.php
- svn(subversive) : http://www.eclipse.org/subversive/downloads.php
Posted in 개발 | Tagged eclipse
By 동치미 on February 2, 2010
Eclipse Ganymede 버전까지 지원하는 FlexBuilder를 Eclipse 3.5 버전에서 사용할 방법을 찾아보다 아래의 방법을 찾아내었다.
1. 먼저 Eclipse Galileo(3.5) 를 설치한다.
2. FlexBuilder를 앞에서 설치한 Eclipse를 타겟으로 설치한다. (이때 나오는 버전 체크 문제는 간단히 무시한다.)
3. 설치 후 Eclipse를 실행하여 Flex Perspective 를 찾는다. 당연히 없다.
4. Eclipse를 종료한 후 Eclipse 홈의 links 디렉토리에 있는 com.adobe.flexbuilder.feature.core.link 파일을 확인한다.
5. path=%EclipseHome%/%FlexBuilderHome% 이라고 수정한다. (예:path=C:/flowerzip/FlexBuilder3-Plugin) ‘path=’ 를 꼭 입력하는게 중요!
6. Eclipse 를 다시 실행하여 Flex Perspective 를 확인한다. (제대로 확인해본다.)
7. Preference의 Flex에서 installed SDK를 확인하여 Flex SDK가 제대로 잡혔는지 확인한다.
끝.
추신 :
위와 같이 실행 한 후 Flex3Plugin 파일을 따로 보관해 두면 플렉스 플러그인을 삭제 했을 시 다시 설치할 필요가 없다. 이클립스에 links 디렉토리를 생성하여 위의 link 파일을 만들어 두고, Eclipse의 SDK를 수정해두면 끝.
출처 : Getting Flex Builder 3 plugin to survive a new Eclipse Version
Posted in 개발 | Tagged flex
By 동치미 on January 29, 2010
내가 만든 플렉스 개발 아키텍처에 몇가지 지적을 받았다. 그중 한가지가 서버와 클라이언트의 동일한 도메인 구조였다. 시스템의 도메인 구조와 UI의 도메인 구조가 같았을때 둘이 너무 강결합이 되지 않느냐는 것이다. 도메인의 변경시 UI에서 해야할 작업이 너무 많아 진다는 것이 문제였다. 여기서 변경은 단순한 컬럼 추가수준이 아님을 알것이다.
도메인 구조에 대한 의견중 하나로 ui 기반의 도메인구조에 대한 이야기가 나왔다. 즉, 화면 구조 모형의 도메인 설계방법이다.
둘의 장단점은 극명히 갈라진다. 전자의 경우 등록 프로세스가 간편해 진다. 서버와 동일한 구조이므로 화면의 입력필드와 도메인만 잘 매핑 해 두고 해당 도메인만 서버로 전송하면 끝이다. 후자의 경우 조회가 편리하다. 서버에서 반환하는 데이터를 그대로 매핑해두면 된다.(이런 경우 서버측은 주로 UI에 필요한 정보를 맞추어 보낸다)
둘다 일장일단 이지만 현 시스템에 어떤모델이 유리할까 고민이다. 시스템이 크면 클수록 후자가 유리할 것이라는 개인적인 견해이다. 아무래도 조회성 화면들이 많을 테니….
그래도 기본적인 crud + list 는 전자가 어울리지 않을까?
고로 현행유지 라는 결론을 내려본다.
(수정이 귀찮아서 그런거 절대 아님)
Posted in 개발 | Tagged 설계
By 동치미 on January 28, 2010
객체를 지향하는 언어 에서 setter/getter는 필수적이다. Eclipse는 JDT에서 기본으로 지원해 주고 있는데 Flex Builder에서 ActionScript 클래스에 대한 generator를 지원해주지 않더라. 여기저기 찾아본 결과 EclipseMonkey 를 이용하여 setter/getter 를 만들어주는 스크립트가 있더라. 설치한 방법과 사용 방법을 소개하고자 한다.
Eclipse Monkey란?
Eclipse Monkey는 이클립스를 위한 스크립팅 도구이다. Greasemonkey에서 영감을 얻어 만들어진 이 도구는 지겹고 반복적인 작업을 자동화 해준다. 먼저 Eclipse Monkey를 설치해보자.
환경 : Eclipse 3.4.2 + Flex Builder 플러그인
update : http://download.eclipse.org/technology/dash/update/
Eclipse의 업데이트 창에 위 url을 입력하면 Eclipse Monkey 와 Mozilla Rhino 가 보인다. 둘다 체크하여 install 한다. (개인적으로 이유를 알 수 없는 2번의 설치 실패를 경험했다. 단순히 eclipse만 껏다 install을 다시 하니 제대로 설치하더라.)
설치가 완료되었으면 메뉴에 Scripts 가 생성되었을 것이다. (Example을 누르면 Eclipse Monkey Example 프로젝트가 생성되며 메뉴에 변화가 생긴다.)
실행순서
1. 일반 Project를 만든다.(자바 Project가 아님)
2. scripts 디렉토리에 js 파일을 만든다.
3. 아래 소스를 paste 한다.
/*
* Menu: Actionscript > Generate Properties
* Key: M3+9
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
function main() {
var editor = editors.activeEditor
var source = editor.source
if (editor.selectionRange) {
var range = editor.selectionRange
var offset = range.startingOffset
var text = source.substring(offset, range.endingOffset)
var result = text.match(/(\w+:\w+)/g);
o = ""
for ( var i = 0, n = result.length; i < n; ++i)
o += props(result[i])
for ( var i = 0, n = result.length; i < n; ++i)
o += getvar(result[i])
o += "\n"
// debug(o)
editor.applyEdit(offset, range.endingOffset - offset, o)
}
}
function props(v) {
var parts = v.split(":");
if (2 != parts.length)
return "";
var s = "\n\t\tpublic function get " + parts[0] + "():" + parts[1] + " {";
s += "\n\t\t\treturn _" + parts[0] + ";";
s += "\n\t\t}\n\n";
s += "\t\tpublic function set " + parts[0] + "(o:" + parts[1] + "):void {";
s += "\n\t\t\t_" + parts[0] + " = o;";
s += "\n\t\t}\n";
return s;
}
function getvar(s) {
if (1 > s.length)
return "";
return "\n\t\tprivate var _" + s + ";";
}
function debug(s) {
Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(window
.getShell(), "Monkey Debugging", s);
}
4. Eclipse를 껏다 키고, Script 메뉴를 확인하면 ActionScript 메뉴에 Generate Properties 가 생기고 Alt + 9 라는 단축키가 생성된 것을 확인할 수 있다.
5. 이제 실행시켜보자. 원하는 ActionScript를 열고, 필요한 property 를 선택한다. 만약 private var shipId:String; 라는 property가 있으면 private 부터 String; 문자까지 모두 선택한다.
6. Alt +9 를 누르면 실행되는 것을 확인할 수 있다.
참고 :
Posted in 개발 | Tagged actipscript, eclipse
By 동치미 on January 27, 2010
Flex의 DataGridColumn는 데이터를 매칭시킬때 dataField속성을 사용한다.
<mx:DataGrid id="contriesGrid" rowCount="25" dataProvider="{contries}" >
<mx:DataGridColumn width="150" headerText="국가" dataField="{contry}"/>
<mx:DataGridColumn width="150" headerText="지역" dataField="{region}"/>
</mx:DataGrid>
하지만 dataField는 맨 윗 계층의 데이터만을 조회할 수 있다. 가령 contry 객체 안에 name 이라는 프로퍼티가 있을 경우 vo 등의 객체를 이용하여 1차 계층으로 변환해주어야 한다. 이를 상속받아 변경해 주어야 한다고 생각만하고 실천에 옮기지 않고 있었는데, 이미 누군가 해 놓았더라. (역시!) 해서 출처와 함께 공개해 둔다.
DataGridColumnNested.as
package{
import mx.controls.dataGridClasses.DataGridColumn;
public class DataGridColumnNested extends DataGridColumn {
override public function itemToLabel(data:Object):String{
var currentData:Object = data;
if (data==null)
return “”;
if (dataField.indexOf(“.”) != -1){
var fields:Array = dataField.split(“.”);
try{
for each(var field:String in fields) {
currentData = currentData[field];
if (currentData==null)
break;
}
}catch(ipe:ItemPendingError){
ipe.addResponder(new ItemResponder(
function (result:Object, token:Object=null){
itemToLabel(result.body);
},
function (fault:Object, token:Object=null){
trace(‘Error while loading’);
}
));
}
}
return super.itemToLabel(currentData);
}
}
}
그리고 사용방법 예제
<mx:DataGrid id=“companyGrid” width=“800″ dataProvider=“{productArray}” editable=“true”>
<mx:columns>
<mx:DataGridColumn dataField=“id” headerText=“Id” editable=“false”/>
<mx:DataGridColumn dataField=“name” headerText=“Product”/>
<c:DataGridColumnNested editable=“false” headerText=“Company name” dataField=“company.name”/>
</mx:columns>
</mx:DataGrid>
출처 : Cornel Creanga – Nested properties and DataGridColumn
thx : cornel ^^
Posted in 개발 | Tagged flex
Recent Comments