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 빨강토끼
,
1. ESB(Enterprise Service Bus)의 개요
가. ESB (Enterprise Service Bus)의 정의(다양한 정의가 가능합니다.)
ESB(Enterprise Service Bus)는 웹서비스(Web Service), 인텔리전스 라우팅(Intelligent routing), 트랜스포메이션(Transformation) 기술을 기반으로 SOA(Service Oriented Architecture)를 지원하는 미들웨어 플랫폼이다.
- ESB = EAI (Enterprise Application Integration) + 표준화 + 분산화
- 비즈니스 내에서 서비스, 애플리케이션, 자원을 연결하고 통합하는 미들웨어 또는 인프라 
- 비즈니스 단위들의 통합을 수월하게 하면서 이종의 플랫폼과 환경들을 잇는 가교 역할을 하는 인프라 
- 느슨하게 결합되었거나 결합되지 않은 구성 요소들 간에 중재적인 관계와 직접 통신을 지원하는 웹서비스가 가능한 인프라 : Gartner Group
- ESB란 표시는 그 제품이 MOM과 웹서비스 프로토콜 모두를 지원하는 일종의 통합 미들웨어 제품
- 표준 기반 통합 백본, 통합 메시징, 웹서비스, 변환, 그리고 인텔리전트 라우팅 : Sonic Software
- 통신과 연결, 변환, 보안을 위한 표준화된 인터페이스를 구현하는 엔터프라이즈 플랫폼
- 쉽게 말해 웹스피어 MQ와 그 밖의 다른 웹스피어 브로커 그리고 통합 서버를 가지고 있다면 당신은 ESB를 가지고 있는것 : Bob sutor, IBM
- ESB는 벤더의 독자 기술을 판매하기 위한 일종의 마케팅 전술 : 채펠 앤 어소시에이트 CEO
나. ESB (Enterprise Service Bus)가 주목 받은 이유
- EAI에서 Hub and Spoke 통합방식의 한계점 발견
- SOA의 핵심 필요 기능으로 중요성 증대

 특징 전통적인 EAI  ESB 
 통합의 종류 어플리케이션 통합  서비스 통합, 서비스 호스팅 
 통합 방안 시스템별 어댑터 사용으로 복잡성 증가  표준 기술 사용한 단순 통합 
 표준 벤터별 전송기술 상이  개방형 표준(웹서비스) 
 통합형태 단단한 결합(Static. 1:1 결합)  느슨한 결합(Dynamic, 1:N 결합) 
 비용 통합대상 시스템별 어댑터 구입 또는 개발로 지속적 비용 발생  동일 표준 기반이므로 추가 개발비용 절감, 비즈니스 로직 재사용을 통합 비용 절감 
 구현 아키텍처 집중형 (Hub & Spoke)  분산형 (Distributed) 

2. ESB(Enterprise Service Bus)의 중요성 및 개념도
가. ESB(Enterprise Service Bus)의 중요성
- 분산된 서비스 컴포넌트를 쉽게 통합 연동할 수 있어 신뢰성 있는 메시지 통신이 가능
- 각 레거시 시스템과의 연동을 위한 다양한 표준 프로토콜의 지원을 기본으로, 재사용 가능한 컴포넌트들을 조립함으로써 서비스 지향적인 기업 환경을 만들 수 있는 기반 제공
나. ESB(Enterprise Service Bus)의 개념도


3. ESB의 특징 및 구성 요소
가. ESB의 특징
- 다양한 시스템과 연동하기 위한 멀치 프로토콜 지원
- 느슨한 결합(loosely coupled)
- 소프트웨어 컴포넌트를 조합하여 서비스를 조립하는 BPM 지원
- 이벤트 지향적, 표준 지향적
나. ESB의 구성요소
1) 어댑터 형태의 레거시 연동 컴포넌트
-  ESB는 기본적으로 다양한 표준 프로토콜을 어댑터형태로 지원해야 한다.
- 통합 개발 환경에서 플러거블(Pluggable)할 수 있도록 간단한 형태여야 한다.
2) 메시지의 변환, 가공
- 데이터 포맷과 형태 등을 통합 개발 환경 등을 통해 자유롭게 변화하고 가공한다.
3) BPM
- 다양한 시스템의 데이터와 애플리케이션과의 연동을 통해 하나의 서비스를 이용한다.
4) 컨트롤과 모니터링
- 여러과정들은 통합적인 조작과 모니터링이 가능해야 한다. 
- 모니터링의 대상 : 어댑터 단에서의 진행되고 있는 프로세스의 상태 및 데이터 값
5) 통합개발환경
- 통합개발환경은 ESB에서 필요한 요소 중 하나이다. 

ESB의 특징 참고
http://jin11010.blog.me/24517450

SOA를 실현하는 ESB 

ESB 의 이해와 기술 동향
http://blog.daum.net/comoffi/8516983 

Apache serviceMix 분석
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=126051&boardConfigUid=19&boardStep=&categoryUid=574

Apache synapse 분석

http://www.dbguide.net/knowledge.db?cmd=view&boardUid=126062&boardConfigUid=19&boardStep=&categoryUid=574  


Posted by 빨강토끼
,
ActiveMQ in Action 이라는 책의 예제소스를 실행중에 챕터4에 보시면 brokerB 를 실행하는 단계가 있습니다.
그런데 책에 나와있는 주소나 사이트에서 다운받은 소스로는 윈도우환경에서 아래와 같이 에러가 나며 실행이 안됩니다.

C:\apache-activemq-5.4.1>bin\activemq \ 

xbean:file:C:/amq-in-action-example-src/src/main/resources/org/apache/activemq/book/ch4/brokerB.xml

Java Runtime: Sun Microsystems Inc. 1.6.0_21 C:\Program Files\Java\jdk1.6.0_21\jre
Heap sizes: current=15872k free=14606k max=506816k
JVM args: -Dcom.sun.management.jmxremote -Xmx512M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dactivemq.classpath=C:\apache-activemq-5.4.1\bin\../conf;C:\apache-
activemq-5.4.1\bin\../conf; -Dactivemq.home=C:\apache-activemq-5.4.1\bin\.. -Dactivemq.base=C:\apache-activemq-5.4.1\bin\..
ACTIVEMQ_HOME: C:\apache-activemq-5.4.1\bin\..
ACTIVEMQ_BASE: C:\apache-activemq-5.4.1\bin\..
Loading message broker from: xbean:file:C:/amq-in-action-example-src/src/main/resources/org/apache/activemq/book/ch4/brokerB.xml
ERROR: java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from URL [file:C:/amq-in-action-example-src/src/main/re
sources/org/apache/activemq/book/ch4/brokerB.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'broker'.

java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from URL [file:C:/amq-in-action-example-src/src/main/resources
/org/apache/activemq/book/ch4/brokerB.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'broker'.


The line that it is complaining about is Line12:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB" dataDirectory="${activemq.base}/data"> 


 이유는 brokerB.XML 파일이 잘못되서입니다.
http://code.google.com/p/activemq-in-action/downloads/list  에서 문제가 수정된 가장최신의 소스를 다운받으실수 있습니다. 

 
Posted by 빨강토끼
,