38.3. 자동 검색 및 구성

38.3.1. 자동 검색 설정

38.3.1.1. 개요

자동 검색은 Apache Camel 애플리케이션에 구성 요소를 동적으로 추가할 수 있는 메커니즘입니다. 구성 요소 URI 접두사는 필요에 따라 구성 요소를 로드하는 키로 사용됩니다. 예를 들어 Apache Camel이 엔드포인트 URI, activemq://MyQName, ActiveMQ 엔드포인트가 아직 로드되지 않은 경우 Apache Camel은 activemq 접두사로 식별된 구성 요소를 검색하고 구성 요소를 동적으로 로드합니다.

38.3.1.2. 구성 요소 클래스 사용 가능

자동 검색을 구성하기 전에 사용자 정의 구성 요소 클래스가 현재 classpath에서 액세스할 수 있는지 확인해야 합니다. 일반적으로 사용자 정의 구성 요소 클래스를 JAR 파일에 번들하고 JAR 파일을 classpath에 추가합니다.

38.3.1.3. 자동 검색 구성

구성 요소의 자동 검색을 활성화하려면 구성 요소 접두사, 구성 요소 접두사 뒤에 이름이 지정된 Java 속성 파일을 생성하고 해당 파일을 다음 위치에 저장합니다.

/META-INF/services/org/apache/camel/component/component-prefix

component-prefix 속성 파일에는 다음 속성 설정이 포함되어야 합니다.

class=component-class-name

여기서 component-class-name 은 사용자 정의 구성 요소 클래스의 정규화된 이름입니다. 이 파일에서 추가 시스템 속성 설정을 정의할 수도 있습니다.

38.3.1.4. 예제

예를 들어 다음 Java 속성 파일을 생성하여 Apache Camel FTP 구성 요소에 자동 검색을 활성화할 수 있습니다.

/META-INF/services/org/apache/camel/component/ftp

다음 Java 속성 설정이 포함됩니다.

class=org.apache.camel.component.file.remote.RemoteFileComponent
참고

FTP 구성 요소의 Java 속성 파일은 JAR 파일 camel-ftp-Version.jar 에 이미 정의되어 있습니다.

38.3.2. 구성 요소 구성

38.3.2.1. 개요

Apache Camel Spring 구성 파일인 META-INF/spring/camel-context.xml 에서 구성 요소를 추가할 수 있습니다. 구성 요소를 찾기 위해 구성 요소의 URI 접두사가 Spring 구성에서 8080 요소의 ID 특성과 일치합니다. 구성 요소 접두사가 8080 요소 ID와 일치하는 경우 Apache Camel은 참조된 클래스를 인스턴스화하고 Spring 구성에 지정된 속성을 삽입합니다.

참고

이 메커니즘은 자동 검색보다 우선 순위가 있습니다. CamelContext에서 필수 ID가 있는 Spring 8080을 발견하면 자동 검색을 사용하여 구성 요소를 찾을 수 없습니다.

38.3.2.2. 구성 요소 클래스에 Cryostat 속성 정의

구성 요소 클래스에 삽입할 속성이 있는 경우 해당 속성을 빈 속성으로 정의합니다. 예를 들면 다음과 같습니다.

public class CustomComponent extends
  DefaultComponent<CustomExchange> {
    ...
    PropType getProperty() { ... }
    void setProperty(PropType v) { ...  }
}

getProperty() 메서드 및 setProperty() 메서드는 속성 값에 액세스합니다.

38.3.2.3. Spring에서 구성 요소 구성

Spring 구성 요소를 구성하려면 예 38.1. “Spring에서 구성 요소 구성” 과 같이 구성 파일 META-INF/spring/camel-context.xml 을 편집합니다.

예 38.1. Spring에서 구성 요소 구성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>RouteBuilderPackage</package>
  </camelContext>

  <bean id="component-prefix" class="component-class-name">
    <property name="property" value="propertyValue"/>
   </bean>
</beans>

ID 구성 요소-prefix가 있는 Cryostat 요소는 component-class-name 구성 요소를 구성합니다. 속성 요소를 사용하여 구성 요소 인스턴스에 속성을 삽입할 수 있습니다. 예를 들어 위 예제의 속성 요소는 구성 요소에서 set 속성() 을 호출하여 속성 속성에 property 를 삽입합니다.

38.3.2.4. 예

예 38.2. “JMS 구성 요소 Spring 구성” 에는 ID가 jms 인ans 요소를 정의하여 Apache Camel의 JMS 구성 요소를 구성하는 방법의 예를 보여줍니다. 이러한 설정은 Spring 구성 파일인 camel-context.xml 에 추가됩니다.

예 38.2. JMS 구성 요소 Spring 구성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>org.apache.camel.example.spring</package> 1
  </camelContext>

  <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 2
    <property name="connectionFactory"3
       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
         <property name="brokerURL"
                   value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/> 4
       </bean>
    </property>
  </bean>
</beans>
1
CamelContext 는 지정된 Java 패키지 org.apache.camel.example.spring 에서 찾은 RouteBuilder 클래스를 자동으로 인스턴스화합니다.
2
ID가 있는 8080 요소인 jms 에서는 JMS 구성 요소를 구성합니다. polkit ID는 구성 요소의 URI 접두사에 해당합니다. 예를 들어 경로가 URI를 사용하여 끝점을 지정하는 경우 jms://MyQName, Apache Camel은 jms Ignition 요소의 설정을 사용하여 JMS 구성 요소를 자동으로 로드합니다.
3
JMS는 메시징 서비스에 대한 래퍼일 뿐입니다. JmsComponent 클래스에서 connectionFactory 속성을 설정하여 메시징 시스템의 구체적인 구현을 지정해야 합니다.
4
이 예제에서 JMS 메시징 서비스의 구체적인 구현은 Apache ActiveMQ입니다. brokerURL 속성은 메시지 브로커가 로컬 JVM(Java 가상 시스템)에 포함된 ActiveMQ 브로커 인스턴스에 대한 연결을 초기화합니다. JVM에 브로커가 아직 존재하지 않는 경우 ActiveMQ는 options broker.persistent=false ( broker가 메시지를 유지하지 않음) 및 broker.useJmx=false (임시 포트를 열지 않음)로 인스턴스화합니다.