TCOMP-2239: Fix Record.Builder interface to avoid API break schema-record
TCOMP-2226: Implement a default UI for streaming sources for user configuration of a StopStrategy component-form component-manager
TCOMP-2234: Override blocking read process in streaming connectors component-manager studio
TCOMP-2258: @Documentation to tooltips in uiSchema component-form component-server
TCOMP-2147: Decrease log level for blacklisted dependencies component-manager
TCOMP-2228: Upgrade git-commit-id-plugin to 4.9.10
TCOMP-2232: Upgrade slf4j to 1.7.34
TCOMP-2238: Upgrade jib-core to 0.16.0
TCOMP-2249: Upgrade johnzon to 1.2.19
TCOMP-2251: Upgrade jackson to 2.13.3
TCOMP-2252: MavenRepositoryResolver call fallback only it’s needed component-manager
TCOMP-2257: Upgrade meecrowave to 1.2.14 component-manager
TCOMP-2263: Upgrade openwebbeans-se to 2.0.27 component-manager
TCOMP-2264: Upgrade TSBI to 3.0.5-20220907120958 tsbi
TCOMP-2239: Fix Record.Builder interface to avoid API break schema-record
TCOMP-2182: Guess Schema in Studio always uses version of component 1 studio studio-integration
TCOMP-2190: Handle partial messages for large payloads in websocket communications component-server studio
TCOMP-2107: Implement a stop strategy for streaming input connectors component-manager studio
TCOMP-2177: Suppress illegal reflective access operation has occurred warnings component-manager
TCOMP-2163: [QA] Component Runtime API test Framework testing
TCOMP-2187: Introduce IntegerConstraintEnricher component-form
TCOMP-2204: Upgrade netty to 4.1.79.Final
TCOMP-2205: Upgrade crawler-commons to 1.3
TCOMP-2206: Upgrade guava to 31.1-jre
TCOMP-2207: Upgrade maven to 3.8.6
TCOMP-2208: Upgrade maven-shade-plugin to 3.3.0 build
TCOMP-2209: Upgrade junit5 to 5.9.0
TCOMP-2210: Upgrade tomcat to 9.0.63
TCOMP-2211: Upgrade cxf to 3.5.2
TCOMP-2212: Upgrade bndlib to 5.2.0
TCOMP-2217: Update rat-plugin to 0.14 build
TCOMP-2219: Add API to convert data in Record schema-record
TCOMP-2223: Upgrade log4j to 2.18.0
TCOMP-2227: Upgrade commons-io to 2.9.0
TCOMP-2229: Upgrade jcommander to 1.81
TCOMP-2230: Allow specific context UI
TCOMP-2233: support decimal type
TCOMP-2190: Handle partial messages for large payloads in websocket communications component-server studio
TCOMP-2177: Suppress illegal reflective access operation has occurred warnings component-manager
TCOMP-2177: Suppress illegal reflective access operation has occurred warnings component-manager
TCOMP-2176: Record : Infinite loop schema-record
TCOMP-2146: Car bundler improvements car-bundler maven-plugin
TCOMP-2151: Add documentation translation to metadata component-server
TCOMP-2132: Optimisation for preparation schema-record
TCOMP-2143: [JDBC TCK]: Support MODULE_LIST field for studio in tck connector ui for driver jars choose studio
TCOMP-2152: Upgrade jackson to 2.13.2 beam bom maven-plugin
TCOMP-2153: Bump netty to 4.1.77.Final due to CVE CVE-2022-24823 testing
TCOMP-2154: Upgrade maven-settings to 3.8.5 due to CVE-2021-26291 build
TCOMP-2155: Upgrade jdom2 to 2.0.6.1 due to CVE-2021-33813 beam
TCOMP-2164: Ensure that decryption is done only on credential fields component-server vault-client
TCOMP-2171: Add component type to ComponentIndex component-server
TCOMP-2152: Upgrade jackson to 2.13.2 beam bom maven-plugin
TCOMP-2146: Car bundler improvements car-bundler maven-plugin
TCOMP-2111: [Runtime convergence] : Join connector fails in cloud environment with hybrid tck/beam connectors api beam
TCOMP-2123: Bug on order columns for Avro Impl beam schema-record
TCOMP-2127: Fix avro records where array contains nullable array beam schema-record
TCOMP-2131: starter-toolkit fails when generating a connector from openapi description starter
TCOMP-2133: component-registry uses detailed version not baseVersion in snapshot case build maven-plugin
TCOMP-2134: Activate intellij plugin by default intellij starter
TCOMP-2138: starter-toolkit github repository creation process fails starter
TCOMP-2135: Component web tester in non interactive mode component-server maven-plugin testing
TCOMP-2126: give default implementation to Record.Builder to not break api api
TCOMP-2130: Add git informations in starter-toolkit’s environment starter
TCOMP-2127: Fix avro records where array contains nullable array beam schema-record
TCOMP-2130: Add git informations in starter-toolkit’s environment starter
TCOMP-2126: give default implementation to Record.Builder to not break api api
TCOMP-2085: Add extras manipulations on Record BuilderImpl beam schema-record
TCOMP-2102: Wrong maven resolution with car when using snapshot in prepare-repository goal build maven-plugin
TCOMP-2119: Avro Record : array containing Null. beam schema-record
TCOMP-2112: [JDBC] discover schema API is failing on production. build maven-plugin
TCOMP-2103: Link affected jira components to issue in changelog as keywords for search documentation
TCOMP-2098: Improve m2 discovery process documentation
TCOMP-2104: Header link should be linked to latest path documentation
TCOMP-2105: Upgrade Tomcat to 9.0.60 component-server maven-plugin starter
TCOMP-2108: Upgrade maven plugins
TCOMP-2109: Upgrade git-commit-id-plugin to 4.0.5
TCOMP-2110: Replace log4j by reload4j stitch
TCOMP-2114: Upgrade TSBI to 2.9.27-20220331162145 component-server component-server-vault-proxy starter tsbi
TCOMP-2115: Upgrade jackson to 2.12.6 due to CVE-2020-36518 bom
TCOMP-2116: Upgrade log4j2 to 2.17.2
TCOMP-2117: Upgrade slf4j to 1.7.33
TCOMP-2118: Upgrade tomcat to 9.0.62 (mitigation for CVE-2022-22965) component-server component-server-vault-proxy starter
TDI-47693 : fix misaligned openwebbeans-spi dependency studio
TCOMP-2003: Maven dependency classifier considered as version in dependencies.txt by Studio
TCOMP-2096: Support BigDecimal type in DI integration
TCOMP-2087: Upgrade Tomcat to 9.0.59 due to CVE-2022-23181
TCOMP-2088: Upgrade OpenWebBeans to 2.0.26
TCOMP-2089: Upgrade meecrowave to 1.2.13
TCOMP-2090: Upgrade johnzon to 1.2.16
TCOMP-2091: Upgrade Beam to 2.36.0
TCOMP-2092: MvnCoordinateToFileConverter fakes classifiers' support
TCOMP-2093: Improve component-runtime documentation site
TCOMP-2097: Upgrade cxf to 3.5.1
TCOMP-1803: RecordBuilder.withRecord(final String name, final Record value) doesn’t accept null value
TCOMP-2079: Intellij plugin fails on plugin startup
TCOMP-2080: AvroRecord refuses Union[null, RecordSchema]
TCOMP-2082: ComponentManager’s findDefaultM2 method takes comment as granted
TCOMP-2058: Add dependencies on config
TCOMP-2074: Change JSON log format to conform to ECS
TCOMP-2083: Give component-runtime version on ComponentManager startup
TCOMP-2084: Allow use of i18n in connectors' metadata for custom labels
TCOMP-2079: Intellij plugin fails on plugin startup
TCOMP-2080: AvroRecord refuses Union[null, RecordSchema]
TCOMP-2082: ComponentManager’s findDefaultM2 method takes comment as granted
TCOMP-2063: Avro Record Constructor
TCOMP-2064: NPE with lookup missconfiguration in Join processor
TCOMP-2067: Bug on order columns
TCOMP-2071: Define default methods on Schema / Entry / Record interfaces
TCOMP-2045: Pass and read meta information about columns.
TCOMP-2072: Ligthen parameters for component-server docker image
TCOMP-2057: AvroSchema : optimize getType by using type fields
TCOMP-2060: Upgrade log4j2 to 2.17.0 due to CVE-2021-45105
TCOMP-2061: Upgrade netty to 4.1.72.Final due to CVE-2021-43797
TCOMP-2065: Internationalized Services as Serializable
TCOMP-2068: Upgrade log4j2 to 2.17.1 due to CVE-2021-44832
TCOMP-2069: Create a latest tag for component-runtime images
TCOMP-2070: Upgrade TSBI to 2.9.18-20220104141654
TCOMP-2073: Upgrade maven-core to 3.8.4 due to CVE
TCOMP-2047: RecordBuilder in RowstructVisitor keeps values
TCOMP-2048: RowstructVisitor should respect case in member not java convention
TCOMP-2049: Incompatible class change on Entry
TCOMP-2053: Migration failing when using custom java code in configuration
TCOMP-2018: Optimize Avro Record
TCOMP-2054: Upgrade log4j2 to 2.16.0 due to CVE-2021-44228
TCOMP-2053: Migration failing when using custom java code in configuration
TCOMP-2054: Upgrade log4j2 to 2.16.0 due to CVE-2021-44228
TCOMP-2049: Incompatible class change on Entry
TCOMP-2047: RecordBuilder in RowstructVisitor keeps values
TCOMP-2048: RowstructVisitor should respect case in member not java convention
TCOMP-2019: Sanitized columns name collision support
TCOMP-2021: Missing logic when handling null date values in Record
TCOMP-2046: Rowstruct visitor recreates schema at each incoming row
TCOMP-2004: [Runtime convergence] New tck/API to retrieve dataset full content
TCOMP-2008: Add ability to insert a schema entry on Record BuilderImpl
TCOMP-1924: Support Java 17 runtime
TCOMP-2023: Upgrade gradle to 6.9.1
TCOMP-2024: Upgrade maven-bundle-plugin to 4.2.1
TCOMP-2025: Upgrade documentation to latest
TCOMP-2027: Upgrage junit to 5.8.1
TCOMP-2028: Provide nashorn scripting engine when using java15+
TCOMP-2029: Upgrade jaxb to 2.3.5
TCOMP-2030: Upgrade Tomcat to 9.0.54 due to CVE-2021-42340
TCOMP-2031: Upgrade Beam to 2.33.0
TCOMP-2032: Upgrade Spark to 3.2.0
TCOMP-2035: Check build w/ Java 17 on CI
TCOMP-2036: Upgrade cxf to 3.4.5
TCOMP-2037: Upgrade johnzon to 1.2.15
TCOMP-2038: Upgrade bouncycastle to 1.69
TCOMP-2042: Return a key related to version of connector services and its content
TCOMP-2043: Upgrade spotless to 2.17.3 and talend-java-formatter to 0.2.2
TCOMP-2044: Upgrade TSBI to 2.9.2-20211106085418
TCOMP-2045: Pass and read meta information about columns. studio-integration
TCOMP-2096: Support BigDecimal type in DI integration schema-record studio studio-integration
TCOMP-2070: Upgrade TSBI to 2.9.18-20220104141654 build component-server component-server-vault-proxy tsbi
TCOMP-2105: Upgrade Tomcat to 9.0.60 component-server maven-plugin starter
TCOMP-2030: Upgrade Tomcat to 9.0.54 due to CVE-2021-42340
TCOMP-2053: Migration failing when using custom java code in configuration
TCOMP-2054: Upgrade log4j2 to 2.16.0 due to CVE-2021-44228
TCOMP-2048: RowstructVisitor should respect case in member not java convention
TCOMP-2047: RecordBuilder in RowstructVisitor keeps values
TCOMP-2046: Rowstruct visitor recreates schema at each incoming row
TCOMP-1963: Missing IMetaDataColumn fields in guess schema
TCOMP-1987: Avro record : Array of Array of records issue
TCOMP-1988: Unable to run component-runtime connectors in Studio with JDK 17
TCOMP-2005: Non defined columns appear in schema
TCOMP-2006: Support empty values for Numbers case
TCOMP-2010: Error on Documentation build on "less" usage
TCOMP-2020: talend-component-kit-intellij-plugin module build fails using Bintray (decomissioned)
TCOMP-1900: Create jenkins release process for component-runtime
TCOMP-1997: Enable plugins reloading according criteria
TCOMP-2000: Upgrade netty to 4.1.68.Final
TCOMP-2001: Upgrade Beam to 2.32.0
TCOMP-2007: connectors as a json object in Environment
TCOMP-2009: Upgrade dockerfile-maven-plugin to 1.4.13
TCOMP-2016: UiSchema can’t hold advanced titleMap for more advanded datalist widgets
TCOMP-2007: connectors as a json object in Environment
TCOMP-1957: Avro schema builder issue
TCOMP-1994: WebSocketClient$ClientException when executing action in Studio
TCOMP-1923: Record : add metadata
TCOMP-1990: Update jsoup to 1.14.2 due to CVE-2021-37714
TCOMP-1991: Update groovy to 3.0.9 due to CVE-2021-36373 / CVE-2021-36374
TCOMP-1992: Update lombok to 1.18.20
TCOMP-1993: Update TSBI to 2.9.0-20210907155713
TCOMP-1995: Expose the connectors (global) version in the "Environment" response
TCOMP-1996: BaseService must not define equals & hashcode
TCOMP-1994: WebSocketClient$ClientException when executing action in Studio
TCOMP-1904: Delegate Avro record in AvroRecord seems to be invalid
TCOMP-1967: goal uispec generation failure
TCOMP-1983: fix module inclusion in dependencies.txt when build is java9+
TCOMP-1981: Allow to filter artifacts in car file generation
TCOMP-1982: Allow to include extra artifacts in car file generation
TCOMP-1876: Make schemaImpl immutable
TCOMP-1885: Service Serializable
TCOMP-1906: Redefine equals on RecordImpl
TCOMP-1955: Upgrade cxf to 3.4.4 due to CVE-2021-30468
TCOMP-1966: Upgrade Tomcat to 9.0.50 due to CVE-2021-33037
TCOMP-1968: Upgrade maven to 3.8.1
TCOMP-1969: Upgrade Beam to 2.31.0
TCOMP-1970: Upgrade jackson to 2.12.1
TCOMP-1971: Upgrade Junit to 5.8.0-M1
TCOMP-1972: Upgrade slf4j to 1.7.32
TCOMP-1973: Upgrade log4j to 2.14.1
TCOMP-1974: Upgrade commons-compress to 1.21 due to CVE-2021-36090
TCOMP-1975: Upgrade TSBI to 2.8.2-20210722144648
TCOMP-1976: Upgrade meecrowave to 1.2.11
TCOMP-1977: Upgrade OpenWebBeans to 2.0.23
TCOMP-1978: Upgrade tomcat to 9.0.44
TCOMP-1979: Upgrade xbean to 4.20
TCOMP-1980: Upgrade meecrowave to 1.2.12
TCOMP-1967: goal uispec generation failure
TCOMP-1935: After Variables doesn’t support custom object types
TCOMP-1941: Maven goal talend-component:web fails on startup
TCOMP-1947: Implement a retry strategy on failure in vault-client
TCOMP-1948: Raised exception in component-server(s) should be serialized in json
TCOMP-1952: IllegalArgumentException when the http response return duplicated header.
TCOMP-1939: Upgrade TSBI to Talend 2.7.2-20210616074048
TCOMP-1940: Upgrade Beam to 2.30.0
TCOMP-1941: Maven goal talend-component:web fails on startup
TCOMP-1939: Upgrade TSBI to Talend 2.7.2-20210616074048
TCOMP-1919: Sanitize must force encoding file
TCOMP-1925: Incorrect mapping of the parameters after arrays
TCOMP-1937: Classpath not fully parsed in TSBI images
TCOMP-1917: Add DatasetDiscovery annotation
TCOMP-1707: Upgrade Geronimo :: Simple JCache to 1.0.5
TCOMP-1850: component-server with vault feature
TCOMP-1907: Service monitor implementation & cleaning of grafana dashboard
TCOMP-1921: Upgrade TSBI to 2.7.0-20210527090437
TCOMP-1930: Remove jsoup 1.7.x transitive dependency due to CVE-2015-6748
TCOMP-1936: Extend properties in Schema to use JsonValue
TCOMP-1938: Add the german locale in the locale mapping
TCOMP-1938: Add the german locale in the locale mapping
TCOMP-1937: Classpath not fully parsed in TSBI images
TCOMP-1919: Sanitize must force encoding file
TCOMP-1886: Errors on Schema.sanitizeConnectionName
TCOMP-1905: component-runtime fails to build with Java 11
TCOMP-1893: Upgrade to Beam 2.29.0 and use Beam’s Spark 3 specific module
TCOMP-705: Support After variables
TCOMP-1898: Add method to Record.Builder
TCOMP-1910: Upgrade commons-io to 2.8.0 due to CVE-2021-29425
TCOMP-1911: Upgrade cxf to 3.4.3 due to CVE-2021-22696
TCOMP-1912: Upgrade TSBI to 2.6.7-20210503202416
TCOMP-1938: Add the german locale in the locale mapping
TCOMP-1937: Classpath not fully parsed in TSBI images
TCOMP-1880: Engine Server returns binary data instead of json (aka does not respect the compressed header)
TCOMP-1886: Errors on Schema.sanitizeConnectionName
TCOMP-1815: Support of ComponentException in migration
TCOMP-1873: Add method getEntry on TCK Record Schema class
TCOMP-1892: Upgrade Spark to 3.0.1
TCOMP-1888: Remove/change validation of ComponentException
TCOMP-1894: Uniformize docker images entrypoints
TCOMP-1895: Enhance coercion in RecordConverters
TCOMP-1896: Upgrade TSBI to 2.6.4-20210331133410
TCOMP-1806: Double values are rounded to 5 decimal places in studio
TCOMP-1851: HttpClient implementation class is a Service with State
TCOMP-1864: JsonSchemaConverter and johnzon-jsonschema 1.2.9+ look incompatible
TCOMP-1866: Invalid number coercion on primitive type
TCOMP-1869: byte[] handling is incorrect in dynamic column
TCOMP-1871: Dynamic metadata name is not sanitized
TCOMP-1861: Add a 'props' property in the Schema
TCOMP-1863: Upgrade batik-codec to 1.14 due to CVE-2020-11988
TCOMP-1865: Upgrade cxf to 3.4.2
TCOMP-1867: Upgrade Apache Beam to 2.28.0
TCOMP-1878: Upgrade TSBI to 2.6.3-20210304090015
TCOMP-1688: Rewrite JsonSchema required rules to reflect component’s validation rules
TCOMP-1857: Pojo conversion don’t support nested Objects
TCOMP-1841: Add a SPI that would allow to add metadata to components
TCOMP-1847: Upgrade Apache Beam to 2.27.0
TCOMP-1848: Upgrade bouncycastle to 1.68 due to CVE 2020-28052
TCOMP-1849: Proxify metrics component-server’s endpoint
TCOMP-1852: Upgrade netty to v4.1.58.Final and ensure default http testing module is java 11 friendly over ssl
TCOMP-1854: Upgrade netty to 4.1.59.Final due to CVE-2021-21290
TCOMP-1855: Upgrade johnzon to 1.2.10
TCOMP-1856: Upgrade tomcat to 9.0.43
TCOMP-1841: Add a SPI that would allow to add metadata to components
TCOMP-1852: Upgrade netty to v4.1.58.Final and ensure default http testing module is java 11 friendly over ssl
TCOMP-1854: Upgrade netty to 4.1.59.Final due to CVE-2021-21290
TCOMP-1848: Upgrade bouncycastle to 1.68 due to CVE 2020-28052
TCOMP-1839: Tomcat websocket server fails to start after tomcat 9.0.40 and meecrowave 1.2.10
TCOMP-1836: Upgrade OpenWebBeans to 2.0.20
TCOMP-1837: Upgrade xbean to 4.18
TCOMP-1838: Upgrade cxf to 3.4.1
TCOMP-1840: Upgrade tomcat to 9.0.41
TCOMP-1842: Upgrade jgit to 5.10.0.202012080955-r
TCOMP-1844: Upgrade johnzon to 1.2.9
TCOMP-1845: Upgrade guava to 30.1-jre due to CVE-2020-8908
TCOMP-1848: Upgrade bouncycastle to 1.68 due to CVE 2020-28052
TCOMP-1839: Tomcat websocket server fails to start after tomcat 9.0.40 and meecrowave 1.2.10
TCOMP-1836: Upgrade OpenWebBeans to 2.0.20
TCOMP-1837: Upgrade xbean to 4.18
TCOMP-1827: Upgrade lombok to 1.18.16
TCOMP-1828: Change project’s versioning scheme
TCOMP-1829: Upgrade TSBI to 2.5.3-20201201131449
TCOMP-1830: Upgrade Apache Beam to 2.26.0
TCOMP-1832: Upgrade httpclient to 4.5.13 due to CVE-2020-13956
TCOMP-1833: Upgrade spark to 2.4.7
TCOMP-1834: Upgrade groovy to 3.0.7 due to CVE-2020-17521
TCOMP-1787: ComponentManager can’t be re-created after it’s been closed
TCOMP-1788: Invalid properties validation
TCOMP-1801: Can’t look for resources in the classpath on Windows
TCOMP-1761: Support of complete schema definition
TCOMP-1725: Upgrade Tomcat to 9.0.40
TCOMP-1792: Uniform error message on component validation
TCOMP-1808: Upgrade log4j2 to 2.14.0
TCOMP-1809: Update CXF to 3.3.8 due to CVE-2020-13954
TCOMP-1812: Upgrade junit to 4.13.1 due to CVE-2020-15250
TCOMP-1813: Upgrade jupiter to 5.7.0
TCOMP-1816: Apache Maven Shared Utils: OS Command Injection in Talend/component-runtime (master) and Talend/cloud-components
TCOMP-1817: Upgrade gmavenplus-plugin to 1.11.0
TCOMP-1722: REST - Last / in endpoint is removed
TCOMP-1757: Studio - context not set when call a @suggestable service
TCOMP-1772: Code widget doesn’t allow multiline text
TCOMP-1726: Update logos and colors
TCOMP-1771: Record builder optimization (with static schema)
TCOMP-1773: Upgrade log4j2 to 2.13.3
TCOMP-1774: Upgrade johnzon to 1.2.8
TCOMP-1775: Upgrade commons-lang3 to 3.11
TCOMP-1776: Upgrade commons-codec to 1.15
TCOMP-1777: Upgrade jgit to 5.9.0.202009080501-r
TCOMP-1778: Upgrade jib-core to 0.15.0
TCOMP-1779: Upgrade batik to 1.13
TCOMP-1780: Upgrade TSBI to 2.4.0-20200925092052
TCOMP-1781: Upgrade asciidoctorj to 2.4.1
TCOMP-1782: Upgrade rrd4j to 3.7
TCOMP-1783: Upgrade netty to 5.0.0.Alpha2
TCOMP-1784: Upgrade ziplock to 8.0.4
TCOMP-1785: Upgrade JRuby to 9.2.13.0
TCOMP-1786: Upgrade to Apache Beam 2.24.0
TCOMP-1804: Upgrade to Apache Beam 2.25.0
TCOMP-1805: Upgrade TSBI to 2.5.0-20201030171201
TCOMP-1770: Performance loss on Ouput components in Studio
TCOMP-1750: Deadlock at TPD job startup using the Component SDK and using the Workday component
TCOMP-1759: Guess schema mixes columns returned by tck service
TCOMP-1752: Make component-runtime class loader find classes in RemoteEngine JobServer
TCOMP-1764: Upgrade to Apache Beam 2.23.0
TCOMP-1719: Header responses for icon not propagated correctly from component-server-vault-proxy
TCOMP-1733: NPE in Studio metadata connection with activeif on different layouts
TCOMP-1734: Studio froze when installing a patch with azure-dls-gen2-1.10.0-component.car
TCOMP-1736: JobImpl retrieves more than streaming.maxRecords parameter
TCOMP-1739: Use scala version defined on parent for Spark related components
TCOMP-1695: Support List type in Studio
TCOMP-1737: Allow to force installation of an already existing component with the car bundle
TCOMP-1728: Enforce use of the defined error contract in connectors
TCOMP-1731: Make connectors docker image TSBI compliant
TCOMP-1738: Upgrade to Apache Beam 2.22.0
TCOMP-1742: Upgrade johnzon to 1.2.7
TCOMP-1727: WebSocketContainer not present in ServletContext
TCOMP-1696: Definition of an error contract to handle expected errors
TCOMP-1729: Upgrade to Apache Beam 2.21.0
TCOMP-1730: Upgrade johnzon to 1.2.6
TCOMP-1719: Header responses for icon not propagated correctly from component-server-vault-proxy
TCOMP-1649: Tomcat bump to 9.0.31 broke talend-component:web goal
TCOMP-1676: Starter-toolkit mvn package throws error when running for the first time
TCOMP-1677: Using other types than String in Studio’s context values causes compilation error
TCOMP-1679: Combination of @Required and @Suggestable on a field creates strange behaviour
TCOMP-1682: Remove key attribute in UISchema for containers
TCOMP-1686: antora helper function relativize corrupts documentation
TCOMP-1694: [MAVEN PLUGIN] validateSvg argument is ineffective
TCOMP-1698: UiSpecService injects a wrong property for suggestions and dynamic_values
TCOMP-1718: Duplicated code in RecordConverters
TCOMP-1702: Improve columns name
TCOMP-1655: Upgrade jib-core to 0.13.1
TCOMP-1656: Upgrade log4j2 to 2.13.1
TCOMP-1657: Upgrade maven to 3.6.3
TCOMP-1658: Upgrade groovy to 3.0.2
TCOMP-1659: Upgrade lombok to 1.18.12
TCOMP-1660: Upgrade commons-compress to 1.20
TCOMP-1661: Upgrade commons-codec to 1.14
TCOMP-1662: Upgrade guava to 28.2-jre
TCOMP-1663: Upgrade ziplock to 8.0.1
TCOMP-1664: Upgrade asciidoctorj to 2.2.0 and its dependencies
TCOMP-1665: Upgrade jackson to 2.10.3
TCOMP-1666: Upgrade batik-codec to 1.12
TCOMP-1667: Upgrade jgit to 5.6.1.202002131546-r
TCOMP-1668: Upgrade junit to 4.13
TCOMP-1669: Upgrade bouncycastle to 1.64
TCOMP-1670: Upgrade spark-core_2.11 to 2.4.5
TCOMP-1671: Upgrade maven-shade-plugin to 3.2.2
TCOMP-1672: Upgrade httpclient to 4.5.12
TCOMP-1673: Upgrade component-runtime-testing dependencies
TCOMP-1674: Upgrade tomitribe-crest to 0.14
TCOMP-1678: Upgrade jgit to 5.7.0.202003090808-r
TCOMP-1685: Provide docker images based on TSBI
TCOMP-1687: More explicit exception messsage on reflection for findField
TCOMP-1690: Upgrade netty to 4.1.48.Final
TCOMP-1692: Update CXF to 3.3.6 due to CVE-2020-1954
TCOMP-1697: Update BouncyCastle to 1.65
TCOMP-1703: Upgrade log4j-2 to 2.13.2
TCOMP-1705: Upgrade to Apache Beam 2.20.0
TCOMP-1706: Upgrade OpenWebBeans to 2.0.16
TCOMP-1708: Upgrade groovy to 3.0.3
TCOMP-1710: Upgrade johnzon to 1.2.5
TCOMP-1711: Upgrade guava to 29.0-jre
TCOMP-1712: Upgrade commons-lang3 to 3.10
TCOMP-1713: Upgrade jackson to 2.11.0
TCOMP-1714: Upgrade junit to 5.7.0-M1
TCOMP-1716: Upgrade maven shade plugin to 3.2.3 and misc libs
TCOMP-1639: component-server incorrect response set in request
TCOMP-1640: Ensure Intellij plugin works with Intellij Idea IU-201
TCOMP-1641: Upgrade OpenWebBeans to 2.0.15
TCOMP-1642: Upgrade Groovy to 3.0.1
TCOMP-1643: Add automatic scheduling eviction system on LocalCache
TCOMP-1644: Upgrade log4j to 2.13.0
TCOMP-1645: Ensure correct wording is used in @Documentation
TCOMP-1647: Upgrade netty to 4.1.45.Final
TCOMP-1648: Unsafe Dependancy Resolution on jcommander
TCOMP-1638: Inject services to delegate in proxy
TCOMP-1619: Handle correctly DATETIME field type on AvroRecord
TCOMP-1622: [DOC] @Icon is not supported on datastore/dataset
TCOMP-1623: Change scheme for maven repos
TCOMP-1628: Manage BigDecimal in RecordConverter
TCOMP-1629: Ensure LocalConfiguration environment source replace dot with _
TCOMP-1630: Avoid NPE when configurationByExample() is called in a list of primitive without values
TCOMP-1631: int attribute in pojo is transformed to double in a Record
TCOMP-1632: Add a way to evict cached data from LocalCache
TCOMP-1616: Upgrade OpenWebBeans to 2.0.14 in component-server and component-server-vault-proxy
TCOMP-1617: Move mocked api results to github pages
TCOMP-1618: Upgrade Junit to 5.6.0
TCOMP-1620: Upgrade to Apache Beam 2.18.0
TCOMP-1621: Upgrade to Johnzon 1.2.3
TCOMP-1624: @Service does not support list injections
TCOMP-1625: Upgrade to xbean 4.16
TCOMP-1626: Ensure ContainerListenerExtensions can be sorted
TCOMP-1627: Upgrade to Apache Beam 2.19.0
TCOMP-1633: Upgrade Groovy to 3.0.0
TCOMP-1634: Upgrade tomcat to 9.0.31
TCOMP-1596: Windows URI are broken
TCOMP-1597: Httpclient does not support multi query parameters
TCOMP-1598: validator task uses ENGLISH locale to validate instead of root one
TCOMP-1612: Starter toolkit shouldn’t use the default 'STAR' icon in demo component
TCOMP-1585: Upgrade netty to 4.1.43.Final
TCOMP-1586: Upgrade ziplock to v8.0.0
TCOMP-1587: Upgrade jib to v0.12.0
TCOMP-1588: Upgrade JRuby to v9.2.9.0
TCOMP-1589: Upgrade crest to v0.11.0
TCOMP-1591: Update to Tomcat 9.0.29
TCOMP-1592: Update to Johnzon 1.2.2
TCOMP-1593: Update to OpenWebBeans 2.0.13
TCOMP-1595: Infinite partitionmapper shouldn’t require assesor
TCOMP-1599: More unsafe usage tolerance on JVM versions
TCOMP-1600: Upgrade to Tomcat 9.0.30
TCOMP-1606: Ensure job dsl can stop infinite inputs
TCOMP-1608: Upgrade geronimo openapi to 1.0.12
TCOMP-1609: Ensure Intellij plugin works with Intellij Idea 2019
TCOMP-1611: Upgrade to Apache Beam 2.17.0
TCOMP-1613: Upgrade cxf to 3.3.5
TCOMP-1614: Upgrade groovy to 3.0.0-rc3
TCOMP-1615: Upgrade OpenWebBeans to 2.0.14
TCOMP-1752: Make component-runtime class loader find classes in RemoteEngine JobServer
TCOMP-1560: Min and Max error message during configuration validation are reversed
TCOMP-1563: Web Tester does not work anymore (maven/gradle goal/task)
TCOMP-1573: Body encoder is called twice for each query
TCOMP-1582: Deploy to Nexus 3.15 caused "Provided url doesn’t respond neither to Nexus 2 nor to Nexus 3 endpoints"
TCOMP-1576: Add the possibility to desactivate http client redirection in HTTP Configurer
TCOMP-1559: Support configuration of the maxBatchSize enablement
TCOMP-1561: Custom action type shouldn’t need to be enforced to define a family method
TCOMP-1562: Support JsonObject type in actions
TCOMP-1564: Move to java.nio.Path instead of java.io.File in component-runtime-manager stack where possible
TCOMP-1565: Upgade to Junit Jupiter 5.6.0-M1
TCOMP-1566: Don’t compute jvmMarkers per component module but once for all
TCOMP-1567: Cache Artifact path in case of reuse
TCOMP-1568: Lazily create the container services
TCOMP-1569: Upgrade starter to gradle 6.0-rc1
TCOMP-1570: Ensure starter adds _placeholder entries in Messages.properties
TCOMP-1571: Support [length] syntax to change array configuration
TCOMP-1572: Validate that @Option is not used on final fields
TCOMP-1574: Upgrade to CXF 3.3.4
TCOMP-1575: Upgrade to Spark 2.4.4
TCOMP-1577: Upgrade to xbean 4.15
TCOMP-1578: Upgrade asciidoctor-pdf to v1.5.0-beta.7
TCOMP-1581: Support JUnit5 meta annotations for our extensions
TCOMP-1702: Improve columns name
TCOMP-1685: Provide docker images based on TSBI
TCOMP-1558: org.talend.sdk.component.api.service.record.RecordService must be serializable
TCOMP-1548: Basic Remote Engine Customizer
TCOMP-1550: Component configuration instantiation can be slow for complex configurations
TCOMP-1551: ObjectFactory should default to fieldproperties when field injection is activated
TCOMP-1553: Simplify and widden excluded classes for with transformer support
TCOMP-1555: Upgrade to Tomcat 9.0.27
TCOMP-1556: Studio short, byte, BigDecimal and char types are wrong handled
TCOMP-1557: Upgrade to Beam 2.16.0
TCOMP-1509: Intellij plugin does not declare java module preventing the plugin to run under last versions
TCOMP-1526: Upgrade talend UI bundle (js) to 4.6.0
TCOMP-1533: JSON-B API does not enable to combine multiple adapters or (de)serializers in JsonbConfig
TCOMP-1536: @DefaultValue ignored in documentation generation
TCOMP-1541: Studio integration enforces JSON<→Record conversion instead of relying on rowStruct making number precision lost
TCOMP-1542: Validator plugin uses family instead of pluginId (artifactId) to validate local-configuration
TCOMP-1508: Don’t let Talend Starter Toolkit loose state on Enter in intellij
TCOMP-1543: Add a uispec mapper
TCOMP-1544: Update Geronimo JSON-P spec bundle to v1.3
TCOMP-1545: Update OpenWebBeans to version 2.0.12
TCOMP-1546: Update Meecrowave to 1.2.9
TCOMP-1547: Update Johnzon to 1.2.1
TCOMP-1279: Rewrite the pojo <→ record mapping to keep number types
TCOMP-1504: Apache Beam 2.14.0 upgrade
TCOMP-1505: Upgrade jackson-databind to 2.9.9.3
TCOMP-1506: Enable actions in bulk endpoint
TCOMP-1507: Upgrade to johnzon 1.1.13
TCOMP-1511: Upgrade cxf to v3.3.3
TCOMP-1513: Upgrade to Tomcat 9.0.24
TCOMP-1514: Provide a RecordService to simplify record enrichment coding in processors
TCOMP-1515: Record visitor API
TCOMP-1517: Use netty 4.1.39.Final in junit http tools
TCOMP-1518: Upgrade to slf4j 1.7.28
TCOMP-1519: Upgrade to jib-core 0.10.1
TCOMP-1520: Don’t use JsonNode with Avro Fields anymore
TCOMP-1521: Upgrade to Beam 2.15.0
TCOMP-1522: Basic singer/tap/stitch integration with kit components
TCOMP-1523: Upgrade Apache Geronimo OpenAPI to v1.0.11
TCOMP-1524: Upgrade starter to gradle 5.6
TCOMP-1525: Upgrade commons-compress to v1.19
TCOMP-1527: Remove beam Mapper/Processor wrapping support
TCOMP-1528: Upgrade to maven 3.6.2
TCOMP-1529: Asciidoctor 2.1.0 upgrade
TCOMP-1530: geronimo-annotation 1.2 upgrade
TCOMP-1532: Upgrade to Junit 5.5.2
TCOMP-1535: Upgrade to johnzon 1.2.0
TCOMP-1537: Upgrade to Tomcat 9.0.26
TCOMP-1538: Upgrade to jackson 2.9.10
TCOMP-1539: Rework default direct runner/spark classloader rules
TCOMP-1540: Ensure Asciidoctor documentation rendering releases properly JRuby threads (main usage only)
TCOMP-1478: /documentation/component/{id} internationalization does not work when embedded
TCOMP-1479: When generating the documentation, it can happen the lang is wrong due to ResourceBundle usage
TCOMP-1480: Servers docker images don’t have curl or wget available
TCOMP-1497: POJO to Record mapping is not supported in processors
TCOMP-1498: SVG2Mojo wrongly log the source file as being created
TCOMP-1499: component-form does not support array of object of object if 2 levels use the same field name
TCOMP-1500: Ensure component-form button have a key to have an id and propagate errors in the front
TCOMP-1503: EnvironmentSecuredFilter not working on /environment/
TCOMP-1482: Enable web tester to switch the language
TCOMP-1483: Enable to expose the documentation through the web tester
TCOMP-1485: Asciidoctor documentation does not enable titles (component name and configuration ones) to be translated
TCOMP-1486: Ensure locale mapping is configurable in component-server
TCOMP-1484: Junit 5.5.0 upgrade
TCOMP-1487: AsciidocMojo should only use ROOT locale by default
TCOMP-1488: Enable to translate gridlayout names
TCOMP-1489: Upgrade Tomcat to v9.0.22
TCOMP-1491: Upgrade JIB to v1.4.0
TCOMP-1492: Upgrade jackson-databind to 2.9.9.1
TCOMP-1493: Rewrite component exception to ensure they can be loaded after a serialization
TCOMP-1494: Upgrade to junit jupiter 5.5.1
TCOMP-1495: Upgrade to Geronimo OpenAPI 1.0.10
TCOMP-1496: [testing tool] MainInputFactory does not support Record
TCOMP-1501: Remove generate mojo
TCOMP-1502: [maven plugin] upgrade jib-core to 0.10.0
TCOMP-1469: Studio maven repository not found OOTB
TCOMP-1472: Connectors maven goal does not work in 1.1.10
TCOMP-1473: Docker image text log setup should use ISO8601 and not HH:mm:ss.SSS
TCOMP-1470: Upgrade Tomcat to v9.0.21
TCOMP-1471: Upgrade Geronimo OpenAPI to v1.0.9
TCOMP-1474: Ensure proxies definition are java >=11 friendly
TCOMP-1425: Spark classes not excluded anymore in component-runtime-beam leading to classloading issues
TCOMP-1427: dependencies.txt mojo uses timestamped versions for snapshots instead of just -SNAPSHOT
TCOMP-1431: [maven] Asciidoctor files should be attached with adoc extension and not jar one
TCOMP-1433: [form-model] itemwidget ignored from uischema builder
TCOMP-1438: Index cache can lead to invalid index list of component
TCOMP-1440: Bulk components without @ElementListener when used with component-extension (default in the server)
TCOMP-1441: Missing parameter init in the UiSchema Trigger builder
TCOMP-1446: Rework gradle lifecycle
TCOMP-1419: Upgrade build to groovy 2.5.7
TCOMP-1420: Upgrade maven compiler to 3.1.2
TCOMP-1422: Filter allowed beam classes in component-server image
TCOMP-1423: Enable to customize studio maven repository for deploy-studio maven and gradle goal/task
TCOMP-1426: Ensure Spark rule and @WithSpark uses a default version consistent with the runtime
TCOMP-1430: Deprecate built-in icons in favor of vendor specific icons
TCOMP-1432: basic dita generation for the component documentation
TCOMP-1434: [form-model] Add withCondition to UISchema builder
TCOMP-1435: Dont use beam_sdks_java_core shaded libraries
TCOMP-1437: Add infinite metadata to ComponentDetail
TCOMP-1444: Remove KnownJarsFilter since it is no more used to discover components
TCOMP-1445: Icon must support SVG
TCOMP-1448: [starter] provide a basic OpenAPI integration
TCOMP-1449: Upgrade XBean to v4.14
TCOMP-1450: Add a read-only bulk endpoint in component-server
TCOMP-1451: [upgrade] Johnzon 1.1.12
TCOMP-1452: [upgrade] Meecrowave 1.2.8
TCOMP-1453: Upgrade to CXF 3.3.2
TCOMP-1455: Prepare DateTime support in configurations
TCOMP-1457: Upgrade to Apache Beam 2.13.0
TCOMP-1458: Ensure _placeholder presence is encouraged and validated
TCOMP-1459: Experimental way to patch a component dependency
TCOMP-1461: Extension API for the validator plugin
TCOMP-1462: Validate through the corresponding build task provided SVG
TCOMP-1464: Upgrade to OpenWebBeans 2.0.11
TCOMP-1465: Upgrade to JUnit 5.5.0-RC1
TCOMP-1466: Upgrade to ziplock 8.0.0-M2
TCOMP-1467: Upgrade mock server (testing tool) to netty 5.0.0.Alpha2
TCOMP-1468: Support docker-compose >= 1.23 in vault-proxy
TCOMP-1374: ensure Utf8 avro strings don’t leak in AvroRecord API, even using get(Object.class, …)
TCOMP-1375: When two sources use the same dataset and one source has additional required parameter the validation fails
TCOMP-1384: Enhance studio guess schema algorithm to find implicitly the action to call if needed
TCOMP-1388: Can’t change the dataset name in starter
TCOMP-1389: Intellij starter fails to generate a project
TCOMP-1398: Using after option of @updateable can lead to a null pointer exception in component-form
TCOMP-1401: Documentation table is broken
TCOMP-1407: Databricks: interface javax.json.stream.JsonGeneratorFactory is not visible from class loader
TCOMP-1386: Add withRecord(String,Record) in Record.Builder
TCOMP-1387: Use icon bundle version 3.1.0
TCOMP-1412: Add rest and couchbase icon to component api
TCOMP-1376: Upgrade jupiter to 5.4.2
TCOMP-1385: talend.component.server.component.registry must be a list
TCOMP-1390: Move component-api to component-runtime repository
TCOMP-1392: Tomcat 9.0.19 upgrade
TCOMP-1402: Provide a placeholder for classpath extensions in docker images
TCOMP-1403: Upgrade asciidoctor to 2.0.0 and asciidoctor-pdf to alpha17
TCOMP-1404: Upgrade to Apache Beam 2.12.0
TCOMP-1408: Starter does not support types starting with a lowercase
TCOMP-1411: ComponentManager relies on beam jar name. This is unlikely and should move to beam integration module.
TCOMP-1417: Upgrade to Geronimo OpenAPI 1.0.8
TCOMP-1326: Avro Schema is not serializable as JSON so guess schema action does not work when compoennt-runtime-beam is present
TCOMP-1330: Shade extensions don’t inherit from pluginrepositories
TCOMP-1340: Tools webapp (talend-component:web) does not support changing the locale anymore
TCOMP-1343: Use LogicalTypes.timestampMillis() on DATETIME for avro record builder
TCOMP-1360: Renaming an option (@Option("custom")) does not work on fields of type object
TCOMP-1370: ImageM2Mojo does not set timestamp in the docker image leading to component-server having a wrong lastUpdated value
TCOMP-1372: Nested components don’t expose their doc deterministicly until it is overriden
TCOMP-1341: Register deploy in studio task OOTB in gradle extension
TCOMP-1325: Upgrade CXF to 3.3.1
TCOMP-1327: /environment iterates over deployed plugin for each call, this is not needed
TCOMP-1328: Upgrade to Beam 2.11.0
TCOMP-1329: Lazy initialize parameter model to have a quicker cold start in plain main(String[])
TCOMP-1331: Use java 8u191 as base docker image
TCOMP-1332: Provide a simple way to filter configurations and component on /index endpoints
TCOMP-1334: Add a mojo to generate the list of components/services classes
TCOMP-1335: Add in doc mojo table the type of configuration the parameter belongs to
TCOMP-1336: Allow output processors to only have an @AfterGroup taking the list of record of the group in parameter
TCOMP-1346: Upgrade to Tomcat 9.0.17
TCOMP-1347: Upgrade to Slf4j 1.7.26
TCOMP-1348: [form-core] Ensure suggestions trigger is bound to "change" event too
TCOMP-1349: [form-core] When a tab is empty, don’t show it
TCOMP-1350: talend.component.server.component.registry should support glob pattern
TCOMP-1351: Upgrade jsoup for Spark Cluster Testing module
TCOMP-1353: component-server must not use TALEND-INF/dependencies.txt but another path
TCOMP-1354: Enforce services to belong to the delcaring service class
TCOMP-1361: Upgrade to asciidoctorj 2.0.0-RC.1
TCOMP-1362: Beam Wrapped Components should throw shared exception types
TCOMP-1366: Upgrade to XBean 4.13 to not track all classes scanned
TCOMP-1371: Upgrade to Apache Geronimo OpenAPI 1.0.7
TCOMP-1307: support char and character types in configuration.
TCOMP-1312: Component-form-core shouldn’t trigger validation of object due to conditional visibility (only individual fields are validable)
TCOMP-1314: category field of the starter is broken
TCOMP-1316: [build] Ensure snapshot use timestamped versions in dependencies.txt
TCOMP-1306: Add RecordPointerFactory to enable to extract data from Record using json pointer spec
TCOMP-1315: Ensure @Internationalized can use shortnames too in Messages.properties
TCOMP-1303: Support docker configs/secrets in docker images
TCOMP-1304: Vault proxy should support token configuration
TCOMP-1305: Upgrade to beam 2.10.0
TCOMP-1308: Upgrade to Talend UI 2.6.0
TCOMP-1309: Upgrade to Component API 1.1.5
TCOMP-1310: Ensure there is a basic secured mecanism to store configuration data
TCOMP-1317: Use Apache Geronimo Microprofile Config extensions (docker and secured string)
TCOMP-1318: Upgrade to Apache Meecrowave 1.2.7
TCOMP-1319: Upgrade Apache Geronimo Metrics to 1.0.3
TCOMP-1320: Upgrade to Apache Geronimo OpenAPI 1.0.6
TCOMP-1321: Upgrade to Apache Geronimo OpenTracing 1.0.2
TCOMP-1322: Upgrade to Apache Geronimo Config 1.2.2
TCOMP-1263: When using @Updateable(after=xxx) the visibility condition (@ActiveIf) of the after field shouldn’t be inherited
TCOMP-1264: AvroSchema does not unwrap null(able types) to map to Schema model
TCOMP-1265: dataset / datastore cloud validation : allow nested configuration types
TCOMP-1267: /documentation does not filter properly component
TCOMP-1281: Add jackson-mapper-asl in docker image of the server
TCOMP-1298: Support restricted lists for @Proposable
TCOMP-1297: make max batch size property configurable for family and components through LocalConfiguration
TCOMP-1266: Enhance starter to support dataset and datastore
TCOMP-1268: Ensure /environment is not callable if not local or secured
TCOMP-1269: Ensure ErrorReportValve does not leak Tomcat version OOTB
TCOMP-1271: Upgrade to talend UI 2.3.0
TCOMP-1272: Move multiSelectTag to multiSelect for web environment
TCOMP-1273: [build/dev plugin] Automatically open the browser for talend-component:web task/goal
TCOMP-1276: Exclude xerces from component loadable resources for XMLReaderFactory
TCOMP-1282: Upgrade meecrowave to 1.2.6
TCOMP-1283: Upgrade cxf to 3.3.0
TCOMP-1284: Upgrade to johnzon 1.1.11
TCOMP-1292: Provide a vault friendly integration for the server
TCOMP-1293: Upgrade to Tomcat 9.0.16
TCOMP-1295: Ensure local-configuration.properties of a container are merged
TCOMP-1296: Ensure user can enrich families with custom jar+configuration
TCOMP-1245: Provided services (SPI) by tacokit not available
TCOMP-1246: Rework docker image setup to use jib
TCOMP-1247: Upgrade geronimo metrics to 1.0.2
TCOMP-1248: Upgrade to geronimo opentracing 1.0.3
TCOMP-1249: Provide segment extractor for doc endpoint
TCOMP-1250: Make component documentation (@Documentation on component) i18n friendly
TCOMP-1251: cache avrocoders used in SchemaRegistryCoder
TCOMP-1252: Remove html support in documentation endpoint
TCOMP-1253: Refine OpenAPI documentation
TCOMP-1256: Add mapDescriptorToClassLoader to create a classloader from a list of gav
TCOMP-1258: Support to build a Record from a provided Schema
TCOMP-1259: Add getOptional to Record
TCOMP-1223: byte[] not supported in AvroRecord (beam)
TCOMP-1222: Ensure @WithComponents and @Environment are compatible
TCOMP-1234: Upgrade to beam 2.9.0
TCOMP-1235: Upgrade to antora 2
TCOMP-1237: Upgrade component-api to 1.1.2
TCOMP-1238: Upgrade metrics and opentracing microprofile libraries in docker image to use Geronimo extensions
TCOMP-1239: OpenWebBeans 2.0.9 upgrade
TCOMP-1240: Johnzon 1.1.11 upgrade
TCOMP-1242: Runtime validation error message wrongly interpolated
TCOMP-1243: Ensure component classloader isolates the system classloader resources except for the JVM ones
TCOMP-1170: [regression] http testing module pom imports netty and jsonb stack
TCOMP-1181: tacokit can’t pass the long type field from ui rightly
TCOMP-1187: Job DSL does not support correctly parameters when they are URI/URL
TCOMP-1189: Ensure primitive are not nullable in Record model (builder)
TCOMP-1191: [beam] BeamIOTransformer does not support serialization of complex objects correctly
TCOMP-1192: Ensure Avro schema union is interpreted as nullable in Record Schema model
TCOMP-1194: [testing] Ensure BeamEnvironment adds component-runtime-beam
TCOMP-1196: Nested maven repository not used for component module
TCOMP-1197: Tacokit beam tests. NPE when creating the schema with RECORD type.
TCOMP-1198: Tacokit beam tests. SchemaParseException ⇒ drop unsupported characters
TCOMP-1200: Packages not defined from nested repository classes
TCOMP-1201: includeTransitiveDependencies option of nested-maven-repository does not work
TCOMP-1202: Refine avro classloading exclusion to accept hadoop and mapred packages
TCOMP-1205: Empty JSon object lead to NPE
TCOMP-1209: Ensure SerializableCoder is replaced with a contextual version to support Talend Component Kit classloading model
TCOMP-1210: BeamComponentExtension should let the exception go back to the caller when the transform fails
TCOMP-1215: Nested maven repository in jars don’t go through transformers
TCOMP-1218: Record entries order shouldn’t be sorted by the runtime
TCOMP-1185: Support maxBatchSize in Job test runner for standalone mode
TCOMP-1171: Remove component proxy server from the project
TCOMP-1182: Ensure the property editor for the configuration registers the default converters
TCOMP-1183: Upgrade JRuby to 9.2.4.0
TCOMP-1184: Avoid to do a group by key in BeamExecutor (job DSL) when not needed
TCOMP-1188: Tolerate null for dates in Records
TCOMP-1190: Enable secure processing for DocumentBuilderFactory instances
TCOMP-1193: Add injectable ContainerInfo with the containerId (plugin) in services
TCOMP-1195: Enable user to extend BeamEnvironment test tempalte more easily
TCOMP-1199: Nested repository not used when the classpath is not composed of a single jar
TCOMP-1204: [dependency upgrade] XBean 4.12
TCOMP-1207: [beam] add ContextualSerializableCoder
TCOMP-1213: Upgrade guava to v27 for testing modules
TCOMP-1216: Take into account the visibility for the parameter validation
TCOMP-1217: Add JVM system property talend.component.runtime.serialization.java.inputstream.whitelist for our custom object input stream
TCOMP-1219: Upgrade starter to gradle 5
TCOMP-1220: Upgrade Maven to 3.6.0 in starter
TCOMP-1121: [tacokit proxy] suggestion trigger creation issue
TCOMP-1122: [tacokit proxy] slefRefrence filter configuration type by name, type and family
TCOMP-1123: Processor component onNext duplicate columns in record for rowStructs
TCOMP-1126: UiSpecService shouldn’t show the documentation by default
TCOMP-1129: form core - $selfReference breaks triggers
TCOMP-1130: component form - default value of maxBatchSize prop loose it type.
TCOMP-1131: [beam integration] Ensure Coder is contextual (classloader)
TCOMP-1132: Ensure beam custom Coders implement equals.hashCode for beam contract
TCOMP-1148: Asciidoctor documentation fails for collection of objects
TCOMP-1149: [testing] BeamEnvironment does not reset PipelineOptionsFactory properly for beam > 2.4
TCOMP-1155: [proxy server] arrays not supporting null values in ConfigurationFormatter
TCOMP-1159: AvroSchema does not support DATETTIME type (beam module)
TCOMP-1168: Avro record implementation ignores nullable/union
TCOMP-1143: Ensure icons are validated and fail the build if a custom one is missing (validate mojo)
TCOMP-1112: Let beam PTransform define an @ElementListener method to set the component design (inputs/outputs)
TCOMP-1113: Simplify the scanning by assuming there is a TALEND-INF/dependencies.txt in components
TCOMP-1120: BeamMapperImpl.isStream not accurate for UnboundedSource
TCOMP-1124: Add /metrics endpoint
TCOMP-1125: Extend CustomPropertyConverter to pass the convertion context
TCOMP-1127: Record doesn’t support null values
TCOMP-1133: CXF 3.2.7 upgrade
TCOMP-1134: Ensure any input/output have a dataset
TCOMP-1135: Ensure any dataset has a datastore
TCOMP-1136: deprecate "generate" mojo
TCOMP-1145: [dependency upgrade] Beam 2.8.0
TCOMP-1146: implement infinite=true in PartitionMapper/Input
TCOMP-1150: Upgrade rat plugin to 0.13
TCOMP-1154: Required validation at runtime ignores lists and nested objects
TCOMP-1157: [dependency upgrade] Tomcat 9.0.13
TCOMP-1158: Enable JUnit test collector to use a static storage instead of thread related one
TCOMP-1160: Upgrade spark to 2.4.0
TCOMP-1161: Upgrade shade plugin to 3.2.1
TCOMP-1162: Upgrade nested-maven-repository shade transformers to support last maven versions
TCOMP-1163: Upgrade openwebbeans to 2.0.8
TCOMP-1164: Validate mojo does not log any success information
TCOMP-1165: Dependency mojo does not log any success information
TCOMP-1166: Documentation mojo does not log generated files properly
TCOMP-1167: Beam-Avro record name generation should use avro fingerprint to be more unique than current logic
TCOMP-1086: Fix documentation about DiscoverSchema
TCOMP-1064: Update action can’t receive List parameter
TCOMP-1110: When a configuration has no layout and uses @AfterGroup the configuration is lost
TCOMP-1111: Move to PropertyEditorRegistry from xbean instead of using the deprecated static class
TCOMP-1000: @Option name value is not respected on fields
TCOMP-1008: Enum order is lost
TCOMP-1009: (web) OptionsOrder ignored for tables (List), fields located in random order
TCOMP-1028: [tools-webapp] submit button no more functional
TCOMP-1031: DiscoverSchema parameters are not correctly mapped in Studio GuessSchema runtime
TCOMP-1044: Fix java.lang.ClassCastException in TableActionParameter
TCOMP-1046: String option can’t set default value from a file
TCOMP-1056: ActiveIf doesn’t work in advanced settings
TCOMP-1072: Metadata migration issues
TCOMP-1074: talend-component mvn plugin : deploy-in-studio need to rise an error when component is already installed
TCOMP-1075: component reload file on windows after deploying a modified jar
TCOMP-1076: component starter - fix mapper generation (Record integration)
TCOMP-1077: component starter - ensure kit version are updated atomically.
TCOMP-1078: Guess Schema button is not shown on Basic Settings view
TCOMP-1082: Fix Exception during HealthCheck parameter deserialization
TCOMP-1085: [classloader] com.sun is too wide as exclusion
TCOMP-1104: Fix drag and drop issue for dataset/datastore metadata
TCOMP-779: Drop down list Java type in configuration class
TCOMP-819: Processor doesn’t produce more than 1 row on each iteration
TCOMP-917: Migration handler need only to receive component configuration
TCOMP-941: Default and init values are ignored in connection wizzard (datastore/dataset)
TCOMP-968: Trigger AsyncValidation call only when option annotated with Validable is changed
TCOMP-970: Add support for complex parameter types for AsyncValidation methods
TCOMP-973: component migration - the configuration version need to be serialized in addition to the version of the component
TCOMP-984: Integrate ParameterizedTest with component-runtime-http-junit capture mode
TCOMP-988: component migration - fix nested configuration migration
TCOMP-989: .car studio install command breaks config.ini of the studio
TCOMP-991: metadat : ignore activations from config not being part of the form while creating metadata
TCOMP-996: metadata : migration issues
TCOMP-1001: [proxy] ConfigurationClient should expose a migrate method
TCOMP-1011: Ensure datastore/dataset i18n names are validated by the maven/gradle plugins
TCOMP-1013: Add an operator support in @ActiveIfs (OR/AND switch)
TCOMP-1014: Ensure a dataset has a source which has no other required parameters in the validator
TCOMP-1029: Extend ActiveIf EvaluationStrategy with CONTAINS strategy
TCOMP-1063: Integrate Record API to the studio
TCOMP-1069: restrict input branches for output components to only one.
TCOMP-1071: support actions i18n display name
TCOMP-1092: Ensure @Configuration POJO are injectable as Supplier in services
TCOMP-1094: Add FullSerializationRecordCoder coder for Record in beam module
TCOMP-1095: Ensure all configuration type models root entries are named "configuration"
TCOMP-993: [proxy] Propagate UiSpecContext in referenceservice#findByTypeAndName
TCOMP-994: [dependency upgrade] CXF 3.2.6
TCOMP-1003: [dependency upgrade] Tomcat 9.0.12
TCOMP-1004: [dependency upgrade] Log4j2 2.11.1
TCOMP-1015: Upgrade icons to 1.0.0
TCOMP-1019: (form) enum should lead to restricted datalist
TCOMP-1037: [dependency upgrade] Johnzon 1.1.9
TCOMP-1038: Drop spring client from component-form-core
TCOMP-1041: HttpClient should enable to process InputStream directly
TCOMP-1042: Upgrade to JUnit 5.3.1
TCOMP-1045: Add documentation in metadata and enable to use it in the UI on configuration
TCOMP-1047: Make Suggestable text field editable (align with web)
TCOMP-1048: Add update API for configuration
TCOMP-1049: Add completion support for actions displayname in intellij plugin
TCOMP-1050: Provide simple OAuth1 integration
TCOMP-1051: Remove brave and move to geronimo-opentracing
TCOMP-1054: Introduce @Configuration API
TCOMP-1055: remove the ExecutionResource
TCOMP-1057: Add ActiveIf on @Proposable test-case
TCOMP-1058: Add DefaultValue on proposable/dynamicValue testcase
TCOMP-1059: Rework generic record format
TCOMP-1073: [maven/gradle plugin] Add configuration support in web goal
TCOMP-1079: Document new Record structure
TCOMP-1080: [dependency upgrade] Meecrowave 1.2.4
TCOMP-1081: ComponentManager should ignore engine classes in its filtering
TCOMP-1087: Jsonb service should serialize byte[] as BASE64
TCOMP-1089: [starter] Upgrade gradle to 4.10.2
TCOMP-1090: [form] Main/Advanced order not respected when some remote action are involved
TCOMP-1091: Ensure main component is preferred over test ones in a maven project
TCOMP-1093: [dependency upgrade] netty 4.1.30.Final for junit http testing module
TCOMP-1096: [dependency upgrade] xbean 4.10
TCOMP-1097: [dependency upgrade] Beam 2.7.0
TCOMP-1099: Upgrade web ui bundle to 1.0.2
TCOMP-1101: Add conditional rendering in the generated documentation
TCOMP-1102: Reflect in documentation that Validable/AsyncValidation doesn’t support Object types
TCOMP-1106: Enable to generate the component documentation in multiple languages
TCOMP-1107: ConfigurableClassLoader does not priviledges container classloader for getResourceAsStream
TCOMP-877: [documentation] Sample implementation of bulk/batch/commit-interval using groups
TCOMP-980: Provide a ValidationService in server-proxy
TCOMP-985: Align docker git metada on out Standard
TCOMP-998: [dependency upgrade] Apache Commons Compress 1.18
TCOMP-911: Suggestions callback doesn’t support Configuration parameters
TCOMP-921: String cannot be cast to Boolean when adding table with checkboxes
TCOMP-922: component manager : support loading dependencies from job lib folder.
TCOMP-924: component-kit.js errors are not sent to the error handler
TCOMP-927: talend-component:web errors are not always unwrapped and understandable
TCOMP-934: Ensure Studio rely on category and doesn’t append family name
TCOMP-960: Suggestions parameters are not correctly resolved in Studio
TCOMP-961: Default value of Suggestions method parameter is ignored
TCOMP-964: ClassCastException is thrown when non-string values are used as Suggestions method parameter
TCOMP-825: Provide component server proxy
TCOMP-928: Add negate and evaluation strategy to @ActiveIf
TCOMP-929: Ensure category contains the family
TCOMP-816: Check migration feature and implement missing use-cases
TCOMP-918: create a mvn bom with tacokit stack to keep some dependencies aligned between component-runtime and it’s studio integration
TCOMP-932: Avoid Kafka recursive logging for component server
TCOMP-933: Drop component-kit.js module
TCOMP-935: Component server should log application and service in kafka mode
TCOMP-938: Add a builtin::http trigger in the server proxy
TCOMP-939: Ensure the proxy server can lookup references with a SPI
TCOMP-943: (web) Grand parent references for triggers not well resolved
TCOMP-944: (proxy server) Ensure the trigger are well resolved for references
TCOMP-947: (maven/gradle) ensure web task logs there is a UI
TCOMP-953: Upgrade to ziplock 7.0.5
TCOMP-954: Upgrade netty to 4.1.28.Final for the test stack
TCOMP-958: Componentvalidator error message in case of an unsupported type is misleading
TCOMP-959: [dependency upgrade] Upgrade to icon bundle 0.202.0
TCOMP-962: .car deploy-in-studio command (CarMain) should support to override an existing version
TCOMP-965: [dependency upgrade] Apache Beam 2.6.0
TCOMP-966: Ensure Studio integration renames HTTP threads to identify them more explicitly
TCOMP-967: Ensure parameter index is in metadata for services and constructors
TCOMP-919: Starter doesn’t synchronize correctly with central versions
TCOMP-920: Use Meecrowave 1.2.3
TCOMP-888: Designer pipeline records counter are wrong for tacokit components with multiples outputs
TCOMP-899: Update Beam 2.5.0 compatibility
TCOMP-903: [tacokit studio integration] - Guess schema - better handling of number types recognition
TCOMP-904: [tacokit studio integration] - fix job classpath generation
TCOMP-913: Fix absolute path resolution for child of child use-case
TCOMP-900: [tacokit studio integration] - Handle conditional outputs
TCOMP-898: Ensure starter will be able to auto update its versions to avoid redeployments
TCOMP-905: Enrich scanning exclusion set
TCOMP-906: Minimalist JsonObject to IndexeredRecord utilities for beam
TCOMP-907: Support maxBatchSize as in the studio in Beam
TCOMP-910: Add maxbatchsize as built in parameter to Processor meta model
TCOMP-915: Upgrade Apache Meecrowave to 1.2.2
TCOMP-822: [Windows] deploy-in-studio & car copy jar command in mvn plugin - don’t work if the studio is running
TCOMP-844: Service default method forwarded to interface method instead of implementation one if exists
TCOMP-848: [junit5] implicit mock collector and emitter are not resetted per method
TCOMP-851: [form] UiSchema shouldn’t have a JsonSchema
TCOMP-858: @OptionsOrder not respected by form-core
TCOMP-862: [form-core] ".." path is not correctly resolved
TCOMP-863: Job DSL doesn’t support multiple outputs
TCOMP-873: Fix shade junit-http module : remove shaded dependencies from generated artifact
TCOMP-889: [form] arrays are lost in trigger paths
TCOMP-890: Merge the component outputs (by name) from @AfterGroup and @ElementListener
TCOMP-893: Don’t log a warning for services when parameters don’t have i18n support
TCOMP-834: Ensure that component has only one configuration argument.
TCOMP-845: [junit] ComponentsHandler misses findService
TCOMP-846: [junit] allow to inject current plugin services in test class
TCOMP-847: Support gzip in JUnit HTTP tooling
TCOMP-849: [junit http] support to match the request payload
TCOMP-850: MavenDecrypter should tolerate ${env.xxx} syntax
TCOMP-861: Ensure Car Mojo can be skipped
TCOMP-887: [studio] add chunk size advanced common param for processors & output
TCOMP-892: Validate runtime configuration before executing the runtime
TCOMP-829: Configuration Type tree is not correctly computed
TCOMP-830: Move all configuration to Microprofile Config instead of DeltaSpike
TCOMP-832: Provide a way to access lastUpdatedTimestamp in rest api
TCOMP-833: Upgrade gradle+maven for the starter
TCOMP-839: Add an API to load lazily the potential values of a list
TCOMP-840: Upgrade icon bundle to 0.190.2
TCOMP-841: Add validation of option names in the validator
TCOMP-852: [dependency upgrade] Upgrade shrinkwrap-resolver-impl-maven to 3.1.3
TCOMP-855: Support service injections in services
TCOMP-856: [dependency upgrade] OpenWebBeans 2.0.6
TCOMP-857: SimpleCollector must not depend on junit 4
TCOMP-864: Mojo should be thread safe for car/dependencies.txt generation
TCOMP-867: Expose Injector service
TCOMP-868: Create an ObjectFactory service
TCOMP-869: Ensure actions can get injected the requested lang
TCOMP-870: Provide Beam DoFn to simplify the migration from IndexedRecord to JsonObject
TCOMP-876: Allow custom converters in form-core
TCOMP-878: Add beam in the docker image OOTB
TCOMP-879: CarMojo doesn’t use car extension to attach the artifact
TCOMP-880: [dependency upgrade] Maven 3.5.4
TCOMP-881: [dependency upgrade] CXF 3.2.5
TCOMP-882: [dependency upgrade] Tomcat 9.0.10
TCOMP-883: [dependency upgrade] Beam 2.5.0
TCOMP-884: [dependency upgrade] Upgrade to icon bundle 0.197.0
TCOMP-894: [dependency upgrade] Johnzon 1.1.8
TCOMP-895: [dependency upgrade] xbean 4.9
TCOMP-827: Fix Automatic-Module-Name
TCOMP-811: Upgrade to tomcat 9.0.8
TCOMP-826: Extract component model from component server to a new artifact
TCOMP-763: Add a dev mode in the studio for tacokit
TCOMP-802: Add method to upload dependencies from .car to nexus
TCOMP-808: Upgrade to JUnit 5.2.0
TCOMP-809: compress js and css for the starter
TCOMP-810: ui spec service uses a multiselecttag for a proposable on a string field
TCOMP-804: Idea plugin doesn’t render properly configuration inputs
TCOMP-798: intellij plugin - add official starter url
TCOMP-799: @Checkable expects the datastore name to match the validation name
TCOMP-806: Ensure server and starter support gzip
TCOMP-643: Deployment
TCOMP-770: Removing component from web UI causes wrong number of components in summary
TCOMP-775: Starter - Fix properties keys generation
TCOMP-776: component-kit.js ignore credentials
TCOMP-783: ActiveIfs doesn’t make option visible
TCOMP-796: Datastore check (@Checkable) should default meta parameters to "datastore" if none is found
TCOMP-773: Extend the http client api to handle more generic use cases
TCOMP-771: ConfigurableClassLoader should skip scala.* classes
TCOMP-772: Upgrade icon set to ui/icons 0.179.0
TCOMP-774: Upgrade xbean to 4.8
TCOMP-768: More tolerance of configuration prefix for implicit migration of configuration node in form core library
TCOMP-756: Setup maven clirr plugin for component-api +testing
TCOMP-762: Starter should only propose a single category level in the ui
TCOMP-767: Ensure the configurationtype endpoints have matching name/path values
TCOMP-761: Merge component-runtime-manager and component-runtime-standalone
TCOMP-764: Clean up component-form-core dependencies
TCOMP-765: Upgrade to batik 1.9.1
TCOMP-752: Fix Advanced settings and Test connection button appearance in repository wizard
TCOMP-757: Duplicate method name "writeReplace" with signature "()Ljava.lang.Object;" in class file
TCOMP-751: Support gzip compression on component-server
TCOMP-753: Make classpath scanning to find component configurable
TCOMP-758: Support component-server server configuration from system properties
TCOMP-759: Enum must be i18n
TCOMP-738: Component Server should respect ~/.m2/settings.xml local repository if it exists
TCOMP-739: SerializationTransformer shouldn’t use ComponentManager to avoid ClassNotFoundException
TCOMP-740: UISpecService should be reactive and use a CompletionStage based API
TCOMP-741: UISpecService configuration support
TCOMP-742: Configuration Type properties should be rooted
TCOMP-744: Ensure wrapped BeamIO uses the right TCCL
TCOMP-745: [Dependency Upgrade] CXF 3.2.4
TCOMP-746: [Dependency Upgrade] Tomcat 9.0.6
TCOMP-747: [Dependency Upgrade] Log4j2 2.11.0
TCOMP-748: Make configurationtype index endpoint lighter OOTB
TCOMP-749: Intellij Idea plugin
TCOMP-750: Unify @Pattern using javascript regex instead of a mixed mode
TCOMP-734: Add support for context and globalMap values in Tacokit component settings
TCOMP-733: support to use a beam pipeline under the hood for beam components in di
TCOMP-693: Integrate Migration API
TCOMP-737: upgrade to beam 2.4.0
TCOMP-731: Configuration Type migration handler skipped
TCOMP-725: MavenDecrypter doesn’t support comments in settings.xml
TCOMP-726: When a component is not found the error message can be misleading
TCOMP-728: Http client doesn’t ignore empty query parameters
TCOMP-722: WebSocket connection fails with a NPE when the endpoint doesn’t exists
TCOMP-723: Adding configurationByExample utility to create query string for Job DSL
TCOMP-724: Documentation endpoint doesn’t support HTML
TCOMP-446: Support Embedded Documentation
TCOMP-650: Ensure component can be executed in beam pipelines
TCOMP-651: Ensure beam components can be wrapped and used through the Talend Component Kit Framework
TCOMP-653: Web Form metamodel service
TCOMP-655: Catalog service
TCOMP-656: UISpec compatibility
TCOMP-658: Add test Source/Sink collectors in JUnit integration
TCOMP-659: Basic job builder API to simplify JUnit tests
TCOMP-662: Validation Mojo
TCOMP-664: Local testing server for dev
TCOMP-675: Select a communication solution for Talend Component Kit server
TCOMP-680: Register components into the Studio Palette
TCOMP-681: Studio parameters form integration
TCOMP-682: Studio Metadata integration
TCOMP-683: Studio Runtime integration
TCOMP-691: Create context menu for Tacokit node in repository panel
TCOMP-719: Support Input Definition
TCOMP-720: Support Output Definition
TCOMP-721: Initial Widget Definitions
Integrate components you developed using Talend Component Kit to Talend Studio in a few steps. Also learn how to enable the developer and debugging modes to iterate on your component development.
The version of Talend Component Kit you need to use to develop new components depends on the version of Talend Studio in which components will be integrated.
Refer to this document to learn about compatibility between Talend Component Kit and the different versions of Talend applications.
Learn how to build and deploy components to Talend Studio using Maven or Gradle Talend Component Kit plugins.
This can be done using the deploy-in-studio goal from your development environment.
If you are unfamiliar with component development, you can also follow this example to go through the entire process, from creating a project to using your new component in Talend Studio.
The Studio integration relies on the Component Server, that the Studio uses to gather data about components created using Talend Component Kit.
You can change the default configuration of component server by modifying the $STUDIO_HOME/configuration/config.ini file.
The following parameters are available:
Name
Description
Default
component.environment
Enables the developer mode when set to dev
-
component.debounce.timeout
Specifies the timeout (in milliseconds) before calling listeners in components Text fields
750
component.kit.skip
If set to true, the plugin is not enabled. It is useful if you don’t have any component developed with the framework.
false
component.java.arguments
Component server additional options
-
component.java.m2
Maven repository that the server uses to resolve components
Defaults to the global Studio configuration
component.java.coordinates
A list of comma-separated GAV (groupId:artifactId:version) of components to register
-
component.java.registry
A properties file with values matching component GAV (groupId:artifactId:version) registered at startup. Only use slashes (even on windows) in the path.
-
component.java.port
Sets the port to use for the server
random
components.server.beam.active
Active, if set to true, Beam support (Experimental). It requires Beam SDK Java core dependencies to be available.
false
component.server.jul.forceConsole
Adds a console handler to JUL to see logs in the console. This can be helpful in development because the formatting is clearer than the OSGi one in workspace/.metadata/.log.
It uses the java.util.logging.SimpleFormatter.format property to define its format. By default, it is %1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n, but for development purposes [%4$s] %5$s%6$s%n is simpler and more readable.
false
Here is an example of a common developer configuration/config.ini file:
The developer mode is especially useful to iterate on your component development and to avoid closing and restarting Talend Studio every time you make a change to a component. It adds a Talend Component Kit button in the main toolbar:
When clicking this button, all components developed with the Talend Component Kit framework are reloaded. The cache is invalidated and the components refreshed.
You still need to add and remove the components to see the changes.
To enable it, simply set the component.environment parameter to dev in the config.ini configuration file of the component server.
Several methods allow you to debug custom components created with Talend Component Kit in Talend Studio.
From your development tool, create a new Remote configuration, and copy the Command line arguments for running remote JVM field. For example, -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005, where:
the suspend parameter of the -agentlib argument specifies whether you want to suspend the debugged JVM until the debugger attaches to it. Possible values are n (no, default value) or y (yes).
the address parameter of the -agentlib argument is the port used for the remote configuration. Make sure this port is available.
Open Talend Studio.
Create a new Job that uses the component you want to debug or open an existing one that already uses it.
Go to the Run tab of the Job and select Use specific JVM arguments.
Click New to add an argument.
In the popup window, paste the arguments copied from the IDE.
Enter the corresponding debug mode:
To debug the runtime, run the Job and access the remote host configured in the IDE.
To debug the Guess schema option, click the Guess schema action button of the component and access the remote host configured in the IDE.
From your development tool, create a new Remote configuration, and copy the Command line arguments for running remote JVM field. For example, -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005, where:
suspend defines whether you need to access the defined configuration to run the remote JVM. Possible values are n (no, default value) or y (yes).
address is the port used for the remote configuration. Make sure this port is available.
Access the installation directory of your Talend Sutdio.
Open the .ini file corresponding to your Operating System. For example, TOS_DI-win-x86_64.ini.
Paste the arguments copied from the IDE in a new line of the file.
Go to Talend Studio to use the component, and access the host host configured in the IDE.
If you run multiple Studio instances automatically in parallel, you can run into some issues with the random port computation. For example on a CI platform. For that purpose, you can create the $HOME/.talend/locks/org.talend.sdk.component.studio-integration.lock file.
Then, when a server starts, it acquires a lock on that file and prevents another server to get a port until it is started. It ensures that you can’t have two concurrent processes getting the same port allocated.
However, it is highly unlikely to happen on a desktop. In that case, forcing a different value through component.java.port in your config.ini file is a better solution for local installations.
Datasets and datastores are configuration types that define how and where to pull the data from. They are used at design time to create shared configurations that can be stored and used at runtime.
All connectors (input and output components) created using Talend Component Kit must reference a valid dataset. Each dataset must reference a datastore.
Datastore: The data you need to connect to the backend.
Dataset: A datastore coupled with the data you need to execute an action.
Make sure that: a datastore is used in each dataset. each dataset has a corresponding input component (mapper or emitter). This input component must be able to work with only the dataset part filled by final users. Any other property implemented for that component must be optional. These rules are enforced by the validateDataSet validation. If the conditions are not met, the component builds will fail.
Make sure that:
a datastore is used in each dataset.
each dataset has a corresponding input component (mapper or emitter).
This input component must be able to work with only the dataset part filled by final users. Any other property implemented for that component must be optional.
These rules are enforced by the validateDataSet validation. If the conditions are not met, the component builds will fail.
A datastore defines the information required to connect to a data source. For example, it can be made of:
a URL
a username
a password.
You can specify a datastore and its context of use (in which dataset, etc.) from the Component Kit Starter.
Make sure to modelize the data your components are designed to handle before defining datasets and datastores in the Component Kit Starter.
Once you generate and import the project into an IDE, you can find datastores under a specific datastore node.
Example of datastore:
A dataset represents the inbound data. It is generally made of:
A datastore that defines the connection information needed to access the data.
A query.
You can specify a dataset and its context of use (in which input and output component it is used) from the Component Kit Starter.
Make sure to modelize the data your components are designed to handle before defining datasets and datastores in the Component Kit Starter.
Once you generate and import the project into an IDE, you can find datasets under a specific dataset node.
Example of dataset referencing the datastore shown above:
The display name of each dataset and datastore must be referenced in the message.properties file of the family package.
The key for dataset and datastore display names follows a defined pattern: ${family}.${configurationType}.${name}._displayName. For example:
These keys are automatically added for datasets and datastores defined from the Component Kit Starter.
When deploying a component or set of components that include datasets and datastores to Talend Studio, a new node is created under Metadata. This node has the name of the component family that was deployed.
It allows users to create reusable configurations for datastores and datasets.
With predefined datasets and datastores, users can then quickly fill the component configuration in their jobs. They can do so by selecting Repository as Property Type and by browsing to the predefined dataset or datastore.
Studio will generate connection and close components auto for reusing connection function in input and output components, just need to do like this example:
Then the runtime mapper and processor only need to use @Connection to get the connection like this:
The component server scans all configuration types and returns a configuration type index. This index can be used for the integration into the targeted platforms (Studio, web applications, and so on).
Mark a model (complex object) as being a dataset.
API: @org.talend.sdk.component.api.configuration.type.DataSet
Sample:
Mark a model (complex object) as being a datastore (connection to a backend).
API: @org.talend.sdk.component.api.configuration.type.DataStore
Sample:
Mark a model (complex object) as being a dataset discovery configuration.
API: @org.talend.sdk.component.api.configuration.type.DatasetDiscovery
Sample:
The component family associated with a configuration type (datastore/dataset) is always the one related to the component using that configuration.
The configuration type index is represented as a flat tree that contains all the configuration types, which themselves are represented as nodes and indexed by ID.
Every node can point to other nodes. This relation is represented as an array of edges that provides the child IDs.
As an illustration, a configuration type index for the example above can be defined as follows:
The component configuration is defined in the Configuration.java file of the package. It consists in defining the configurable part of the component that will be displayed in the UI.
To do that, you can specify parameters. When you import the project in your IDE, the parameters that you have specified in the starter are already present.
All input and output components must reference a dataset in their configuration. Refer to Defining datasets and datastores.
Components are configured using their constructor parameters. All parameters can be marked with the @Option property, which lets you give a name to them.
For the name to be correct, you must follow these guidelines:
Use a valid Java name.
Do not include any . character in it.
Do not start the name with a $.
Defining a name is optional. If you don’t set a specific name, it defaults to the bytecode name. This can require you to compile with a -parameter flag to avoid ending up with names such as arg0, arg1, and so on.
Examples of option name:
Option name
Valid
myName
my_name
my.name
$myName
Parameter types can be primitives or complex objects with fields decorated with @Option exactly like method parameters.
It is recommended to use simple models which can be serialized in order to ease serialized component implementations.
For example:
Using this kind of API makes the configuration extensible and component-oriented, which allows you to define all you need.
The instantiation of the parameters is done from the properties passed to the component.
A primitive is a class which can be directly converted from a String to the expected type.
It includes all Java primitives, like the String type itself, but also all types with a org.apache.xbean.propertyeditor.Converter:
BigDecimal
BigInteger
File
InetAddress
ObjectName
URI
URL
Pattern
LocalDateTime
ZonedDateTime
The conversion from property to object uses the Dot notation.
For example, assuming the method parameter was configured with @Option("file"):
matches
Lists rely on an indexed syntax to define their elements.
For example, assuming that the list parameter is named files and that the elements are of the FileOptions type, you can define a list of two elements as follows:
if you desire to override a config to truncate an array, use the index length, for example to truncate previous example to only CSV, you can set:
Similarly to the list case, the map uses .key[index] and .value[index] to represent its keys and values:
Avoid using the Map type. Instead, prefer configuring your component with an object if this is possible.
You can use metadata to specify that a field is required or has a minimum size, and so on. This is done using the validation metadata in the org.talend.sdk.component.api.configuration.constraint package:
Ensure the decorated option size is validated with a higher bound.
API: @org.talend.sdk.component.api.configuration.constraint.Max
Name: maxLength
Parameter Type: double
Supported Types: — java.lang.CharSequence
Sample:
Ensure the decorated option size is validated with a lower bound.
API: @org.talend.sdk.component.api.configuration.constraint.Min
Name: minLength
Parameter Type: double
Supported Types: — java.lang.CharSequence
Sample:
Validate the decorated string with a javascript pattern (even into the Studio).
API: @org.talend.sdk.component.api.configuration.constraint.Pattern
Name: pattern
Parameter Type: java.lang.string
Supported Types: — java.lang.CharSequence
Sample:
Ensure the decorated option size is validated with a higher bound.
API: @org.talend.sdk.component.api.configuration.constraint.Max
Name: max
Parameter Type: double
Supported Types: — java.lang.Number — int — short — byte — long — double — float
Sample:
Ensure the decorated option size is validated with a lower bound.
API: @org.talend.sdk.component.api.configuration.constraint.Min
Name: min
Parameter Type: double
Supported Types: — java.lang.Number — int — short — byte — long — double — float
Sample:
Mark the field as being mandatory.
API: @org.talend.sdk.component.api.configuration.constraint.Required
Name: required
Parameter Type: -
Supported Types: — java.lang.Object
Sample:
Ensure the decorated option size is validated with a higher bound.
API: @org.talend.sdk.component.api.configuration.constraint.Max
Name: maxItems
Parameter Type: double
Supported Types: — java.util.Collection
Sample:
Ensure the decorated option size is validated with a lower bound.
API: @org.talend.sdk.component.api.configuration.constraint.Min
Name: minItems
Parameter Type: double
Supported Types: — java.util.Collection
Sample:
Ensure the elements of the collection must be distinct (kind of set).
API: @org.talend.sdk.component.api.configuration.constraint.Uniques
Name: uniqueItems
Parameter Type: -
Supported Types: — java.util.Collection
Sample:
When using the programmatic API, metadata is prefixed by tcomp::. This prefix is stripped in the web for convenience, and the table above uses the web keys.
Also note that these validations are executed before the runtime is started (when loading the component instance) and that the execution will fail if they don’t pass. If it breaks your application, you can disable that validation on the JVM by setting the system property talend.component.configuration.validation.skip to true.
Datasets and datastores are configuration types that define how and where to pull the data from. They are used at design time to create shared configurations that can be stored and used at runtime.
All connectors (input and output components) created using Talend Component Kit must reference a valid dataset. Each dataset must reference a datastore.
Datastore: The data you need to connect to the backend.
Dataset: A datastore coupled with the data you need to execute an action.
Make sure that: a datastore is used in each dataset. each dataset has a corresponding input component (mapper or emitter). This input component must be able to work with only the dataset part filled by final users. Any other property implemented for that component must be optional. These rules are enforced by the validateDataSet validation. If the conditions are not met, the component builds will fail.
Make sure that:
a datastore is used in each dataset.
each dataset has a corresponding input component (mapper or emitter).
This input component must be able to work with only the dataset part filled by final users. Any other property implemented for that component must be optional.
These rules are enforced by the validateDataSet validation. If the conditions are not met, the component builds will fail.
A datastore defines the information required to connect to a data source. For example, it can be made of:
a URL
a username
a password.
You can specify a datastore and its context of use (in which dataset, etc.) from the Component Kit Starter.
Make sure to modelize the data your components are designed to handle before defining datasets and datastores in the Component Kit Starter.
Once you generate and import the project into an IDE, you can find datastores under a specific datastore node.
Example of datastore:
A dataset represents the inbound data. It is generally made of:
A datastore that defines the connection information needed to access the data.
A query.
You can specify a dataset and its context of use (in which input and output component it is used) from the Component Kit Starter.
Make sure to modelize the data your components are designed to handle before defining datasets and datastores in the Component Kit Starter.
Once you generate and import the project into an IDE, you can find datasets under a specific dataset node.
Example of dataset referencing the datastore shown above:
The display name of each dataset and datastore must be referenced in the message.properties file of the family package.
The key for dataset and datastore display names follows a defined pattern: ${family}.${configurationType}.${name}._displayName. For example:
These keys are automatically added for datasets and datastores defined from the Component Kit Starter.
When deploying a component or set of components that include datasets and datastores to Talend Studio, a new node is created under Metadata. This node has the name of the component family that was deployed.
It allows users to create reusable configurations for datastores and datasets.
With predefined datasets and datastores, users can then quickly fill the component configuration in their jobs. They can do so by selecting Repository as Property Type and by browsing to the predefined dataset or datastore.
Studio will generate connection and close components auto for reusing connection function in input and output components, just need to do like this example:
Then the runtime mapper and processor only need to use @Connection to get the connection like this:
The component server scans all configuration types and returns a configuration type index. This index can be used for the integration into the targeted platforms (Studio, web applications, and so on).
Mark a model (complex object) as being a dataset.
API: @org.talend.sdk.component.api.configuration.type.DataSet
Sample:
Mark a model (complex object) as being a datastore (connection to a backend).
API: @org.talend.sdk.component.api.configuration.type.DataStore
Sample:
Mark a model (complex object) as being a dataset discovery configuration.
API: @org.talend.sdk.component.api.configuration.type.DatasetDiscovery
Sample:
The component family associated with a configuration type (datastore/dataset) is always the one related to the component using that configuration.
The configuration type index is represented as a flat tree that contains all the configuration types, which themselves are represented as nodes and indexed by ID.
Every node can point to other nodes. This relation is represented as an array of edges that provides the child IDs.
As an illustration, a configuration type index for the example above can be defined as follows:
If you need to define a binding between properties, you can use a set of annotations:
If the evaluation of the element at the location matches value then the element is considered active, otherwise it is deactivated.
API: @org.talend.sdk.component.api.configuration.condition.ActiveIf
Type: if
Sample:
Allows to set multiple visibility conditions on the same property.
API: @org.talend.sdk.component.api.configuration.condition.ActiveIfs
Type: ifs
Sample:
Where:
target is the element to evaluate.
value is the value to compare against.
strategy (optional) is the evaluation criteria. Possible values are:
CONTAINS: Checks if a string or list of strings contains the defined value.
DEFAULT: Compares against the raw value.
LENGTH: For an array or string, evaluates the size of the value instead of the value itself.
negate (optional) defines if the test must be positive (default, set to false) or negative (set to true).
operator (optional) is the comparison operator used to combine several conditions, if applicable. Possible values are AND and OR.
The target element location is specified as a relative path to the current location, using Unix path characters. The configuration class delimiter is /. The parent configuration class is specified by ... Thus, ../targetProperty denotes a property, which is located in the parent configuration class and is named targetProperty.
When using the programmatic API, metadata is prefixed with tcomp::. This prefix is stripped in the web for convenience, and the previous table uses the web keys.
For more details, refer to the related Javadocs.
A common use of the ActiveIf condition consists in testing if a target property has a value. To do that, it is possible to test if the length of the property value is different from 0:
target: foo - the path to the property to evaluate.
strategy: LENGTH - the strategy consists here in testing the length of the property value.
value: 0 - the length of the property value is compared to 0.
negate: true - setting negate to true means that the strategy of the target must be different from the value defined. In this case, the LENGTH of the value of the foo property must be different from 0.
The following example shows how to implement visibility conditions on several fields based on several checkbox configurations:
If the first checkbox is selected, an additional input field is displayed.
if the second or the third checkbox is selected, an additional input field is displayed.
if both second and third checkboxes are selected, an additional input field is displayed.
In some cases, you may need to add metadata about the configuration to let the UI render that configuration properly. For example, a password value that must be hidden and not a simple clear input box. For these cases - if you want to change the UI rendering - you can use a particular set of annotations:
Provide a default value the UI can use - only for primitive fields.
API: @org.talend.sdk.component.api.configuration.ui.DefaultValue
Allows to sort a class properties.
API: @org.talend.sdk.component.api.configuration.ui.OptionsOrder
Request the rendered to do what it thinks is best.
API: @org.talend.sdk.component.api.configuration.ui.layout.AutoLayout
Advanced layout to place properties by row, this is exclusive with @OptionsOrder.
the logic to handle forms (gridlayout names) is to use the only layout if there is only one defined, else to check if there are Main and Advanced and if at least Main exists, use them, else use all available layouts.
API: @org.talend.sdk.component.api.configuration.ui.layout.GridLayout
Allow to configure multiple grid layouts on the same class, qualified with a classifier (name)
API: @org.talend.sdk.component.api.configuration.ui.layout.GridLayouts
Put on a configuration class it notifies the UI an horizontal layout is preferred.
API: @org.talend.sdk.component.api.configuration.ui.layout.HorizontalLayout
Put on a configuration class it notifies the UI a vertical layout is preferred.
API: @org.talend.sdk.component.api.configuration.ui.layout.VerticalLayout
Mark a field as being represented by some code widget (vs textarea for instance).
API: @org.talend.sdk.component.api.configuration.ui.widget.Code
Mark a field as being a credential. It is typically used to hide the value in the UI.
API: @org.talend.sdk.component.api.configuration.ui.widget.Credential
Mark a field as being a date. It supports and is implicit - which means you don’t need to put that annotation on the option - for java.time.ZonedDateTime, java.time.LocalDate and java.time.LocalDateTime and is unspecified for other types.
API: @org.talend.sdk.component.api.configuration.ui.widget.DateTime
Mark a string field as being represented by selected module list widget, only for studio
API: @org.talend.sdk.component.api.configuration.ui.widget.ModuleList
Mark a List or List
The HTTP API intends to expose most Talend Component Kit features over HTTP. It is a standalone Java HTTP server.
The WebSocket protocol is activated for the endpoints. Endpoints then use /websocket/v1 as base instead of /api/v1. See WebSocket for more details.
Browse the API description using interface.
To make sure that the migration can be enabled, you need to set the version the component was created with in the execution configuration that you send to the server (component version is in component the detail endpoint). To do that, use tcomp::component::version key.
Endpoints that are intended to disappear will be deprecated. A X-Talend-Warning header will be returned with a message as value.
You can connect yo any endpoint by:
Replacing /api with /websocket
Appending / to the URL
Formatting the request as:
For example:
The response is formatted as follows:
All endpoints are logged at startup. You can then find them in the logs if you have a doubt about which one to use.
If you don’t want to create a pool of connections per endpoint/verb, you can use the bus endpoint: /websocket/v1/bus. This endpoint requires that you add the destinationMethod header to each request with the verb value (GET by default):
the configuration is read from system properties, environment variables, ….
Default value: 1000. Maximum items a cache can store, used for index endpoints.
A comma separated list of gav to locate the components
Default value: ${home}/documentations. A component translation repository. This is where you put your documentation translations. Their name must follow the pattern documentation_${container-id}_language.adoc where ${container-id} is the component jar name (without the extension and version, generally the artifactId).
Default value: true. Should the component extensions add required dependencies.
If you deploy some extension, where they can create their dependencies if needed.
Default value: 180000. Timeout for extension initialization at startup, since it ensures the startup wait extensions are ready and loaded it allows to control the latency it implies.
A property file (or multiple comma separated) where the value is a gav of a component to register(complementary with coordinates). Note that the path can end up with or .properties to take into account all properties in a folder.
Default value: true. Should the /documentation endpoint be activated. Note that when called on localhost the doc is always available.
Default value: true. Should the /api/v1/environment endpoint be activated. It shows some internal versions and git commit which are not always desirable over the wire.
Default value: false. Should the components using a @GridLayout support tab translation. Studio does not suppot that feature yet so this is not enabled by default.
Default value: icons/%s.svg,icons/svg/%s.svg,icons/%s_icon32.png,icons/png/%s_icon32.png. These patterns are used to find the icons in the classpath(s).
Default value: false. If set it will replace any message for exceptions. Set to false to use the actual exception message.
Default value: false. Should the lastUpdated timestamp value of /environment endpoint be updated with server start time.
Default value: en*=en fr*=fr zh*=zh_CN ja*=ja de*=de. For caching reasons the goal is to reduce the locales to the minimum required numbers. For instance we avoid fr and fr_FR which would lead to the same entries but x2 in terms of memory. This mapping enables that by whitelisting allowed locales, default being en. If the key ends with it means all string starting with the prefix will match. For instance fr will match fr_FR but also fr_CA.
The local maven repository used to locate components and their dependencies
Default value: false. Should the plugins be un-deployed and re-deployed.
Default value: 600. Interval in seconds between each check if plugins re-loading is enabled.
Specify a file to check its timestamp on the filesystem. This file will take precedence of the default ones provided by the talend.component.server.component.registry property (used for timestamp method).
Default value: timestamp. Re-deploy method on a timestamp or connectors version change. By default, the timestamp is checked on the file pointed by talend.component.server.component.registry or talend.component.server.plugins.reloading.marker variable, otherwise we inspect the content of the CONNECTORS_VERSION file. Accepted values: timestamp, anything else defaults to connectors.
Default value: false. Should the all requests/responses be logged (debug purposes - only work when running with CXF).
Default value: securityNoopHandler. How to validate a command/request. Accepted values: securityNoopHandler.
Default value: securityNoopHandler. How to validate a connection. Accepted values: securityNoopHandler.
A folder available for the server - don’t forget to mount it in docker if you are using the image - which accepts subfolders named as component plugin id (generally the artifactId or jar name without the version, ex: jdbc). Each family folder can contain:
a user-configuration.properties file which will be merged with component configuration system (see services). This properties file enables the function userJar(xxxx) to replace the jar named xxxx by its virtual gav (groupId:artifactId:version),
a list of jars which will be merged with component family classpath
Default value: auto. Should the implicit artifacts be provisionned to a m2. If set to auto it tries to detect if there is a m2 to provision - recommended, if set to skip it is ignored, else it uses the value as a m2 path.
The configuration uses Microprofile Config for most entries. It means it can be passed through system properties and environment variables (by replacing dots with underscores and making the keys uppercase).
To configure a Docker image rather than a standalone instance, Docker Config and secrets integration allows you to read the configuration from files. You can customize the configuration of these integrations through system properties.
Docker integration provides a secure: support to encrypt values and system properties, when required.
It is fully implemented using the Apache Geronimo Microprofile Config extensions.
Using the server ZIP (or Docker image), you can configure HTTPS by adding properties to _JAVA_OPTIONS. Assuming that you have a certificate in /opt/certificates/component.p12 (don’t forget to add/mount it in the Docker image if you use it), you can activate it as follows:
You can define simple queries on the configuration types and components endpoints. These two endpoints support different parameters.
Queries on the configurationtype/index endpoint supports the following parameters:
type
id
name
metadata of the first configuration property as parameters.
Queries on the component/index endpoint supports the following parameters:
plugin
name
id
familyId
metadata of the first configuration property as parameters.
In both cases, you can combine several conditions using OR and AND operators. If you combine more than two conditions, note that they are evaluated in the order they are written.
Each supported parameter in a condition can be "equal to" (=) or "not equal to" (!=) a defined value (case-sensitive).
For example:
In this example, the query gets components that have a dataset and belong to the jdbc-component plugin, or components that are named input.
The component-form library provides a way to build a component REST API facade that is compatible with React form library.
for example:
the Client can be created using ClientFactory.createDefault(System.getProperty("app.components.base", "http://localhost:8080/api/v1")) and the service can be a simple new UiSpecService<>(). The factory uses JAX-RS if the API is available (assuming a JSON-B provider is registered). Otherwise, it tries to use Spring.
The conversion from the component model (REST API) to the uiSpec model is done through UiSpecService. It is based on the object model which is mapped to a UI model. Having a flat model in the component REST API allows to customize layers easily.
You can completely control the available components, tune the rendering by switching the uiSchema, and add or remove parts of the form. You can also add custom actions and buttons for specific needs of the application.
The /migrate endpoint was not shown in the previous snippet but if you need it, add it as well.
This Maven dependency provides the UISpec model classes. You can use the Ui API (with or without the builders) to create UiSpec representations.
For Example:
The model uses the JSON-B API to define the binding. Make sure to have an implementation in your classpath. To do that, add the following dependencies:
The following module enables you to define through annotations a uispec on your own models:
this can’t be used in components and is only intended for web applications.
org.talend.sdk.component.form.uispec.mapper.api.service.UiSpecMapper enables to create a Ui instance from a custom type annotated with org.talend.sdk.component.form.uispec.mapper.api.model.View and org.talend.sdk.component.form.uispec.mapper.api.model.View.Schema.
UiSpecMapper returns a Supplier and not directly an Ui because the ui-schema is re-evaluated when `get()̀ is called. This enables to update the title maps for example.
Here is an example:
This API maps directly the UiSpec model (json schema and ui schema of Talend UIForm).
The default implementation of the mapper is available at org.talend.sdk.component.form.uispec.mapper.impl.UiSpecMapperImpl.
Here is an example:
The getTitleMapProviders() method will generally lookup a set of TitleMapProvider instances in your IoC context. This API is used to fill the titleMap of the form when a reference identifier is set on the @Schema annotation.
component-kit.js is no more available (previous versions stay on NPM) and is replaced by @talend/react-containers. The previous import can be replaced by import kit from '@talend/react-containers/lib/ComponentForm/kit';.
Default JavaScript integration goes through the Talend UI Forms library and its Containers wrapper.
Documentation is now available on the previous link.
The logging uses Log4j2. You can specify a custom configuration by using the -Dlog4j.configurationFile system property or by adding a log4j2.xml file to the classpath.
Here are some common configurations:
Console logging:
Output messages look like:
JSON logging:
Output messages look like:
Rolling file appender:
More details are available in the RollingFileAppender documentation.
You can compose previous layout (message format) and appenders (where logs are written).
The server image is deployed on Docker. Its version is suffixed with a timestamp to ensure images are not overridden and can break your usage. You can check the available version on Docker hub.
You can run the docker image by executing this command :
You can set the env variable _JAVA_OPTIONS to customize the server, by default it is installed in /opt/talend/component-kit.
The maven repository is the default one of the machine, you can change it setting the system property talend.component.server.maven.repository=/path/to/your/m2.
If you want to deploy some components you can configure which ones in _JAVA_OPTIONS (see server doc online) and redirect your local m2:
The component server docker image comes with two log4j2 profiles: TEXT (default) and JSON. The logging profile can be changed by setting the environment variable LOGGING_LAYOUT to JSON.
Note that Component Server adds to these default Talend profiles the KAFKA profile. With this profile, all logs are sent to Kafka.
You can check the exact configuration in the component-runtime/images/component-server-image/src/main/resources folder.
The console logging is on at INFO level by default. You can customize it by setting the CONSOLE_LOG_LEVEL environment variable to DEBUG, INFO, WARN or to any other log level supported by log4j2.
Run docker image with console logging:
The JSON profile does the following:
Logs on the console using the CONSOLE_LOG_LEVEL configuration as the default profile. It uses the formatting shown below.
If the TRACING_KAFKA_URL environment variable is set, it logs the opentracing data on the defined Kafka using the topic TRACING_KAFKA_TOPIC. This level can be customized by setting the KAFKA_LOG_LEVEL environment variable (INFO by default).
Events are logged in the following format:
This profile is very close to the JSON profile and also adds the LOG_KAFKA_TOPIC and LOG_KAFKA_URL configuration. The difference is that it logs the default logs on Kafka in addition to the tracing logs.
The component server uses Geronimo OpenTracing to monitor request.
The tracing can be activated by setting the TRACING_ON environment variable to true.
The tracing rate is configurable by setting the TRACING_SAMPLING_RATE environment variable. It accepts 0 (none) and 1 (all, default) as values to ensure the consistency of the reporting.
You can find all the details on the configuration in org.talend.sdk.component.server.configuration.OpenTracingConfigSource.
Run docker image with tracing on:
By default, Geronimo OpenTracing will log the spans in a Zipking format so you can use the Kafka profile as explained before to wire it over any OpenTracing backend.
You can register component server images in Docker using these instructions in the corresponding image directory:
Docker Compose allows you to deploy the server with components, by mounting the component volume into the server image.
docker-compose.yml example:
If you want to mount it from another image, you can use this compose configuration:
To run one of the previous compose examples, you can use docker-compose -f docker-compose.yml up.
Only use the configuration related to port 5005 (in ports and the -agentlib option in _JAVA_OPTIONS) to debug the server on port 5005. Don’t set it in production.
You can mount a volume in /opt/talend/component-kit/custom/ and the jars in that folder which will be deployed with the server. Since the server relies on CDI (Apache OpenWebBeans) you can use that technology to enrich it, including JAX-RS endpoints, interceptors etc…or just libraries needing to be in the JVM.
This tutorial walks you through the creation, from scratch, of a complete Talend input component for Hazelcast using the Talend Component Kit (TCK) framework.
Hazelcast is an in-memory distributed system that can store data, which makes it a good example of input component for distributed systems. This is enough for you to get started with this tutorial, but you can find more information about it here: hazelcast.org/.
A TCK project is a simple Java project with specific configurations and dependencies. You can choose your preferred build tool from Maven or Gradle as TCK supports both. In this tutorial, Maven is used.
The first step consists in generating the project structure using Talend Starter Toolkit .
Go to starter-toolkit.talend.io/ and fill in the project information as shown in the screenshots below, then click Finish and Download as ZIP.
image::tutorial_hazelcast_generateproject_1.png[] image::tutorial_hazelcast_generateproject_2.png[]
Extract the ZIP file into your workspace and import it to your preferred IDE. This tutorial uses Intellij IDE, but you can use Eclipse or any other IDE that you are comfortable with.
You can use the Starter Toolkit to define the full configuration of the component, but in this tutorial some parts are configured manually to explain key concepts of TCK.
The generated pom.xml file of the project looks as follows:
Change the name tag to a more relevant value, for example: Component Hazelcast.
The component-api dependency provides the necessary API to develop the components.
talend-component-maven-plugin provides build and validation tools for the component development.
The Java compiler also needs a Talend specific configuration for the components to work correctly. The most important is the -parameters option that preserves the parameter names needed for introspection features that TCK relies on.
Download the mvn dependencies declared in the pom.xml file:
You should get a BUILD SUCCESS at this point:
Create the project structure:
Create the component Java packages.
Packages are mandatory in the component model and you cannot use the default one (no package). It is recommended to create a unique package per component to be able to reuse it as dependency in other components, for example to guarantee isolation while writing unit tests.
The project is now correctly set up. The next steps consist in registering the component family and setting up some properties.
Registering every component family allows the component server to properly load the components and to ensure they are available in Talend Studio.
The family registration happens via a package-info.java file that you have to create.
Move to the src/main/java/org/talend/components/hazelcast package and create a package-info.java file:
@Components: Declares the family name and the categories to which the component belongs.
@Icon: Defines the component family icon. This icon is visible in the Studio metadata tree.
Talend Component Kit supports internationalization (i18n) via Java properties files. Using these files, you can customize and translate the display name of properties such as the name of a component family or, as shown later in this tutorial, labels displayed in the component configuration.
Go to src/main/resources/org/talend/components/hazelcast and create an i18n Messages.properties file as below:
You can define the component family icon in the package-info.java file. The icon image must exist in the resources/icons folder.
TCK supports both SVG and PNG formats for the icons.
Create the icons folder and add an icon image for the Hazelcast family.
This tutorial uses the Hazelcast icon from the official GitHub repository that you can get from: avatars3.githubusercontent.com/u/1453152?s=200&v=4
Download the image and rename it to Hazelcast_icon32.png. The name syntax is important and should match _icon.32.png.
The component registration is now complete. The next step consists in defining the component configuration.
All Input and Output (I/O) components follow a predefined model of configuration. The configuration requires two parts:
Datastore: Defines all properties that let the component connect to the targeted system.
Dataset: Defines the data to be read or written from/to the targeted system.
Connecting to the Hazelcast cluster requires the IP address, group name and password of the targeted cluster.
In the component, the datastore is represented by a simple POJO.
Create a HazelcastDatastore.java class file in the src/main/java/org/talend/components/hazelcast folder.
Define the i18n properties of the datastore. In the Messages.properties file let add the following lines:
The Hazelcast datastore is now defined.
Hazelcast includes different types of datastores. You can manipulate maps, lists, sets, caches, locks, queues, topics and so on.
This tutorial focuses on maps but still applies to the other data structures.
Reading/writing from a map requires the map name.
Create the dataset class by creating a HazelcastDataset.java file in src/main/java/org/talend/components/hazelcast.
The @Dataset annotation marks the class as a dataset. Note that it also references a datastore, as required by the components model.
Just how it was done for the datastore, define the i18n properties of the dataset. To do that, add the following lines to the Messages.properties file.
The component configuration is now ready. The next step consists in creating the Source that will read the data from the Hazelcast map.
The Source is the class responsible for reading the data from the configured dataset.
A source gets the configuration instance injected by TCK at runtime and uses it to connect to the targeted system and read the data.
Create a new class as follows.
The source also needs i18n properties to provide a readable display name. Add the following line to the Messages.properties file.
At this point, it is already possible to see the result in the Talend Component Web Tester to check how the configuration looks like and validate the layout visually. To do that, execute the following command in the project folder.
This command starts the Component Web Tester and deploys the component there.
Access localhost:8080/.
The source is set up. It is now time to start creating some Hazelcast specific code to connect to a cluster and read values for a map.
Add the hazelcast-client Maven dependency to the pom.xml of the project, in the dependencies node.
Add a Hazelcast instance to the @PostConstruct method.
Declare a HazelcastInstance attribute in the source class.
Any non-serializable attribute needs to be marked as transient to avoid serialization issues.
Implement the post construct method.
The component configuration is mapped to the Hazelcast client configuration to create a Hazelcast instance. This instance will be used later to get the map from its name and read the map data. Only the required configuration in the component is exposed to keep the code as simple as possible.
Implement the code responsible for reading the data from the Hazelcast map through the Producer method.
The Producer implements the following logic:
Check if the map iterator is already initialized. If not, get the map from its name and initialize the map iterator. This is done in the @Producer method to ensure the map is initialized only if the next() method is called (lazy initialization). It also avoids the map initialization in the PostConstruct method as the Hazelcast map is not serializable.
All the objects initialized in the PostConstruct method need to be serializable as the source can be serialized and sent to another worker in a distributed cluster.
From the map, create an iterator on the map keys that will read from the map.
Transform every key/value pair into a Talend Record with a "key, value" object on every call to next().
The RecordBuilderFactory class used above is a built-in service in TCK injected via the Source constructor. This service is a factory to create Talend Records.
Now, the next() method will produce a Record every time it is called. The method will return "null" if there is no more data in the map.
Implement the @PreDestroy annotated method, responsible for releasing all resources used by the Source. The method needs to shut the Hazelcast client instance down to release any connection between the component and the Hazelcast cluster.
The Hazelcast Source is completed. The next section shows how to write a simple unit test to check that it works properly.
TCK provides a set of APIs and tools that makes the testing straightforward.
The test of the Hazelcast Source consists in creating an embedded Hazelcast instance with only one member and initializing it with some data, and then in creating a test Job to read the data from it using the implemented Source.
Add the required Maven test dependencies to the project.
Initialize a Hazelcast test instance and create a map with some test data. To do that, create the HazelcastSourceTest.java test class in the src/test/java folder. Create the folder if it does not exist.
The above example creates a Hazelcast instance for the test and creates the MY-DISTRIBUTED-MAP map. The getMap creates the map if it does not already exist. Some keys and values uses in the test are added. Then, a simple test checks that the data is correctly initialized. Finally, the Hazelcast test instance is shut down.
Run the test and check in the logs that a Hazelcast cluster of one member has been created and that the test has passed.
To be able to test components, TCK provides the @WithComponents annotation which enables component testing. Add this annotation to the test. The annotation takes the component Java package as a value parameter.
Create the test Job that configures the Hazelcast instance and link it to an output that collects the data produced by the Source.
Execute the unit test and check that it passes, meaning that the Source is reading the data correctly from Hazelcast.
The Source is now completed and tested. The next section shows how to implement the Partition Mapper for the Source. In this case, the Partition Mapper will split the work (data reading) between the available cluster members to distribute the workload.
The Partition Mapper calculates the number of Sources that can be created and executed in parallel on the available workers of a distributed system. For Hazelcast, it corresponds to the cluster member count.
To fully illustrate this concept, this section also shows how to enhance the test environment to add more Hazelcast cluster members and initialize it with more data.
Instantiate more Hazelcast instances, as every Hazelcast instance corresponds to one member in a cluster. In the test, it is reflected as follows:
The above code sample creates two Hazelcast instances, leading to the creation of two Hazelcast members. Having a cluster of two members (nodes) will allow to distribute the data. The above code also adds more data to the test map and updates the shutdown method and the test.
Run the test on the multi-nodes cluster.
The Source is a simple implementation that does not distribute the workload and reads the data in a classic way, without distributing the read action to different cluster members.
Start implementing the Partition Mapper class by creating a HazelcastPartitionMapper.java class file.
When coupling a Partition Mapper with a Source, the Partition Mapper becomes responsible for injecting parameters and creating source instances. This way, all the attribute initialization part moves from the Source to the Partition Mapper class.
The configuration also sets an instance name to make it easy to find the client instance in the logs or while debugging.
The Partition Mapper class is composed of the following:
constructor: Handles configuration and service injections
Assessor: This annotation indicates that the method is responsible for assessing the dataset size. The underlying runner uses the estimated dataset size to compute the optimal bundle size to distribute the workload efficiently.
Split: This annotation indicates that the method is responsible for creating Partition Mapper instances based on the bundle size requested by the underlying runner and the size of the dataset. It creates as much partitions as possible to parallelize and distribute the workload efficiently on the available workers (known as members in the Hazelcast case).
Emitter: This annotation indicates that the method is responsible for creating the Source instance with an adapted configuration allowing to handle the amount of records it will produce and the required services. I adapts the configuration to let the Source read only the requested bundle of data.
The Assessor method computes the memory size of every member of the cluster. Implementing it requires submitting a calculation task to the members through a serializable task that is aware of the Hazelcast instance.
Create the serializable task.
The purpose of this class is to submit any task to the Hazelcast cluster.
Use the created task to estimate the dataset size in the Assessor method.
The Assessor method calculates the memory size that the map occupies for all members. In Hazelcast, distributing a task to all members can be achieved using an execution service initialized in the getExecutorService() method. The size of the map is requested on every available member. By summing up the results, the total size of the map in the distributed cluster is computed.
The Split method calculates the heap size of the map on every member of the cluster. Then, it calculates how many members a source can handle.
If a member contains less data than the requested bundle size, the method tries to combine it with another member. That combination can only happen if the combined data size is still less or equal to the requested bundle size.
The following code illustrates the logic described above.
The next step consists in adapting the source to take the Split into account.
The following sample shows how to adapt the Source to the Split carried out previously.
The next method reads the data from the members received from the Partition Mapper.
A Big Data runner like Spark will get multiple Source instances. Every source instance will be responsible for reading data from a specific set of members already calculated by the Partition Mapper.
The data is fetched only when the next method is called. This logic allows to stream the data from members without loading it all into the memory.
Implement the method annotated with @Emitter in the HazelcastPartitionMapper class.
The createSource() method creates the source instance and passes the required services and the selected Hazelcast members to the source instance.
Run the test and check that it works as intended.
The component implementation is now done. It is able to read data and to distribute the workload to available members in a Big Data execution environment.
Refactor the component by introducing a service to make some pieces of code reusable and avoid code duplication.
Refactor the Hazelcast instance creation into a service.
Inject this service to the Partition Mapper to reuse it.
Adapt the Source class to reuse the service.
Run the test one last time to ensure everything still works as expected.
Thank you for following this tutorial. Use the logic and approach presented here to create any input component for any system.