Apache camel Camel 2.21.1 RouterBuilder OSGI服务因OSGI服务注册表中未找到简单语言而出现异常

Apache camel Camel 2.21.1 RouterBuilder OSGI服务因OSGI服务注册表中未找到简单语言而出现异常,apache-camel,osgi,osgi-bundle,Apache Camel,Osgi,Osgi Bundle,我正在扩展Camel-RouteBuilder以定义Camel-route,因此我的专用类是一个OSGI组件,在@Activate方法上创建Camel上下文,如: camelContext = new OsgiDefaultCamelContext(bundleContext); 然后调用camelContext.addRoute(this)方法,但是当调用camelContext.start()方法时,会抛出org.apache.camel.NoSuchLanguageException。因

我正在扩展Camel-RouteBuilder以定义Camel-route,因此我的专用类是一个OSGI组件,在@Activate方法上创建Camel上下文,如:

camelContext = new OsgiDefaultCamelContext(bundleContext);
然后调用
camelContext.addRoute(this)
方法,但是当调用
camelContext.start()
方法时,会抛出
org.apache.camel.NoSuchLanguageException
。因此,由于OSGI SR中尚未注册
org.apache.camel.language.simple.SimpleLanguage
,因此似乎存在竞速条件

注意: route builder专业化中没有OSGI注入,因此,即使在核心组件出现之前,这个组件也可以很快激活


然后,我想知道这是否是一个问题,如果我的自定义包添加Camel内部依赖项(如SimpleLanguage引用)只是为了摆脱这种竞争状况,那么这是没有意义的。

如果您在OSGi中手动创建Camel,您需要对CamelContext进行更多的设置

如果您自己包装osgi camel上下文,那么还需要进行一些设置
看看camel core osgi中有一个helper类,它有一个方法可以设置一堆东西

如果在osgi中手动创建camel,则需要对CamelContext进行更多的设置

如果您自己包装osgi camel上下文,那么还需要进行一些设置
看看camel-core-osgi中有一个helper类,它有一个方法可以设置一堆东西

我想知道camel-core-activator和我的定制包是否存在竞争条件(根本没有camel-osgi依赖关系),因为bundle语言是在下面的调用堆栈中注册的

我想知道Camel core activator和我的自定义bundle是否存在竞争条件(根本没有Camel OSGI依赖关系),因为bundle语言是在下面的调用堆栈中注册的

太好了!您是指
org.apache.camel.core.osgi.OsgiCamelContextHelper.class
?我正在从那里调用
osgiUpdate
方法,但问题会不断出现。你有关于这方面的参考文档吗?在你安装和运行自己的包之前,你没有安装并准备好骆驼核心包吗?例如,我们只支持ApacheKaraf作为OSGi运行时,通过Karaf特性预安装Camel。当你自己做OSGi时,你会更加独立,各种事情都会发生,是的,助手类是你应该在设置中使用的东西。此外,您的自定义包可以引用例如camel simple language等,以使包在启动之前等待它出现。嗯,至少在camel blueprint中有一些逻辑可以发现您的camel路由正在使用什么,并设置对它们的引用,因此它将等待它们被安装,并且在osgi服务注册表中(请参阅camel blueprint源代码)绝对是这样,现在我明白了!如何更改我的捆绑包的开始级别?为了确保我的自定义包是最后一个启动的包之一。你有没有发现任何问题(除了OSGI的入门级之外)太棒了!您是指
org.apache.camel.core.osgi.OsgiCamelContextHelper.class
?我正在从那里调用
osgiUpdate
方法,但问题会不断出现。你有关于这方面的参考文档吗?在你安装和运行自己的包之前,你没有安装并准备好骆驼核心包吗?例如,我们只支持ApacheKaraf作为OSGi运行时,通过Karaf特性预安装Camel。当你自己做OSGi时,你会更加独立,各种事情都会发生,是的,助手类是你应该在设置中使用的东西。此外,您的自定义包可以引用例如camel simple language等,以使包在启动之前等待它出现。嗯,至少在camel blueprint中有一些逻辑可以发现您的camel路由正在使用什么,并设置对它们的引用,因此它将等待它们被安装,并且在osgi服务注册表中(请参阅camel blueprint源代码)绝对是这样,现在我明白了!如何更改我的捆绑包的开始级别?为了确保我的自定义包是最后一个启动的包之一。您是否认为有任何问题(除了OSGI启动级别之外)会成为压倒性的问题?