camel 로 개발을 하고 있는데


http://camel.apache.org/http.html 의 예제를 보면


Sample with scheduled poll

The sample polls the Google homepage every 10 seconds and write the page to the file message.html:

from("timer://foo?fixedRate=true&delay=0&period=10000")
    .to("http://www.google.com")
    .setHeader(FileComponent.HEADER_FILE_NAME, "message.html").to("file:target/google");

라는 예제가 있는데


FileComponent.HEADER_FILE_NAME 라는 구문을 입력하니


해당 constant 를 찾을수 없다는 에러가 난다.


인터넷을 검색해보니 해당constant 는 org.apache.camel.Exchange 로 옯겼다고 한다.


Camel 2.0 이상을 사용한다면 Exchange.FILE_NAME으로 사용하면 된다.


https://issues.apache.org/jira/browse/CAMEL-1733



그리고 하나더


setHeader(Exchange.FILE_NAME, "report.txt") 로 바꾸고 나서도 


The methid setHeader(String, Expression) in the type ProcessorDefinition<RouteDefinition> is not applicable for the arguments (String, String) 

이라는 에러가 난다.


이것은 


setHeader(Exchange.FILE_NAME, constant("report.txt"))  로 바꿔주면 된다.


http://camel.apache.org/file2.html


고맙습니다. 


Posted by 빨강토끼
,

camel 이라는 이름은 들어봤어도 실제 다운로드 받아서 테스트해본것은 오늘이 처음입니다.


EIP (Enterprise Integration Patterns) 라고해서 Enterprise 라는 단어만봐도 어려울것 같아서

멀미증상이 있는저는 그저 딴나라이야기처럼 보였습니다.


spring 은 언제 해볼련지....


암튼 그렇게 어려운 개념도 아니고(물론 상세한 것까지 들어가면 정말어렵지만)

당장 어려가지 경우에 간단하게 적용해볼만한 재미있는 라이브러리였습니다.


정말 간단히 표현한 이미지가 있습니다.


(출처) http://barunmo.blogspot.kr/2013/10/apache-camel-hello-world.html


만일 FTP에 접속해서 파일을 가져온다음에 이것을 로컬디렉토리에 저장하고 그것을 다른 경로에 주기적으로 복사하고 파싱을 한다음에 DB에 저장후 저장 결과를 이메일로 관리자에게 저장하는 비지니스로직이 있다고 하면

가장 골치아픈부분은 각 인터페이스부분을 직접 설계하고 관리해야한다는 것입니다.


하지만 camel은 정말 사막의 낙타처럼 묵묵하게 데이터들을 여기저기로 싣어나릅니다.


애플리케이션은 camel에게 

"이것은 어디서 어디로 옮겨라. 그리고 만일에 동일한 파일명의 파일이있다면 다른이름으로 저장을하고. 아맞다 이런이런 이름의 파일명을 제외하고 몇분마다 주기적으로 copy를 하고. 요런 이름의 파일은 니가 피싱을 해서 DB에다 넣어놔. 다 되면 나에게 말해줘."


이렇게 camel에게 시키기만 하면됩니다.


애플리케이션은 자기 할일만 하면 됩니다.


그럼 우리도 한번 시작해보시죠.


일단 가장좋은 start 방법은 camel 패키지에 있는 예제로 테스트 해보는것입니다.


블로그나 구글링하는것 보다는 패키지에 있는 예제소스가 정말 도움이 많이 됩니다.


http://camel.apache.org/download.html


각 OS에 맞는 바이러리 파일을 다운받습니다.


압축을 풀고나면 examples 디렉토리안에 보면 예제소스들이 있습니다.


camel-example-ftp 디렉토리로 이동해서 보면 중요파일이 아래와 같이 있습니다.


\examples\camel-example-ftp\src\main\java\org\apache\camel\example\ftp

MyFtpClient.java

MyFtpClientRouteBuilder.java

MyFtpServer.java

MyFtpServerRouteBuilder.java


\camel-example-ftp\src\main\resources

ftp.properties


아참 요즘 오픈소스를 컴파일하거나 테스트 해시려면 mvn(메이븐) 은 필수입니다.

구글링을 통해서 꼭 mvn는 꼭 설치하세요.


MyFtpClient* 는 로컬에 있는 파일을 FTP 서버에 upload 해보는것이고

MyFtpServer* 는 반대로 FTP 서버에 있는 파일을 로컬로 download 해보는 것입니다.


MyFtpServer 를 해봅시다.



만일 eclipse에서 테스트해보고 싶으시면

\examples\camel-example-ftp 에서

mvn eclipse:eclipse 라고 명령을 입력하시면

eclipse용 설정파일들이 생깁니다.

import하시면 됩니다.



일단

MyFtpServerRouteBuilder.java 파일과 ftp.properties 파일을 수정합니다.


MyFtpServerRouteBuilder.java

        from("{{ftp.server}}")

            .to("file:로컬다운로드위치")

            .log("Downloaded file ${file:name} complete.");


ftp.properties

ftp.client=ftp:/여러분FTP주소:21/mypath?username=아이디&password=비번


ftp.server={{ftp.client}}&delay=5s&move=done 


위와 같이 수정후에


\examples\camel-example-ftp 에서

mvn compile exec:java -Pserver

라고 명령을 입력하면 여러분의 FTP에서 파일을 로컬로 다운로드받고 

FTP서버의 파일은 done 이라는 디렉토리로 이동되는것을 확인해 보실수 있습니다.


쉽죠?

sftp도 잘됩니다.


[참조]

http://en.wikipedia.org/wiki/Apache_Camel

http://barunmo.blogspot.kr/2013/10/apache-camel-hello-world.html

http://bcho.tistory.com/715


Posted by 빨강토끼
,

LOG4J의 차세대 버전인(사실 공개된지 오래됨) LOGBACK을 GITHUB를 통해 다운받았습니다.


이유는 logback의 주요기능중에  설정파일의 Dynamic Reloading 지원 이라는 것이 있는데

매번 전체 설정정보를 reload 하는지 아니면 변경여부(사이즈 등)을 확인후 변경된 것 같으면

reload를 하는지 궁금해서였습니다.


git clone https://github.com/qos-ch/logback.git


소스를 다운받았으니 빌드(이클립스)를 해보고 싶었습니다.

http://logback.qos.ch/setup.html#ide


IntelliJ 에서는 손쉽게 프로젝트를 import해서 사용해볼수 있는데

이클립스에서는 조금 어렵더군요...


사이트에 있는 데로 번역을 해봤습니다.

1. 이클립스를 설치합니다.

2. Groovy 플러그인을 설치합니다.

    . 자신의 이클립스버전에 맞는 플러그인을 사용해야합니다.확인

    예를 들어 이클립스 4.2(Juno)라면 update site 는 http://dist.springsource.org/release/GRECLIPSE/e4.2/ 입니다.

    . 이클립스에서 "help->install new Software->Work with" 에서 상기 update site 를 입력합니다.

    . Groovy-Eclipse Feature" 를 선택합니다. "m2e Configurator for Groovy-Eclipse"는 필요하지 않습니다.

3. $LOGBACK_HOSE(LOGBACK의 소스를 GITHUB로 다운받은 디렉토리)로 이동합니다.

4. 만약에 .settings, .classpath, .project 파일이 폴더에 있다면 삭제합니다(하위폴더 포함)

5. 명령창에서 mvn eclipse:eclipse 라고 명령을 입력합니다. 여기서 문제가 있었는데 별도로 정리하겠습니다.

6. 이클립스에서 LOGBACK 프로젝트를 import합니다. Import->General->Existing projects 에서 $LOGBACK_HOSE 를 선택합니다.

7. 이클립스에서 logback-classic/target/generated-sources/groovy-stubs/main 디렉토리를 소스폴더에서 제거합니다.

    (logback-classic->project properties->Java Build Path)

8. 이클립스에서 모든 프로젝트를 Clean 합니다.(Project->Clean)

9. 이클립스에서 logback-classic 프로젝트를 선택하고 Groovy project 로 변환합니다.

   (logback-classic 프로젝트에서 Configure->Convert Groovy to Project)



Posted by 빨강토끼
,