使用 cdi 容器启动 camel standalone
starting camel standalone with cdi container
我尝试了不同的方法来使用 cdi.main
创建一个独立的骆驼
org.apache.camel.cdi.Main.main();
//not org.apache.camel.Main
我也配置了 deltaspike,我看到了 cdi 容器,但是我的 CamelContext 没有启动。
如果有人已经独立运行了 Camel boot cdi,您可以发送代码吗?
更新:
我不断收到此类错误:
org.apache.webbeans.exception.WebBeansDeploymentException: javax.enterprise.inject.AmbiguousResolutionException: There is more than one Bean with type org.apache.camel.CamelContextQualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name : ctx, Bean Owner : [ContextInitializer, WebBeansType:MANAGED, Name:null, API Types:[java.lang.Object,proj.core.ContextInitializer], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]]
found beans:
CdiCamelContext, WebBeansType:THIRDPARTY, Name:CamelContext, API Types:[org.apache.camel.CamelContext,org.apache.camel.cdi.CdiCamelContext,java.lang.Object], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from jar:file:/P:/atos/common/apache-maven-repo/org/apache/camel/camel-cdi/2.16.1/camel-cdi-2.16.1.jar!/org/apache/camel/cdi/CdiCamelContext.class
CamelContext, WebBeansType:PRODUCERMETHOD, Name:null, API Types:[org.apache.camel.CamelContext,org.apache.camel.SuspendableService,org.apache.camel.RuntimeConfiguration,java.lang.Object,org.apache.camel.Service], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from file:/P:/atos/proj-vnext/proj-core/target/classes/proj/core/CamelContextFactory.class
刚好有人遇到同样的问题,我才发现问题,只是pom.xml中的配置问题。混合骆驼核心和骆驼 cdi 版本
这是我的工作配置 => camel、OpenWebBeans 容器和 deltaspike
*/ 启动应用程序的代码
org.apache.camel.cdi.Main maincdi = new org.apache.camel.cdi.Main(){};
maincdi.run();
*/骆驼上下文生产者
public class CamelContextFactory {
@Produces
@ApplicationScoped
CamelContext customize() {
DefaultCamelContext context = new DefaultCamelContext();
context.setName("my-custom-camel-context");
return context;
}
void cleanUp(@Disposes CamelContext context) {
// ...
}
}
*/创建上下文初始化器
@ApplicationScoped
public class ContextInitializer {
@Inject
private CamelContext ctx;
@Inject
@Any
private Instance<RouteBuilder> routes;
@PostConstruct
public void init() {
// add routes
for (RouteBuilder route : routes) {
try {
ctx.addRoutes(route);
} catch (Exception ex) {
Logger.getLogger(ContextInitializer.class.getName()).log(Level.SEVERE, null, ex);
}
}
//this.ctx.start();
}
@PreDestroy
public void stop() {
//this.ctx.stop();
}
}
*/ 将在 'routes' 属性
中注入的路由 class
public class SomeRouteClass extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:foo?period=2000")
//.bean(testBean)
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("route called from context " + exchange.getContext().getName());
}
});
}
}
*/ pom.xml
的一部分
<properties>
<deltaspike.version>1.7.2</deltaspike.version>
<!--<weld.version>2.3.3.Final</weld.version>-->
<owb.version>1.6.3</owb.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.deltaspike.distribution</groupId>
<artifactId>distributions-bom</artifactId>
<version>${deltaspike.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cdi</artifactId>
<version>2.18.1</version>
</dependency>
<!--delta spike core-->
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>${deltaspike.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>${deltaspike.version}</version>
<scope>runtime</scope>
</dependency>
<!--container control-->
<dependency>
<groupId>org.apache.deltaspike.cdictrl</groupId>
<artifactId>deltaspike-cdictrl-api</artifactId>
<version>${deltaspike.version}</version>
<scope>compile</scope>
</dependency>
<!--open web bean dependency-->
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-impl</artifactId>
<version>${owb.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-spi</artifactId>
<version>${owb.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jcdi_1.1_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-atinject_1.0_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-interceptor_1.2_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-annotation_1.2_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.cdictrl</groupId>
<artifactId>deltaspike-cdictrl-owb</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
=> 我的错误是我有 camel-core 版本 2.18.1 和 camel cdi 2.16.1
我尝试了不同的方法来使用 cdi.main
创建一个独立的骆驼org.apache.camel.cdi.Main.main();
//not org.apache.camel.Main
我也配置了 deltaspike,我看到了 cdi 容器,但是我的 CamelContext 没有启动。
如果有人已经独立运行了 Camel boot cdi,您可以发送代码吗?
更新: 我不断收到此类错误:
org.apache.webbeans.exception.WebBeansDeploymentException: javax.enterprise.inject.AmbiguousResolutionException: There is more than one Bean with type org.apache.camel.CamelContextQualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name : ctx, Bean Owner : [ContextInitializer, WebBeansType:MANAGED, Name:null, API Types:[java.lang.Object,proj.core.ContextInitializer], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]]
found beans:
CdiCamelContext, WebBeansType:THIRDPARTY, Name:CamelContext, API Types:[org.apache.camel.CamelContext,org.apache.camel.cdi.CdiCamelContext,java.lang.Object], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from jar:file:/P:/atos/common/apache-maven-repo/org/apache/camel/camel-cdi/2.16.1/camel-cdi-2.16.1.jar!/org/apache/camel/cdi/CdiCamelContext.class
CamelContext, WebBeansType:PRODUCERMETHOD, Name:null, API Types:[org.apache.camel.CamelContext,org.apache.camel.SuspendableService,org.apache.camel.RuntimeConfiguration,java.lang.Object,org.apache.camel.Service], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from file:/P:/atos/proj-vnext/proj-core/target/classes/proj/core/CamelContextFactory.class
刚好有人遇到同样的问题,我才发现问题,只是pom.xml中的配置问题。混合骆驼核心和骆驼 cdi 版本
这是我的工作配置 => camel、OpenWebBeans 容器和 deltaspike
*/ 启动应用程序的代码
org.apache.camel.cdi.Main maincdi = new org.apache.camel.cdi.Main(){};
maincdi.run();
*/骆驼上下文生产者
public class CamelContextFactory {
@Produces
@ApplicationScoped
CamelContext customize() {
DefaultCamelContext context = new DefaultCamelContext();
context.setName("my-custom-camel-context");
return context;
}
void cleanUp(@Disposes CamelContext context) {
// ...
}
}
*/创建上下文初始化器
@ApplicationScoped
public class ContextInitializer {
@Inject
private CamelContext ctx;
@Inject
@Any
private Instance<RouteBuilder> routes;
@PostConstruct
public void init() {
// add routes
for (RouteBuilder route : routes) {
try {
ctx.addRoutes(route);
} catch (Exception ex) {
Logger.getLogger(ContextInitializer.class.getName()).log(Level.SEVERE, null, ex);
}
}
//this.ctx.start();
}
@PreDestroy
public void stop() {
//this.ctx.stop();
}
}
*/ 将在 'routes' 属性
中注入的路由 class public class SomeRouteClass extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:foo?period=2000")
//.bean(testBean)
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("route called from context " + exchange.getContext().getName());
}
});
}
}
*/ pom.xml
的一部分 <properties>
<deltaspike.version>1.7.2</deltaspike.version>
<!--<weld.version>2.3.3.Final</weld.version>-->
<owb.version>1.6.3</owb.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.deltaspike.distribution</groupId>
<artifactId>distributions-bom</artifactId>
<version>${deltaspike.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cdi</artifactId>
<version>2.18.1</version>
</dependency>
<!--delta spike core-->
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>${deltaspike.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>${deltaspike.version}</version>
<scope>runtime</scope>
</dependency>
<!--container control-->
<dependency>
<groupId>org.apache.deltaspike.cdictrl</groupId>
<artifactId>deltaspike-cdictrl-api</artifactId>
<version>${deltaspike.version}</version>
<scope>compile</scope>
</dependency>
<!--open web bean dependency-->
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-impl</artifactId>
<version>${owb.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-spi</artifactId>
<version>${owb.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jcdi_1.1_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-atinject_1.0_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-interceptor_1.2_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-annotation_1.2_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.cdictrl</groupId>
<artifactId>deltaspike-cdictrl-owb</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
=> 我的错误是我有 camel-core 版本 2.18.1 和 camel cdi 2.16.1