블로그 이미지
Max.

calendar

      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    

Notice

2011.06.14 10:48 개발관련

D:\work\test2>roo
    ____  ____  ____
   / __ \/ __ \/ __ \
  / /_/ / / / / / / /
 / _, _/ /_/ / /_/ /
/_/ |_|\____/\____/    1.1.3.RELEASE [rev 4404ffb]


Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
0 upgrades available (plus 29 upgrades not visible due to your version stability setting of RELEASE)
roo>
roo> project --topLevelPackage net.max --projectName test2
roo> persistence setup --provider HIBERNATE --database MYSQL 
roo> entity --class ~.domain.Account
roo> field string --fieldName name
roo> field string --fieldName email
roo> max setup
roo> max service --class ~.service.AccountService --entity ~.domain.Account
roo> max web --class ~.web.AccountController --service ~.service.AccountService
roo> q
> mvn jetty:run


 일단 여기까지....
저작자 표시
신고
posted by Max.
TAG addon, max, ROO
2011.06.14 08:27 개발관련
일단 거창하게.....

 
음..... 좀 많네.... 
심심할때 하나씩 만들다 보면.... 뭐라도 나오겠지... 
저작자 표시
신고
posted by Max.
TAG addon, ROO
2011.06.13 08:51 개발관련
1) 구현하려는 코드의 layer는 service와 UI 부분인데, 기존의 Roo addon의 해당 addon들이 활용성이 떨어지는 이유는 복잡하고, 유연성이 작았기 때문이다.

2)  Scaffold방식의 문제점은, 극도의 유연성을 요하는 UI에 ITDs를 적용함으로, 유연성에 제약을 줬다는 것이고, 편리함이나 복잡해 보이는 것은 핵심이 아니다.

3) 따라서, UI에서는 ITDs 포기한다. 모든 생성코드는 순수 java로 한다. 순수자바를 생성할때 문제는, 중복코드다. 이것은 Generic으로 해결한다.

4) MaxGenericService, MaxGenericController를 만든다.  또한, tiles 보다 sitemesh를 사용할것이고, jspx 보다 jsp를 사용할 것이다.
저작자 표시
신고
posted by Max.
TAG addon, ROO
2011.06.13 08:37 개발관련
일반적인 addon 개발 절차는 아래처럼 한다.

1) addon 프로젝트 수정 후

2)  perform assembly
(컴파일)

3) osgi ps
(osgi 번들 확인)

4) osgi uninstall --bundleSymbolicName com.ks.spring.roo.addon.maxservice
(만약 첫번째라면, osgi start 먼저 한다.)

5) osgi start --url http://localhost/testweb/addon/com.ks.spring.roo.addon.maxservice-0.1.0.BUILD-SNAPSHOT.jar 
(현재버전은(1.1.3) window 계열이 아니라면 file:// 로 대신할수 있다.) 

6) osgi ps
(osgi 번들 확인)

7) 이후 타켓 프로젝트에서 테스트 한다.

8) 다시 1)번을 반복한다. 

저작자 표시
신고
posted by Max.
TAG addon, ROO
2011.06.13 08:32 개발관련
roo에서 소스생성방법은 크게 두가지다. shell command로 java나 리소스 파일을 생성하는 것과 metadata로 aj파일을 생성하는 방법이다. 각각 쓰임새가 다르다. addon 개발시 특징을 살리면, 효과적으로 개발할수 있다.

1) Command
max service --name ~.account.service.AccountService --entity ~.account.domain.Account 

[생성] ~.account.service.AccountService.java
[생성] ~.account.service.AccountServiceResult.java
[생성] ~.account.service.impl.AccountServiceImpl.java

max web --name ~.account.web.AccountController --service ~.account.service.AccountService

[생성] ~.account.web.AccountController.java

2) Metadata
@Roo_Max_Service
[생성] ~.account.service.impl.AccountServiceImpl_Roo_Service.aj

@Roo_Max_Service_Result

[생성] ~.account.service.AccountServiceResult_Roo_Result.aj

@Roo_Max_Web(
create=true,
update=true,
delete=true,
show=true,
list=true
)

[생성] /src/webapp/WEB-INF/views/accounts/create.jsp
[생성] /src/webapp/WEB-INF/views/accounts/update.jsp
[생성] /src/webapp/WEB-INF/views/accounts/delete.jsp
[생성] /src/webapp/WEB-INF/views/accounts/show.jsp
[생성] /src/webapp/WEB-INF/views/accounts/list.jsp

저작자 표시
신고
posted by Max.
TAG addon, ROO
2011.06.10 03:41 Business관련

오리 농장주가 있다. 오리를 키워서 팔아 수익을 남기는 사업을 한다.

오리는 하루 셋끼 먹을것만 주면 만족한다. 사육사는 하루 셋끼 먹을것을 주며, 골고루 먹게 하고, 잘못먹는 오리나, 아픈오리를 돌본다. 사육에 충실한 셈이다. 필시 그것이 오리를 위한 최선이라 믿는다.

농장주는 사육사에 아주 만족한다. 오리들도 역시 만족한다. 이대로 모든것이 좋다.



어느날, 조련사가 왔다. 이 조련사는 오리가 날아야 한다고 한다. 농장주도 사육사도 오리도 생전 처음 듣는 소리고, 당치도 않는 소리라고 한다.

농장주의 주 사업목표에 그런것은 없었다. 날수만 있다면야 관광수익부터해서 할것은 많겠지만, 괜한 짓한다 생각이 든다.
 
오리는 '날다'는 자체를 이해하지 못한다. 어쩌면 자신이 날개를 가지고 있다는 것 자체를 인식하지 못하고 있었던것 처럼...

조련사는 무엇때문에 날아야 한다고 했을까....? 조련사는 이대로 모듯것이 좋은 농장에 왜 지글러 역할을 자처한 것일까...? 이런 조련사는 어떻게...




위내용은 적어도 어떤 것을 책임지고 리딩하는 사람은, '배를 만들어라' 라는 지시 보다, '대양에 대한 꿈'을 이야기하는 것이 바람직하다는 말과 상통한다. 

오리가 날수 있다는 희망을 가지는 그날까지.... 
저작자 표시
신고

'Business관련' 카테고리의 다른 글

돌연변이 변수 투입시점  (0) 2011.07.20
홀로서기(1) - 기초 정보 모으기  (0) 2011.07.01
사육사와 조련사  (0) 2011.06.10
Social Game 개발  (0) 2011.04.26
Google Apps Marketplace  (0) 2011.04.26
한가지를 갖기 위해...  (2) 2011.03.14
posted by Max.
2011.06.05 09:49 개발관련
기본의 무식하게 절차적인 방법으로 작은 소스코드 생성에도 많은 코딩량 때문에 지쳤었는데, 멋지네... 그런데 XML(설정이나 메이븐)은 아직도 고전적인 방법인가? Template를 이용하면 될것 같은데...

1) shell command를 직접 이용하는 방법

// -----------------------------------------------------------------------------------
// Create User entity
// -----------------------------------------------------------------------------------
shell.executeCommand("entity --class " + entityPackage
+ ".User --testAutomatically --permitReservedWords");
shell.executeCommand("field string --fieldName firstName --sizeMin 1 --notNull");
shell.executeCommand("field string --fieldName lastName --sizeMin 1 --notNull");
shell.executeCommand("field string --fieldName emailAddress --sizeMin 1 --notNull --unique");
shell.executeCommand("field string --fieldName password --sizeMin 1 --notNull");
shell.executeCommand("field date --fieldName activationDate --type java.util.Date ");
shell.executeCommand("field string --fieldName activationKey ");
shell.executeCommand("field boolean --fieldName enabled ");
shell.executeCommand("field boolean --fieldName locked ");



2) Template를 이용하는 방법

Map<String, String> map = new HashMap<String, String>();

map.put(pathResolver.getIdentifier(Path.SRC_MAIN_JAVA,
finalControllerPackage.replace('.', separator) + separator
+ "ChangePasswordController.java"),
"ChangePasswordController.java-template");

map.put(pathResolver.getIdentifier(Path.SRC_MAIN_JAVA,
finalControllerPackage.replace('.', separator) + separator
+ "ChangePasswordForm.java"),
"ChangePasswordForm.java-template");



이제 노트북끄고, 놀려가야지...
 
 
저작자 표시
신고
posted by Max.
TAG addon, ROO
2011.06.05 09:27 개발관련
DWR처럼 Sitemesh도 너무 오랫동안 처다보지 못해서, 설정방법이 오래되어 있었는데, 3.0에서는 설정방법이 다양해질듯 하다. 아직 알파버전이라 적용하긴 힘들겠지만, 조만간 버전업되면, 바꿔야 할것이다. 

주요내용은 이 사이트를 참조 하자. 

http://www.sitemesh.org/new-in-sitemesh3.html

 
저작자 표시
신고
posted by Max.
TAG Sitemesh
2011.06.05 09:10 개발관련
내가 이글(http://yunsunghan.tistory.com/137)를 쓴지가 벌써 3,4년 전이였는데 아직도 그설정 그대로 사용하고 있는걸 보니, 이젠 뭔가 바뀌어 있지 않을까 하고 찾아 봤다. 별고 바뀐건 없지만, 한가지 눈에 띄는게 있다. @DataTransferObject 인데, 그땐 발견하지 못한건지, 적용하지 못하고 있음을 과거글에서 찾아 볼수있다. 모델 매핑은 XML에서 하고 있으니 말이다. 

경기도 시흥에 1박으로 놀려놨다가 아침에 다른(addon)것 찾아보다 발견하여 기록해본다. @DataTransferObject를 적용하는 방법은 여기(http://www.butterdev.com/dwr/2010/10/dwr-spring-and-annotations/)에 잘 나와 있다. 핵심은 아래 코드를 참조하자. 

[XML설정]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
  
   <dwr:configuration />   
   <dwr:annotation-scan base-package="org.uk.ltd.dwr.dev" scanDataTransferObject="true" scanRemoteProxy="true"/>   
</beans>



[소스코드-Bean]

@DataTransferObject
public class Address {
private String street;
...


[소스코드-Biz]

@RemoteProxy(name="dwrService")
public class DWRService {
public DWRService() { }
@RemoteMethod
public Address getAddress() throws Exception {
Address address = new Address();
address.setStreet("2245 NW Overlook Drive");
address.setCity("Portland");
address.setState("Oregon");
return address;
}
     ... 

저작자 표시
신고
posted by Max.
TAG DWR
prev 1 next

티스토리 툴바