비즈니스 통합자는 확장을 코딩하는 개발자와 요구 사항을 공유합니다. 개발자는 확장자가 포함된 .jar 파일을 제공합니다. 비즈니스 통합자는 Fuse Online에서 .jar 파일을 업로드하여 사용자 지정 커넥터, 사용자 지정 단계 또는 Fuse Online에서 사용할 수 있는 라이브러리 리소스를 만듭니다.
Red Hat Developer Studio의 Fuse Tooling 플러그인은 단계 확장 또는 커넥터 확장을 개발하는 데 도움이 되는 마법사를 제공합니다. Developer Studio에서 단계 확장 또는 커넥터 확장을 개발하도록 선택하는 경우 또는 다른 IDE에서 개인 기본 설정의 문제입니다. Developer Studio 플러그인 사용에 대한 자세한 내용은 Fuse Online 통합을 위한 확장 개발을 참조하십시오.
이 문서에서는 다음 항목에서는 절차를 간략하게 설명하고 요구 사항을 설명하고 선택한 IDE에서 확장 기능을 개발하기 위한 추가 예제를 제공합니다.
연결 간 통합 데이터에서 작동하는 하나 이상의 사용자 지정 단계입니다. 각 사용자 지정 단계는 하나의 작업을 수행합니다. 이는 단계 확장입니다.
통합 런타임에서 사용하는 라이브러리 리소스입니다. 예를 들어 라이브러리 확장은 Oracle과 같은 전용 SQL 데이터베이스에 연결하기 위한 JDBC 드라이버를 제공할 수 있습니다.
통합할 특정 애플리케이션 또는 서비스에 대한 연결을 생성하기 위한 단일 사용자 정의 커넥터입니다. 이는 커넥터 확장입니다.
참고
Fuse Online에서는 OpenAPI 문서를 사용하여 REST API 클라이언트용 커넥터를 만들 수 있습니다. REST API 클라이언트 커넥터 개발을 참조하십시오.
비즈니스 통합자는 확장을 코딩하는 개발자와 요구 사항을 공유합니다. 개발자는 확장자가 포함된 .jar 파일을 제공합니다. 비즈니스 통합자는 Fuse Online에서 .jar 파일을 업로드하여 사용자 지정 커넥터, 사용자 지정 단계 또는 Fuse Online에서 사용할 수 있는 라이브러리 리소스를 만듭니다.
Fuse Online에 업로드하는 확장자 .jar 파일에는 항상 하나의 확장자가 포함되어 있습니다.
각 확장에는 이름, 설명, 지원되는 동작 및 종속 항목과 같은 데이터 구조의 값을 지정하여 확장을 정의하는 .json 파일이 있어야 합니다. 다음 표는 각 확장 유형에 대해 Maven이 확장 정의 JSON 파일을 생성할 수 있는지 여부와 필요한 데이터 구조를 나타냅니다.
Expand
확장 유형
Maven에서 확장 정의를 생성할 수 있음
필수 데이터 structure
Java의 단계 확장
제공됨
schemaVersion 이름 설명 extensionId extensionsType 작업 종속 항목 *
XML의 단계 확장
없음
schemaVersion 이름 설명 extensionId extensionsType 작업 종속 항목 *
커넥터 확장
없음
schemaVersion 이름 설명 extensionId extensionsType 속성 작업 종속 항목 *componentSchemeCryostatconnectorCustomizersCryostatconnectorFactory
라이브러리 확장
없음
schemaVersion 이름 설명 extensionId extensionsType 종속 항목 *
* 종속 항목의 사양은 엄격하게 요구되지는 않지만 실제로는 거의 항상 지정해야 하는 종속성이 있습니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
schemaVersion 은 확장 정의 스키마의 버전을 정의합니다. 내부적으로 Syndesis는 schemaVersion 을 사용하여 확장 확장 정의를 내부 모델에 매핑하는 방법을 결정합니다. 이를 통해 이전 버전의 Syndesis에 대해 개발된 확장 기능을 최신 버전의 Syndesis에 배포할 수 있습니다.
확장의 이름입니다.Is the name of the extension. Fuse Online에 확장을 업로드할 때 이 이름이 표시됩니다.
설명은 지정할 유용한 정보입니다. Fuse Online은 이 값을 사용하지 않습니다.
버전은 확장 업데이트를 구분하는 데 도움이 되는 편의를 위한 것입니다. Fuse Online은 이 값을 사용하지 않습니다.
extensionId 는 확장에 대한 고유한 ID를 정의합니다. 이는 최소한 통합 환경에서 고유해야 합니다.
extensionType 은 확장이 제공하는 통합에 해당합니다. Syndesis 버전 1.3부터 다음과 같은 확장 유형이 지원됩니다.
단계
커넥터
라이브러리
커넥터 확장의 최상위 수준에 있는 속성이 필요합니다. Fuse Online 사용자가 커넥터를 선택하여 연결을 만들 때 표시되는 Fuse Online을 제어합니다. 이 속성 개체에는 연결을 만들기 위한 각 폼 컨트롤의 속성 세트가 포함되어 있습니다.This properties object contains a set of properties for each form control for creating a connection. 예를 들면 다음과 같습니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
커넥터 확장에서 중첩된 속성 오브젝트는 연결 작업을 구성하기 위한 HTML 양식 제어를 정의합니다. 단계 확장에서 작업 개체에는 속성 개체가 포함되어 있습니다.In step extensions, the actions object contains a properties object. properties 오브젝트는 단계 구성을 위한 각 양식 컨트롤의 속성 세트를 정의합니다. 사용자 인터페이스 속성에 대한 설명도 참조하십시오.
작업은 커넥터가 수행할 수 있는 작업 또는 연결 간 단계에서 수행할 수 있는 작업을 정의합니다. 커넥터 및 단계 확장만 지정한 작업을 사용합니다. 작업 사양의 형식은 다음과 같습니다.
커넥터 확장 및 단계 확장에서는 확장자 정의 JSON 파일 또는 Java 클래스 파일에서 사용자 인터페이스 속성을 지정합니다. 이러한 속성 설정은 Fuse Online 사용자가 연결을 만들거나, 연결 작업을 구성하거나, 확장 프로그램에서 제공하는 단계를 구성할 때 Fuse Online이 표시되는 HTML 양식 컨트롤을 정의합니다.
Fuse Online 콘솔의 확장 사용자 인터페이스에 표시할 각 양식 컨트롤의 속성을 지정해야 합니다. 각 폼 컨트롤에 대해 임의의 순서로 일부 또는 모든 속성을 지정합니다.For each form control, specify some or all properties in any order.
사용자 인터페이스 속성 사양의 예
IRC 커넥터의 일부인 JSON 파일에서 최상위 속성 오브젝트는 Fuse Online 사용자가 IRC 커넥터를 선택하여 연결을 생성한 후 표시되는 HTML 양식 컨트롤을 정의합니다. 세 가지 양식 제어에 대한 속성 정의에는 hostname,password, port 세 가지 유형이 있습니다.
"properties": {
"hostname": {
"description": "IRC Server hostname",
"displayName": "Hostname",
"labelHint": "Hostname of the IRC server to connect to",
"order": "1",
"required": true,
"secret": false,
"type": "string"
},
"password": {
"description": "IRC Server password",
"displayName": "Password",
"labelHint": "Required if IRC server requires it to join",
"order": "3",
"required": false,
"secret": true,
"type": "string"
},
"port": {
"description": "IRC Server port",
"displayName": "Port",
"labelHint": "Port of the IRC server to connect to",
"order": "2",
"required": true,
"secret": false,
"tags": [],
"type": "int"
}
},
"properties": {
"hostname": {
"description": "IRC Server hostname",
"displayName": "Hostname",
"labelHint": "Hostname of the IRC server to connect to",
"order": "1",
"required": true,
"secret": false,
"type": "string"
},
"password": {
"description": "IRC Server password",
"displayName": "Password",
"labelHint": "Required if IRC server requires it to join",
"order": "3",
"required": false,
"secret": true,
"type": "string"
},
"port": {
"description": "IRC Server port",
"displayName": "Port",
"labelHint": "Port of the IRC server to connect to",
"order": "2",
"required": true,
"secret": false,
"tags": [],
"type": "int"
}
},
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이러한 속성 사양을 기반으로 Fuse Online 사용자가 IRC 커넥터를 선택할 때 Fuse Online에 다음과 같은 대화 상자가 표시됩니다. 사용자가 두 개의 필수 필드에 값을 입력하고 Next 를 클릭하면 Fuse Online에서 Fuse Online 사용자가 입력하는 값으로 구성된 IRC 연결을 생성합니다.
확장 정의 JSON 파일의 속성 오브젝트 정보
커넥터 확장에서 다음을 수행합니다.
최상위 속성 개체가 필요합니다. Fuse Online 사용자가 커넥터를 선택하여 연결을 만들 때 표시되는 Fuse Online을 제어합니다. 이 속성 개체에는 연결을 만들기 위한 각 폼 컨트롤의 속성 세트가 포함되어 있습니다.This properties object contains a set of properties for each form control for creating a connection.
actions 오브젝트에는 각 작업에 대한 속성 개체가 있습니다. 이러한 속성 개체 각각에 는 해당 작업을 구성하기 위한 각 양식 컨트롤의 속성 세트가 있습니다.
단계 확장에서 actions 오브젝트에는 속성 개체가 포함되어 있습니다. properties 오브젝트는 단계 구성을 위한 각 양식 컨트롤의 속성 세트를 정의합니다. JSON 계층 구조는 다음과 같습니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Java 파일의 사용자 인터페이스 속성 정보
Java 파일에서 사용자 인터페이스 양식 제어를 정의하려면 연결, 작업 또는 단계의 사용자 구성을 정의하는 각 클래스 파일에서 io.syndesis.extension.api.annotations.ConfigurationProperty 를 가져옵니다. Fuse Online 콘솔이 표시할 각 양식 제어에 대해 @ConfigurationProperty 주석 뒤에 속성 목록을 지정합니다. 지정할 수 있는 속성에 대한 자세한 내용은 이 섹션의 끝에 있는 사용자 인터페이스 속성 참조 테이블을 참조하십시오.
다음 코드에서는 하나의 양식 컨트롤에 대한 속성 정의를 보여줍니다. 이 코드는 RouteBuilder 를 사용하여 Camel 경로를 개발하는 예입니다.
public class LogAction extends RouteBuilder {
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
public class LogAction extends RouteBuilder {
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
Copy to ClipboardCopied!Toggle word wrapToggle overflow
다음 코드에서는 두 개의 컨트롤에 대한 속성 정의를 보여줍니다. 이 코드는 Syndesis Step API 사용 예의 예입니다.
@Action(id = "split", name = "Split", description = "Split your exchange")
public class SplitAction implements Step {
@ConfigurationProperty(
name = "language",
displayName = "Language",
description = "The language used for the expression")
private String language;
@ConfigurationProperty(
name = "expression",
displayName = "Expression",
description = "The expression used to split the exchange
private String language;
@Action(id = "split", name = "Split", description = "Split your exchange")
public class SplitAction implements Step {
@ConfigurationProperty(
name = "language",
displayName = "Language",
description = "The language used for the expression")
private String language;
@ConfigurationProperty(
name = "expression",
displayName = "Expression",
description = "The expression used to split the exchange
private String language;
Copy to ClipboardCopied!Toggle word wrapToggle overflow
다음 표에는 Fuse Online 양식 제어에 사용 가능한 입력 유형이 나열되어 있습니다. 컨트롤의 속성 집합에서 알 수 없는 유형 값을 지정하면 Fuse Online에서 한 줄의 텍스트를 허용하는 입력 필드를 표시합니다. 기본값은 "type": "text" 입니다.
Expand
속성 유형 값
HTML
Fuse Online 디스플레이
boolean
<input type="checkbox">
사용자가 선택할 수 있거나 선택할 수 없는 확인란입니다.
duration
Fuse Online 사용자가 시간 단위(밀리초, 초, 분, 시간 또는 일)를 선택할 수 있는 사용자 지정 컨트롤입니다. 또한 사용자가 번호를 입력하고 Fuse Online은 밀리초를 반환합니다. 예: "properties": { "period": { "type": "duration" "defaultValue": 60000, "description": "Period", "displayName": "Period", "labelHint": "labelHint": "Delay between integration executions.", Cryostat "required": false, Cryostat "secret": false, Cryostat }
Hidden
<input type="hidden">
이 필드는 Fuse Online 콘솔에 표시되지 않습니다. 다른 속성을 사용하여 이 필드와 연결된 데이터(예: 어떤 종류의 텍스트 데이터)를 지정할 수 있습니다. Fuse Online 사용자는 이 데이터를 보거나 수정할 수 없지만 사용자가 Fuse Online 페이지에 대해 View Source 를 선택하면 숨겨진 필드가 소스 화면에 표시됩니다. 따라서 보안 목적으로 숨겨진 필드를 사용하지 마십시오.
int,integer,long,number
<input type="number">
번호를 허용하는 입력 필드입니다.
암호
<input type="password">
Fuse Online에서 사용자가 입력한 문자를 마스킹하는 입력 필드(일반적으로 별표)입니다.
폼 컨트롤의 enum 속성에서 지정하는 각 레이블/값 쌍에 대한 항목이 포함된 드롭다운 목록입니다.A drop-down list with an entry for each label/value pair that you specify in the form control's enum property.
Fuse Online에서 표시하는 양식 컨트롤의 종류를 제어합니다. 자세한 내용은 이전 표를 참조하십시오.
목
숫자
textarea 필드에 대해 설정된 경우 텍스트 영역 컨트롤에 대해 처음 표시되는 열 수를 제어합니다.
controlHint 또는 controlTooltip
string
설정하면 값이 form 컨트롤 요소의 HTML title 속성에 매핑됩니다. title 속성이 있는 다른 요소와 마찬가지로 커서가 컨트롤을 가리키면 툴팁이 표시됩니다. 툴팁 내용은 controlHint 또는 controlTooltip 속성의 값에서 가져옵니다.
dataList
array
type 속성 값이 텍스트 인 경우 Fuse Online은 dataList 속성의 값을 사용하여 typeahead 지원을 추가합니다. 문자열 배열을 지정합니다.
defaultValue
속성의 값에 따라 달라집니다.Depending according to the value of the type property.
Fuse Online은 처음에 양식 필드에 이 값을 표시합니다. defaultValue 속성 설정 유형은 type 속성의 값과 일치해야 합니다. 예를 들어 type 속성이 number 로 설정된 경우 defaultValue 설정은 숫자여야 합니다. 사용자가 이 초기 필드 값을 변경하지 않으면 Fuse Online에서 defaultValue 를 사용합니다.
description
string
설정된 경우 Fuse Online은 양식 제어 아래에 이 값을 표시합니다. 일반적으로 이 메시지는 제어에 대한 짧고 유용한 메시지입니다.
displayName
string
Fuse Online에서 이 값을 표시합니다.
enum
array
설정된 경우 Fuse Online은 type 속성에 대한 설정을 재정의하고 선택 컨트롤을 구현합니다. 배열을 레이블 및 값 속성 세트로 지정합니다. 레이블 속성은 사용자 인터페이스에 선택 항목의 레이블로 표시됩니다. value 속성은 해당 선택 항목의 값이 됩니다.
labelHint 또는 labelTooltip
string
설정하면 표시 이름 옆에 ? 아이콘이 표시됩니다. Fuse Online 사용자가 ? 아이콘을 클릭하면 labelHint 속성 값이 표시됩니다.
max
숫자
number 필드에 설정된 경우 허용 가능한 가장 높은 값을 정의합니다.
분
숫자
숫자 필드에 설정된 경우 허용 가능한 가장 낮은 값을 정의합니다.
multiple
부울
선택 필드 또는 enum 속성 세트가 있는 필드의 경우 Fuse Online은 선택 드롭다운 대신 다중 선택 컨트롤을 표시합니다.
주문
숫자
Fuse Online 콘솔의 제어 순서를 결정합니다. Fuse Online에서는 오름차순, 즉 "order": "1" 이 먼저 표시됩니다. 주문 속성 사양 없이 Fuse Online은 JSON 파일에서 정의하는 순서대로 제어를 표시합니다.
자리 표시자
string
설정된 경우 Fuse Online은 사용자가 예상 입력을 이해하는 데 도움이 되도록 입력 필드에 이 값을 hazed font에 표시합니다.
required
부울
필요한 특성이 컨트롤에 설정되어 있는지 여부를 제어합니다. true인 경우 Fuse Online 사용자가 이 컨트롤 값을 입력해야 합니다.
행
숫자
형식 속성 값이 textarea 인 경우 행 속성의 값은 처음에 텍스트 영역 컨트롤에 표시되는 행 수를 제어합니다.If the value of the type property is textarea, the value of the rows property controls the number of rows initially displayed in the textarea control.
Secret
부울
지정된 경우, Fuse Online은 아직 설정이 아닌 경우 컨트롤의 type 속성 설정을 password 로 변경합니다.
데이터 셰이프는 데이터 매퍼에서 사용할 데이터 유형 메타데이터를 보유합니다.A data shape holds data type metadata for use by the data mapper. 데이터 매퍼는 이 메타데이터를 데이터 매퍼 사용자 인터페이스에서 소스 및 대상 데이터 필드를 표시하는 데 사용하는 내부 문서로 변환합니다. 커넥터 또는 사용자 지정 단계에 대한 확장 정의 JSON 파일에서 각 작업 사양은 입력 데이터 도형(inputDataShape) 및 출력 데이터 도형(outputDataShape)을 정의합니다.
확장을 개발할 때는 데이터 매퍼가 소스 및 대상 필드를 올바르게 처리하고 표시할 수 있는 데이터 셰이프 속성을 지정해야 합니다. 다음 데이터 셰이프 속성은 데이터 매퍼 동작에 영향을 미칩니다.
kind
type
사양
name
description
kind 속성 정보
데이터 셰이프 종류 속성은 DataShapeKinds 열거로 표시됩니다. kind 속성에 가능한 값은 다음과 같습니다.
Java 는 데이터 유형이 Java 클래스로 표시됨을 나타냅니다. type 속성에 정규화된 클래스 이름을 지정하여 "kind": "java" 선언을 따릅니다. 예를 들면 다음과 같습니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
any 는 데이터 유형이 구조화되지 않음을 나타냅니다. 예를 들어 바이트 배열 또는 무료 형식 텍스트일 수 있습니다. 데이터 매퍼는 종류 속성이 임의의 로 설정된 경우 데이터 모양을 무시합니다. 즉, 데이터는 데이터 매퍼에 표시되지 않으므로 이 데이터에 또는 이 데이터에 필드를 매핑할 수 없습니다.
그러나 사용자 지정 커넥터의 경우 kind 속성이 로 설정된 경우 사용자 지정 커넥터에서 만든 연결을 구성할 때 Fuse Online에서 입력 및/또는 출력 데이터 유형을 지정하라는 메시지를 표시합니다. 이는 통합에 연결을 추가할 때 발생합니다. 데이터 셰이프 스키마의 종류, 지정한 스키마 종류에 대한 적절한 문서 및 데이터 유형의 이름을 지정할 수 있습니다.
none 은 데이터 유형이 없음을 나타냅니다. 입력 데이터 셰이프의 경우 연결 또는 단계가 데이터를 읽지 않음을 나타냅니다. 출력 데이터 셰이프의 경우 연결 또는 단계가 데이터를 수정하지 않음을 나타냅니다.For an output data shape, this indicates that the connection or step does not modify data. 예를 들어 입력 메시지 본문이 출력 메시지 본문으로 전송되는 경우 kind 속성을 none 으로 설정하면 데이터가 전달됨을 나타냅니다. 데이터 매퍼는 kind 가 none 으로 설정된 경우 데이터 셰이프를 무시합니다. 즉, 데이터는 데이터 매퍼에 표시되지 않으므로 이 데이터에 또는 이 데이터에 필드를 매핑할 수 없습니다.
유형 속성 정보
kind 속성 값이 java 이면 "kind": "java" 선언 뒤에 정규화된 Java 클래스 이름을 지정하는 형식 선언이 옵니다. 예를 들면 다음과 같습니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
kind 속성이 java 이외의 것으로 설정되면 type 속성에 대한 모든 설정이 무시됩니다.
사양 속성 정보
kind 속성 설정은 다음 표에 표시된 대로 specification 속성의 설정을 결정합니다.
Expand
kind 속성 설정
사양 속성 설정
java
Java 검사 결과
Java에서 작성하는 각 확장에 대해 extension-maven-plugin 을 사용하여 적어도 Java 검사 결과를 가져옵니다. 플러그인은 spec 속성의 설정으로 JSON 확장 정의 파일에 Java 검사 결과를 삽입합니다. 이는 Java 검사 결과를 얻을 수 있는 유일한 방법이며 Fuse Online의 데이터 매핑에 필요합니다.
미리 알림으로 Java로 작성된 단계 확장을 위해 extension-maven-plugin 은 JSON 확장 정의 파일을 생성하고 필수 콘텐츠로 채웁니다. 커넥터 확장의 경우 extension-maven-plugin 이 Java 검사 결과를 JSON 확장 정의 파일에 삽입하는 동안 플러그인이 삽입하지 않는 필수 콘텐츠를 수동으로 추가해야 합니다.
json-schema
실제 JSON 스키마 문서. 이 설정은 문서에 대한 참조일 수 없으며 JSON 스키마는 참조를 통해 다른 JSON 스키마 문서를 가리킬 수 없습니다.
json-instance
예제 데이터가 포함된 실제 JSON 문서입니다. 데이터 매퍼는 예제 데이터에서 데이터 유형을 파생합니다. 이 설정은 문서에 대한 참조일 수 없습니다.
xml-schema
실제 XML 스키마 문서. 이 설정은 문서에 대한 참조일 수 없으며 XML 스키마는 참조를 통해 다른 XML 스키마 문서를 가리킬 수 없습니다.
xml-instance
실제 XML 인스턴스 문서. 이 설정은 문서에 대한 참조일 수 없습니다.
Any
specification 속성은 필요하지 않습니다. 모든 설정은 무시됩니다.
none
specification 속성은 필요하지 않습니다. 모든 설정은 무시됩니다.
name 속성 정보
data shape name 속성은 사람이 읽을 수 있는 데이터 유형의 이름을 지정합니다. 데이터 매퍼는 이 이름을 사용자 인터페이스에 데이터 필드의 레이블로 표시합니다. 다음 이미지에서 twitter focus tion은 이름 속성의 값을 볼 수 있는 예입니다.
이 이름은 Fuse Online 흐름 시각화의 데이터 유형 지표에도 나타납니다.
description 속성 정보
데이터 셰이프 설명 속성은 커서가 데이터 매퍼 사용자 인터페이스에서 데이터 유형 이름을 가리킬 때 툴팁으로 표시되는 텍스트를 지정합니다.
Syndesis는 syndesis-extension-plugin 과 함께 사용할 수 있는 사용자 지정 Java 주석을 제공합니다. Java에서 단계 확장 또는 커넥터 확장을 구현하는 경우 Maven을 활성화하여 확장 정의 JSON 파일에 작업 정의를 추가할 수 있는 주석을 지정할 수 있습니다. 주석 처리를 활성화하려면 Maven 프로젝트에 다음 종속성을 추가합니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Spring Boot는 Camel 컨텍스트에 빈을 삽입하는 통합 런타임이므로 표준 Spring Boot 사례를 따라야 합니다. 예를 들어 자동 구성 클래스를 생성하고 여기에 빈을 생성합니다. 그러나 기본 동작은 확장 코드에 패키지 스캔이 적용되지 않는다는 것입니다. 따라서 단계 확장자에 META-INF/spring.factories 파일을 생성하고 채워야 합니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
XML로 확장을 개발할 때는 확장자 정의 JSON 파일을 직접 생성해야 합니다. 이 XML 조각의 경우 src/main/resources/META-INF/syndesis/syndesis-extension-definition.json 파일은 다음과 같이 작업을 정의할 수 있습니다.
{
"actionType": "step",
"id": "log-body-with-prefix",
"name": "Log body with prefix",
"description": "A simple body log with a prefix",
"descriptor": {
"kind": "ENDPOINT",
"entrypoint": "direct:log",
"resource": "classpath:log-body-action.xml",
"inputDataShape": {
"kind": "none"
},
"outputDataShape": {
"kind": "none"
},
"propertyDefinitionSteps": [ {
"description": "extension-properties",
"name": "extension-properties",
"properties": {
"prefix": {
"componentProperty": false,
"deprecated": false,
"description": "The Log body prefix message",
"displayName": "Log Prefix",
"javaType": "String",
"kind": "parameter",
"required": false,
"secret": false,
"type": "string"
}
}
} ]
}
}
{
"actionType": "step",
"id": "log-body-with-prefix",
"name": "Log body with prefix",
"description": "A simple body log with a prefix",
"descriptor": {
"kind": "ENDPOINT",
이러한 속성은 이 사용자 지정 단계에서 정의한 작업이 통합 단계에 이 단계를 추가하는 통합업체에 노출되는 속성입니다. Fuse Online에서는 사용자 인터페이스에서 지정하는 각 값이 속성 이름과 동일한 메시지 헤더에 매핑됩니다. 이 예제에서 통합자는 로그 접두사 표시 이름이 있는 하나의 입력 필드를 볼 수 있습니다. 자세한 내용은 사용자 인터페이스 속성에 대한 설명을 참조하십시오.
주의
Syndesis는 전체 Camel XML 구성을 지원하지 않습니다. Syndesis는 <routes> 태그만 지원합니다.
RouteBuilder 클래스를 지원하는 Camel 경로로 작업을 개발하여 사용자 정의 단계를 구현할 수 있습니다. 이러한 경로에는 직접 과 같은 입력이 있습니다. Syndesis는 다른 Camel 경로를 호출하는 것과 동일한 방식으로 이 경로를 호출합니다.
선택적 접두사를 사용하여 메시지 본문을 기록하는 단계를 생성하는 예제를 구현하려면 다음과 같이 작성할 수 있습니다.
import org.apache.camel.builder.RouteBuilder;
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix",
entrypoint = "direct:log")
public class LogAction extends RouteBuilder {
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
@Override
public void configure() throws Exception {
from("direct::start")
.choice()
.when(simple("${header.prefix} != ''"))
.log("${header.prefix} ${body}")
.otherwise()
.log("Output ${body}")
.endChoice();
}
}
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix",
entrypoint = "direct:log")
public class LogAction extends RouteBuilder {
@ConfigurationProperty(
2
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
@Override
public void configure() throws Exception {
from("direct::start")
이러한 속성은 이 사용자 지정 단계에서 정의한 작업이 통합 단계에 이 단계를 추가하는 통합업체에 노출되는 속성입니다. Fuse Online에서는 사용자 인터페이스에서 지정하는 각 값이 속성 이름과 동일한 메시지 헤더에 매핑됩니다. 이 예제에서 통합자는 로그 접두사 표시 이름이 있는 하나의 입력 필드를 볼 수 있습니다. 자세한 내용은 사용자 인터페이스 속성에 대한 설명을 참조하십시오.
RouteBuilder 클래스 및 Spring Boot를 지원하는 Camel 경로로 작업을 개발하여 사용자 정의 단계를 구현할 수 있습니다. 이 예에서 Spring Boot는 Camel 컨텍스트에서 RouteBuilder 오브젝트를 등록하는 기능입니다. Syndesis는 다른 Camel 경로를 호출하는 것과 동일한 방식으로 이 경로를 호출합니다.
선택적 접두사를 사용하여 메시지 본문을 기록하는 단계를 생성하는 예제를 구현하려면 다음과 같이 작성할 수 있습니다.
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ActionsConfiguration {
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix",
entrypoint = "direct:log")
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
@Bean
public RouteBuilder logBodyWithprefix() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct::start")
.choice()
.when(simple("${header.prefix} != ''"))
.log("${header.prefix} ${body}")
.otherwise()
.log("Output ${body}")
.endChoice();
}
};
}
}
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ActionsConfiguration {
@Action(
1
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix",
entrypoint = "direct:log")
@ConfigurationProperty(
2
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
@Bean
3
public RouteBuilder logBodyWithprefix() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct::start")
이러한 속성은 이 사용자 지정 단계에서 정의한 작업이 통합 단계에 이 단계를 추가하는 통합업체에 노출되는 속성입니다. Fuse Online에서는 사용자 인터페이스에서 지정하는 각 값이 속성 이름과 동일한 메시지 헤더에 매핑됩니다. 이 예제에서 통합자는 로그 접두사 표시 이름이 있는 하나의 입력 필드를 볼 수 있습니다. 자세한 내용은 사용자 인터페이스 속성에 대한 설명을 참조하십시오.
중요
Spring Boot로 구성 클래스를 검색할 수 있도록 하려면 META-INF/spring.factories 라는 파일에 나열해야 합니다. 예를 들면 다음과 같습니다.
Camel 8080 프로세서로 작업을 개발하여 사용자 지정 단계를 구현할 수 있습니다. 선택적 접두사를 사용하여 메시지 본문을 기록하는 단계를 생성하는 예제를 구현하려면 다음과 같이 작성할 수 있습니다.
import org.apache.camel.Body;
import org.apache.camel.Handler;
import org.apache.camel.Header;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix")
public class LogAction {
private static final Logger LOGGER = LoggerFactory.getLogger(LogAction.class);
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
@Handler
public void process(@Header("prefix") String prefix, @Body Object body) {
if (prefix == null) {
LOGGER.info("Output {}", body);
} else {
LOGGER.info("{} {}", prefix, body);
}
}
}
import org.apache.camel.Body;
import org.apache.camel.Handler;
import org.apache.camel.Header;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix")
public class LogAction {
private static final Logger LOGGER = LoggerFactory.getLogger(LogAction.class);
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
@Handler
이러한 속성은 이 사용자 지정 단계에서 정의한 작업이 통합 단계에 이 단계를 추가하는 통합업체에 노출되는 속성입니다. Fuse Online에서는 사용자 인터페이스에서 지정하는 각 값이 속성 이름과 동일한 메시지 헤더에 매핑됩니다. 이 예제에서 통합자는 로그 접두사 표시 이름이 있는 하나의 입력 필드를 볼 수 있습니다. 자세한 내용은 사용자 인터페이스 속성에 대한 설명을 참조하십시오.
빈을 사용하면 교환 헤더에서 사용자 속성을 검색하는 대신 사용자 속성을 빈에 삽입하는 것이 편리할 수 있습니다. 이렇게 하려면 삽입하려는 속성에 대한 getter 및 setter 메서드를 구현합니다. 작업 구현은 다음과 같습니다.
import org.apache.camel.Body;
import org.apache.camel.Handler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix")
public class LogAction {
private static final Logger LOGGER = LoggerFactory.getLogger(LogAction.class);
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getPrefix() {
return prefix;
}
@Handler
public void process(@Body Object body) {
if (this.prefix == null) {
LOGGER.info("Output {}", body);
} else {
LOGGER.info("{} {}", this.prefix, body);
}
}
}
import org.apache.camel.Body;
import org.apache.camel.Handler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.syndesis.extension.api.annotations.Action;
import io.syndesis.extension.api.annotations.ConfigurationProperty;
@Action(
id = "log-body-with-prefix",
name = "Log body with prefix",
description = "A simple body log with a prefix")
public class LogAction {
private static final Logger LOGGER = LoggerFactory.getLogger(LogAction.class);
@ConfigurationProperty(
name = "prefix",
description = "The Log body prefix message",
displayName = "Log Prefix",
type = "string")
private String prefix;
public void setPrefix(String prefix) {
1
this.prefix = prefix;
}
public String getPrefix() {
Fuse Online에서 통합에서 연결하려는 애플리케이션 또는 서비스에 대한 커넥터를 제공하지 않는 경우 숙련된 개발자는 Fuse Online에 새 커넥터를 제공하는 확장을 코딩할 수 있습니다. 이 문서에서는 커넥터 확장 개발을 위한 소개를 제공합니다. 커넥터 개발에 대한 자세한 내용은 Syndesis 커뮤니티 사이트에서 통합 커넥터 개발을 참조하십시오.
중요
커넥터 확장의 경우 Java 코드에서 확장자 정의 JSON 파일을 자동으로 생성할 수 없습니다.
커넥터는 기본적으로 Camel 구성 요소의 프록시입니다. 커넥터는 기본 구성 요소를 구성하고 확장 정의 및 Fuse Online 웹 인터페이스에서 수집하는 사용자 제공 옵션에 따라 끝점을 생성합니다.
커넥터 확장 정의는 다음과 같은 추가 데이터 구조를 사용하여 단계 확장에 필요한 확장 정의를 확장합니다.
componentScheme
커넥터가 사용하는 Camel 구성 요소를 정의합니다. 커넥터 또는 작업에 대해 componentScheme 을 설정할 수 있습니다. 커넥터와 작업에 대해 componentScheme 을 설정하면 작업에 대한 설정이 우선합니다.
connectorCustomizers
ComponentProxyCustomizer 클래스를 구현하는 클래스 목록을 지정합니다. 각 클래스는 커넥터의 동작을 사용자 지정합니다. 예를 들어 클래스는 기본 구성 요소/endpoint에 적용되기 전에 속성을 조작하거나 클래스가 사전/post 엔드포인트 논리를 추가할 수 있습니다. 각 클래스에 대해 구현의 전체 클래스 이름을 지정합니다(예: com.mycomponent.MyCustomizer ). 동작 및 커넥터에 대해 connectorCustomizers 를 설정할 수 있습니다. 설정되어 있는 내용에 따라 Fuse Online은 커넥터에 사용자 지정기를 먼저 적용한 다음 작업에 적용됩니다.
connectorFactory
기본 구성 요소/endpoint를 생성 및/또는 구성하는 ComponentProxyFactory 클래스를 구현하는 클래스를 정의합니다. 구현의 전체 클래스 이름을 지정합니다. 커넥터 또는 작업에 대해 connectorFactory 를 설정할 수 있습니다. 작업이 우선합니다.
Customizer 예
다음 사용자 지정기 예제에서는 개별 옵션에서 DataSource를 설정합니다.The following customizer example sets up a DataSource from individual options:
public class DataSourceCustomizer implements ComponentProxyCustomizer, CamelContextAware {
private final static Logger LOGGER = LoggerFactory.getLogger(DataSourceCustomizer.class);
private CamelContext camelContext;
@Override
public void setCamelContext(CamelContext camelContext) {
this.camelContext = camelContext;
}
@Override
public CamelContext getCamelContext() {
return this.camelContext;
}
@Override
public void customize(ComponentProxyComponent component, Map<String, Object> options) {
if (!options.containsKey("dataSource")) {
if (options.containsKey("user") && options.containsKey("password") && options.containsKey("url")) {
try {
BasicDataSource ds = new BasicDataSource();
consumeOption(camelContext, options, "user", String.class, ds::setUsername);
consumeOption(camelContext, options, "password", String.class, ds::setPassword);
consumeOption(camelContext, options, "url", String.class, ds::setUrl);
options.put("dataSource", ds);
} catch (@SuppressWarnings("PMD.AvoidCatchingGenericException") Exception e) {
throw new IllegalArgumentException(e);
}
} else {
LOGGER.debug("Not enough information provided to set-up the DataSource");
}
}
}
}
public class DataSourceCustomizer implements ComponentProxyCustomizer, CamelContextAware {
private final static Logger LOGGER = LoggerFactory.getLogger(DataSourceCustomizer.class);
private CamelContext camelContext;
@Override
public void setCamelContext(CamelContext camelContext) {
1
this.camelContext = camelContext;
}
@Override
public CamelContext getCamelContext() {
2
return this.camelContext;
}
@Override
public void customize(ComponentProxyComponent component, Map<String, Object> options) {
if (!options.containsKey("dataSource")) {
if (options.containsKey("user") && options.containsKey("password") && options.containsKey("url")) {
try {
BasicDataSource ds = new BasicDataSource();
consumeOption(camelContext, options, "user", String.class, ds::setUsername);
Apache Derby, MySQL 및 PostgreSQL 이외의 SQL 데이터베이스에 연결하려면 연결하려는 데이터베이스에 대한 JDBC 드라이버를 래핑하는 라이브러리 확장을 생성할 수 있습니다. 이 확장을 Fuse Online에 업로드한 후 Fuse 온라인 제공 데이터베이스 커넥터는 드라이버에 액세스하여 독점 데이터베이스에 대한 연결을 검증하고 생성할 수 있습니다. 특정 데이터베이스에 대한 새 커넥터를 생성하지 않습니다.
Syndesis 오픈 소스 커뮤니티는 JDBC 드라이버를 래핑하는 확장을 생성하기 위한 프로젝트를 제공합니다.
하나의 드라이버를 확장에서만 패키지합니다. 이렇게 하면 특정 데이터베이스를 관리하는 과정의 일부로 확장을 더 쉽게 관리할 수 있습니다. 그러나 두 개 이상의 드라이버를 래핑하는 라이브러리 확장을 생성할 수 있습니다.
사전 요구 사항
Syndesis 프로젝트를 사용하려면 GitHub 계정이 있어야 합니다.
절차
다음 중 하나를 수행하여 연결하려는 데이터베이스에 대해 JDBC 드라이버에 대한 액세스를 확인하십시오.
드라이버가 Maven 리포지토리에 없는 경우 드라이버를 syndesis-jdbc-driver/lib 폴더에 복사합니다.
syndesis- Cryostat-jdbc-driver/pom.xml 파일을 편집합니다.
Name 요소의 값을 이 확장에 대해 선택한 이름으로 업데이트합니다.
Description 요소의 값을 업데이트하여 이 확장에 대한 유용한 정보를 제공합니다.
드라이버를 syndesis-jdbc-driver/lib 로 복사한 경우 pom.xml 의 systemPath 가 해당 드라이버 파일을 가리키는지 확인합니다. 필요한 경우 드라이버에 따라 적절한 값을 반영하도록 groupId,artifactId 및 version 을 변경합니다.
드라이버가 Maven 리포지토리에 있는 경우 해당 Maven 종속성에 대한 참조가 pom.xml 파일에 있는지 확인합니다.
pom.xml 파일의 나머지 내용을 검사하고 필요에 따라 관련 메타데이터를 변경합니다.
./mvnw -pl :syndesis-jdbc-driver clean 패키지를 실행하여 확장을 빌드합니다.
생성된 .jar 파일은 syndesis-jdbc-driver/target 폴더에 있습니다. Fuse Online에 업로드할 이 .jar 파일을 제공합니다.
참고
Fuse Online에서는 통합해야 하는 라이브러리 확장을 선택할 수 있는 방법이 아직 제공되지 않습니다. 통합에 데이터베이스 연결을 추가하면 Fuse Online에서 jdbc-driver 태그가 있는 모든 확장 기능을 통합 런타임에 추가합니다. 이는 향후 릴리스에서 개선될 것으로 예상됩니다.