블로그 이미지
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
31            

Notice

2011. 8. 13. 11:54 개발관련
Spring Datastore Document MongoDB(SDDM)의 사용 방법은 Reference인 http://static.springsource.org/spring-data/data-document/docs/current/reference/html 이 가장 친절하게 나와 있다. 또한 GitHub의 Quick Start(https://github.com/SpringSource/spring-data-document) 에도 잘 나와 있다. 이 두개를 참조하여 블로거가 정리한 Doc 문서도 있다. http://www.byggy.com/blog/a/spring-data-doc-mongodb.html 하지만 처음부터 설정하려면 잘 안되는게 문제다. 테스트 순서를 간단하게 기록해 봤다.


1) MongoDB를 설치하고 실행 시킨다.  대부분 다운받은걸 압축을 풀어 실행 시키면 된다. 서버용이라면, 메뉴얼을 잘 봐야 할것이다.

2) Java프로젝트를 생성하고 lib 의존성을 설정한다.  보통 스프링을 사용한다면 하나만 추가하면된다.

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>${spring.data.mongo.version}</version>
</dependency>



3)  도메인 모델을 만든다.

public class CodeLog {
     @Id
    private String id;
    private String userAgent;
    private String acceptLanguage;
    private String ip;
    private Date writeDate;
    private Long codeCreatorId;
...(생략)...



4) 스프링 xml 설정을 한다. MongoFactoryBean 과 MongoTemplate를 간단하게 선언한다. 실무용은 좀더 디테일하게 설정할수 있으며, Reference에 잘 나와 있다.

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
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.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">


  <mongo:mongo host="localhost" port="27017"/>
  <bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
    <constructor-arg ref="mongo"/>
    <constructor-arg name="databaseName" value="korra-code"/>
  </bean>

...(생략)...



5) Test를 실행한다. SDDM에서는 MongoRepository 등 편리한 클래스를 제공하지만, 입맞에 딱 맞는게 없다. 해당 클래스를 참조하여 도메인에 맞는 Repository를 만드는게 더 좋아 보인다.

@Autowired MongoTemplate mongoTemplate;

@Test
public void testLog(){
mongoTemplate.insert(new CodeLog("2","MSIE", "ko-KR", "127.0.0.1", new Date(), 1L));
CodeLog codeLog = mongoTemplate.findOne(new Query(where("userAgent").is("MSIE")), CodeLog.class);
System.out.println(codeLog);
...(생략)... 

 
6) 테스트 결과

2011-08-13 11:34:29,290 [main] DEBUG org.springframework.data.document.mongodb.mapping.MongoPersistentEntityIndexCreator - Analyzing class class com.ks.code.collector.domain.CodeLog for index information.
2011-08-13 11:34:29,302 [main] DEBUG org.springframework.data.document.mongodb.MongoTemplate - insert DBObject containing fields: [_class, _id, acceptLanguage, codeCreatorId, userAgent, writeDate, ip] in collection: codeLog
2011-08-13 11:34:29,361 [main] DEBUG org.springframework.data.document.mongodb.MongoTemplate - findOne using query: { "userAgent" : "MSIE"} in db.collection: korra-code.codeLog
CodeLog [id=2, userAgent=MSIE, acceptLanguage=ko-KR, ip=127.0.0.1, writeDate=Sat Aug 13 11:34:29 KST 2011, codeCreatorId=1] 

posted by Max.

댓글을 달아 주세요

2011. 8. 11. 16:06 개발관련

1) Test Code

@Test
public void non_spring_non_blocking() throws InterruptedException{
CollectActor actor = TypedActor.newInstance(CollectActor.class,CollectActorImpl.class);
actor.setTimeAgentLogService(timeAgentLogService);
actor.setTimeAreaLogService(timeAreaLogService);
actor.setTimeLanguageLogService(timeLanguageLogService);
actor.setCollectorService(collectorService);
int count = 1;
do{
System.out.println(count + ") start...");
Thread.sleep(10);
RawLog codeLog = LawLogFixture.get();
CodeCreator codeCreator = CodeCreator.findCodeCreatorsByShortUrlEquals("B").getSingleResult();
codeLog.setCodeCreatorId(codeCreator.getId()); // id 전달
codeLog.setWriteDate(new Date());
actor.collectNonBlocking(codeLog);
count++;
}while(count < 6);
TypedActor.stop(actor);




         @Autowired private CollectActor collectActor;

@Test
public void spring_non_blocking() throws InterruptedException{
collectActor.setTimeAgentLogService(timeAgentLogService);
collectActor.setTimeAreaLogService(timeAreaLogService);
collectActor.setTimeLanguageLogService(timeLanguageLogService);
int count = 1;
do{
System.out.println(count + ") start...");
Thread.sleep(10);
RawLog codeLog = LawLogFixture.get();
CodeCreator codeCreator = CodeCreator.findCodeCreatorsByShortUrlEquals("B").getSingleResult();
codeLog.setCodeCreatorId(codeCreator.getId()); // id 전달
codeLog.setWriteDate(new Date());
collectActor.collectNonBlocking(codeLog);
count++;
}while(count < 6);
TypedActor.stop(collectActor);
}


2) 결과

1) start...
2) start...
[LOG] None Blocking start-----------------------------------------------------
3) start...
4) start...
5) start...
[log]AgentLog insert
[log]LanguageLog insert
[log]AreaLog insert
[LOG] None Blocking end-----------------------------------------------------
[LOG] None Blocking start-----------------------------------------------------
[log]AgentLog insert
[log]LanguageLog insert
[log]AreaLog insert
[LOG] None Blocking end-----------------------------------------------------
[LOG] None Blocking start-----------------------------------------------------
[log]AgentLog insert
[log]LanguageLog insert
[log]AreaLog insert
[LOG] None Blocking end-----------------------------------------------------
[LOG] None Blocking start-----------------------------------------------------
[log]AgentLog insert
[log]LanguageLog insert
[log]AreaLog insert
[LOG] None Blocking end-----------------------------------------------------
[LOG] None Blocking start-----------------------------------------------------
[log]AgentLog insert
[log]LanguageLog insert
[log]AreaLog insert
[LOG] None Blocking end----------------------------------------------------- 

posted by Max.

댓글을 달아 주세요

2011. 7. 8. 08:58 개발관련
희망의 나라로....




posted by Max.
TAG addon, max, ROO, Spring

댓글을 달아 주세요

2011. 7. 6. 19:39 개발관련
>roo
roo>osgi start --url http://localhost/test/addon/com.ks.spring.roo.addon.maxosgi-1.0.0.M2.jar 
roo> max osgi install
roo>max show start --topLevelPackage net.max --projectName test2
>q
>mvn jetty:run
>roo
roo>max osgi uninstall  

 
posted by Max.
TAG addon, max, ROO, spirng

댓글을 달아 주세요

2011. 7. 4. 10:13 개발관련


spring roo addon max M1 final...
posted by Max.
TAG addon, max, ROO, Spring

댓글을 달아 주세요

2011. 7. 1. 10:43 개발관련
project --topLevelPackage net.max --projectName test2
persistence setup --provider HIBERNATE --database MYSQL 
database properties set --key database.password --value 1212
database properties set --key database.url --value jdbc:mysql://localhost:3306/test
database properties set --key database.username --value root


entity --class ~.account.domain.Account
field string --fieldName name
field string --fieldName email
field number --fieldName visitCount --type java.lang.Integer --min 0
field date --fieldName writeDate --type java.util.Date --dateFormat SHORT

max setup
max service --class ~.account.service.AccountService --entity ~.account.domain.Account
max web --class ~.account.web.AccountController --service ~.account.service.AccountService


perform eclipse

------------------------------------

>mvn jetty:run

브라우저 확인 후,

>roo

이클립스 확인후, 
 
------------------------------------
entity --class ~.goods.domain.Goods
field string --fieldName name
field string --fieldName title
field number --fieldName eaCount --type java.lang.Integer --min 0
field date --fieldName writeDate --type java.util.Date

max service --class ~.goods.service.GoodsService --entity ~.goods.domain.Goods
max web --class ~.goods.web.GoodsController --service ~.goods.service.GoodsService

------------------------------------
> mvn jetty:run
브라우저 확인
 

posted by Max.

댓글을 달아 주세요

2011. 6. 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. 6. 14. 08:27 개발관련
일단 거창하게.....

 
음..... 좀 많네.... 
심심할때 하나씩 만들다 보면.... 뭐라도 나오겠지... 
posted by Max.
TAG addon, ROO

댓글을 달아 주세요

2011. 6. 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. 6. 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

댓글을 달아 주세요

prev 1 2 3 4 5 6 7 ··· 23 next