在 Talend 路由中使用特定版本的 bean

Use a specific version of a bean in a Talend route

我正在使用 Talend Open Studio for ESB (7.2.1) 创建 Apache Camel 路由。一个项目中包含多个路由,以及该路由的多个 bean。

一些路由共享一些 bean,随着时间的推移,可能会发生路由与最新版本的 bean 不兼容的情况——而且这种不兼容性仅在运行时出现,甚至仅在特定情况下出现。

所以我的问题是:是否可以指定引用的 bean 的确切版本(因为所有必需的版本都存储在 Talend 项目中)?我认为这可以在 cBean 组件、cBeanRegister 组件、Spring 配置或配置中实现路线依赖? - 但没有找到任何相关文件或信息。

我的确切问题是这个异常:

org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method invocations possible: [public static void beans.ArticleGroupHandler.handleGroup(org.apache.camel.Exchange), public static void beans.ArticleGroupHandler.handleNavisionGroups(org.apache.camel.Exchange)].

首先,bean 中只存在 public static void beans.ArticleGroupHandler.handleGroup(org.apache.camel.Exchange) 方法,因此我在没有方法规范的情况下使用 cBean 组件有效。在不同路由中更新后,添加了方法 public static void beans.ArticleGroupHandler.handleNavisionGroups(org.apache.camel.Exchange) 并且第一个路由的新构建导致在执行期间出现上述异常。

我知道我可以通过指定要使用的确切方法来解决该异常,但想知道,如果我以后可以通过指定 bean 版本来避免此类问题。

Talend Bean 版本是源版本控制的问题。将其视为 Git 存储库中的标记提交。你可以只使用当前版本,它是在你构建或发布它时与你的路由一起编译的。

要在一个应用程序中支持同一个 bean 的多个版本,请尝试复制它并加上版本号后缀,例如 V1V2 等。这将使所有不同的版本都可以在类路径中访问一条路线,您将能够将它们称为 beans.MyBeanV1beans.MyBeanV2