45.2. 프레임워크 사용 방법
45.2.1. 개요
API 프레임워크를 사용하여 구성 요소를 구현하는 절차에는 자동화된 코드 생성이 혼합되어 Java 코드를 구현하고, Maven POM 파일을 편집하여 빌드를 사용자 정의하는 작업이 포함됩니다. 다음 그림은 이 개발 프로세스에 대한 개요를 제공합니다.
그림 45.1. API 구성 요소 프레임워크 사용
45.2.2. Java API
API 구성 요소의 시작점은 항상 Java API입니다. 일반적으로 Camel의 컨텍스트에서는 일반적으로 원격 서버 엔드포인트에 연결하는 Java 클라이언트 API를 의미합니다. 첫 번째 질문은 Java API가 어디에서 발생합니까? 다음은 몇 가지 옵션입니다.
- Java API를 직접 구현합니다(일반적으로 많은 작업이 필요하며 일반적으로 권장되는 접근 방식은 아닙니다).
- 타사 Java API를 사용합니다. 예를 들어 Apache Camel Box 구성 요소는 타사 Box Java SDK 라이브러리를 기반으로 합니다.
- 언어 중립 인터페이스에서 Java API를 생성합니다.
45.2.3. Javadoc 메타데이터
Javadoc 형태로 Java API에 대한 메타데이터를 제공하는 옵션이 있습니다(API 구성 요소 프레임워크에서 코드를 생성하는 데 필요합니다). Maven 리포지토리에서 타사 Java API를 사용하는 경우 일반적으로 Javadoc이 Maven 아티팩트에 이미 제공되어 있음을 알 수 있습니다. 그러나 Javadoc이 제공되지 않는 경우에도 maven-javadoc-plugin
Maven 플러그인을 사용하여 쉽게 생성할 수 있습니다.
현재 일반 중첩이 지원되지 않도록 Javadoc 메타데이터 처리에 제한이 있습니다. 예를 들어 java.util.List<String
>이 지원되지만 java.util.List<java.util.List<String>
;>는 지원되지 않습니다. 해결방법은 중첩된 일반 유형을 서명 파일에서 java.util.List<java.util.List
>로 지정하는 것입니다.
45.2.4. 서명 파일 메타데이터
어떤 이유로 Java API 메타데이터를 Javadoc 형식으로 제공하는 것이 편리하지 않으면 서명 파일 형식으로 메타데이터를 제공할 수 있습니다. 서명 파일은 메서드 서명 목록(행당 하나의 메서드 서명)으로 구성됩니다. 이러한 파일은 수동으로 생성할 수 있으며 빌드 시에만 필요합니다.
다음에서는 서명 파일에 대해 설명합니다.
- 각 프록시 클래스(Java API 클래스)에 대해 하나의 서명 파일을 생성해야 합니다.
-
메서드 서명에서 예외를 throw 해서는 안 됩니다. 런타임 시 발생하는 모든 예외는
RuntimeCamelException
으로 래핑되고 끝점에서 반환됩니다. -
인수 유형을 지정하는 클래스 이름은 정규화된 클래스 이름이어야 합니다(Java
.lang.\*
유형 제외). 패키지 이름을 가져오는 메커니즘은 없습니다. -
현재 서명 구문 분석기에는 일반 중첩이 지원되지 않도록 제한 사항이 있습니다. 예를 들어
java.util.List<String
>이 지원되지만java.util.List<java.util.List<String>
;>는 지원되지 않습니다. 해결방법은 중첩된 일반 유형을 java.util.List<java.util.List>로 지정하는 것입니다
.
다음은 서명 파일의 간단한 예제를 보여줍니다.
public String sayHi(); public String greetMe(String name); public String greetUs(String name1, String name2);
45.2.5. Maven archetype을 사용하여 시작 코드 생성
API 구성 요소 개발을 시작하는 가장 쉬운 방법은 camel-archetype-api-component
Maven archetype을 사용하여 초기 Maven 프로젝트를 생성하는 것입니다. archetype을 실행하는 방법에 대한 자세한 내용은 46.1절. “Maven Archetype을 사용하여 코드 생성” 을 참조하십시오.
Maven archetype을 실행하면 생성된 ProjectName
디렉터리에 두 개의 하위 프로젝트가 있습니다.
ProjectName-api
- 이 프로젝트에는 API 구성 요소의 기반을 형성하는 Java API가 포함되어 있습니다. 이 프로젝트를 빌드할 때 Maven 번들에 Java API를 패키지하고 필수 Javadoc도 생성합니다. 그러나 Java API 및 Javadoc이 타사에서 이미 제공되어 있지만 이 하위 프로젝트가 필요하지 않습니다.
ProjectName-component
- 이 프로젝트에는 API 구성 요소의 스케일톤 코드가 포함되어 있습니다.
45.2.6. 구성 요소 클래스 편집
ProjectName-component
에서 스케일톤 코드를 편집하여 고유한 구성 요소 구현을 개발할 수 있습니다. 다음과 같은 생성된 클래스는 스케일톤 구현의 핵심을 구성합니다.
ComponentNameComponent ComponentNameEndpoint ComponentNameConsumer ComponentNameProducer ComponentNameConfiguration
45.2.7. POM 파일 사용자 정의
또한 Maven POM 파일을 편집하여 빌드를 사용자 지정하고 camel-api-component-maven-plugin
Maven 플러그인을 구성해야 합니다.
45.2.8. camel-api-component-maven-plugin 구성
POM 파일을 구성하는 가장 중요한 측면은 camel-api-component-maven-plugin
Maven 플러그인의 구성입니다. 이 플러그인은 API 메서드와 끝점 URI 간 매핑을 생성하고 플러그인 구성을 편집하여 매핑을 사용자 지정할 수 있습니다.
예를 들어 ProjectName-component/pom.xml
파일에서 다음 camel-api-component-maven-plugin
플러그인 구성은 ExampleJavadocHello
라는 API 클래스에 대한 최소 구성을 보여줍니다.
<configuration> <apis> <api> <apiName>hello-javadoc</apiName> <proxyClass>org.jboss.fuse.example.api.ExampleJavadocHello</proxyClass> <fromJavadoc/> </api> </apis> </configuration>
이 예제에서 hello-javadoc
API 이름은 ExampleJavadocHello
클래스에 매핑됩니다. 즉, 양식의 URI를 사용하여 이 클래스에서 메서드를 호출할 수 있습니다. 스키마://hello-javadoc/끝점
. fromJavadoc
요소의 존재는 ExampleJavadocHello
클래스가 Javadoc에서 메타데이터를 가져오는 것을 나타냅니다.
45.2.9. OSGi 번들 구성
구성 요소 하위 프로젝트의 샘플 POM, ProjectName-component/pom.xml
은 구성 요소를 OSGi 번들로 패키징하도록 구성되어 있습니다. 구성 요소 POM에는 maven-bundle-plugin
의 샘플 구성이 포함되어 있습니다. Maven이 구성 요소에 맞게 올바르게 구성된 OSGi 번들을 생성하도록 maven-bundle-plugin
플러그인의 구성을 사용자 지정해야 합니다.
45.2.10. 구성 요소 빌드
Maven(예: mvn clean package
을 사용하여) 구성 요소를 빌드할 때 camel-api-component-maven-plugin
플러그인은 API 매핑 클래스(Java API와 엔드포인트 URI 구문 간의 매핑을 정의함)를 자동으로 생성하며 대상/클래스
프로젝트 하위 디렉터리에 배치합니다. 크고 복잡한 Java API를 처리할 때 이 생성된 코드는 실제로 많은 구성 요소 소스 코드를 구성합니다.
Maven 빌드가 완료되면 컴파일된 코드와 리소스는 OSGi 번들로 패키지화되어 로컬 Maven 리포지토리에 Maven 아티팩트로 저장됩니다.