5.3. CDI および Camel Bean コンポーネント
5.3.1. 名前による Bean の参照 リンクのコピーリンクがクリップボードにコピーされました!
ルート定義内の Bean を名前で参照するには、Bean に @Named ("myNamedBean") および @ApplicationScoped (またはその他の サポートされている スコープ) のアノテーションを付けます。@RegisterForReflection アノテーションは、ネイティブモードにとって重要です。
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
@ApplicationScoped
@Named("myNamedBean")
@RegisterForReflection
public class NamedBean {
public String hello(String name) {
return "Hello " + name + " from the NamedBean";
}
}
その後、ルート定義で myNamedBean 名を使用できます。
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
from("direct:named")
.bean("myNamedBean", "hello");
/* ... which is an equivalent of the following: */
from("direct:named")
.to("bean:myNamedBean?method=hello");
}
}
@Named の代わりに、io.smallrye.common.annotation.Identifier を使用して Bean に名前を付けて識別することもできます。
import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.common.annotation.Identifier;
@ApplicationScoped
@Identifier("myBeanIdentifier")
@RegisterForReflection
public class MyBean {
public String hello(String name) {
return "Hello " + name + " from MyBean";
}
}
次に、Camel ルート内の識別子の値を参照します。
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
from("direct:start")
.bean("myBeanIdentifier", "Camel");
}
}
Red Hat は、Camel ドキュメントの Bean Binding セクションにリストされているすべてのユースケースをサポートすることを目指しています。機能しない Bean バインディングシナリオがある場合は、問題の報告 をぜひお願いいたします。
5.3.2. @Consume リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus 2.0.0 以降、camel-quarkus-bean アーティファクトにより @org.apache.camel.Consume がサポートされるようになりました。Camel ドキュメントの Pojo Consuming セクションを参照してください。
次のようなクラスを宣言します。
import org.apache.camel.Consume;
public class Foo {
@Consume("activemq:cheese")
public void onCheese(String name) {
...
}
}
すると、次の Camel ルートが
from("activemq:cheese").bean("foo1234", "onCheese")
自動的に作成されます。Camel Quarkus は @jakarta.inject.Singleton と jakarta.inject.Named("foo1234") を Bean クラスに暗黙的に追加します。1234 は完全修飾クラス名から取得されたハッシュコードです。Bean に何らかの CDI スコープ (@ApplicationScoped など) または @Named("someName") がすでに設定されている場合、それらは自動作成されたルートで使用されます。