45.2. 프레임워크 사용 방법
45.2.1. 개요
API 프레임워크를 사용하여 구성 요소를 구현하는 절차에는 자동화된 코드 생성이 혼합되어 Java 코드를 구현하고, Maven POM 파일을 편집하여 빌드를 사용자 정의하는 작업이 포함됩니다. 다음 그림은 이 개발 프로세스에 대한 개요를 제공합니다.
그림 45.1. API 구성 요소 프레임워크 사용
![API 구성 요소 구현의 일부를 보여주는 그림](https://access.redhat.com/webassets/avalon/d/Red_Hat_Fuse-7.9-Apache_Camel_Development_Guide-ko-KR/images/2c28b539baf78f1e6c1219d88fe8ef7e/framework_intro_01.gif)
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 아티팩트로 저장됩니다.