Eventing-style interactions involve a component that acts as a source or producer of events which are dispatched to a channel. In turn, consumer components are configured to listen on a channel for events. Similar to reference injection, a source component is injected with a producer proxy using the Fabric3 @Producer annotation. This proxy is responsible for dispatching messages to a channel. A component subscribes to a channel using a consumer method.
Image Added
The following is an example of a source component with a an injected producer:
Code Block |
---|
|
import org.fabric3.api.annotation.Producer;
@Component
public class BuyComponent implements BuyService {
@Producer(target="BuyChannel")
private BuyChannel buyChannel;
public void process() {
BuyEvent event = ...
buyChannel.publish(event);*
}
}
|
The above producer is connected to the "BuyChannel" channel using the Producer annotation. The next excerpt subscribes to receive BuyEvents:
Code Block |
---|
|
import org.fabric3.api.annotation.Consumer;
@Component
public class BuyListener {
@Consumer(source="BuyChannel")
public void onEvent(BuyEvent event) {
...
}
}
|
Channels are configured in a composite using XML or a DSL:
Code Block |
---|
|
In XML:
<composite ...>
<channel name="BuyChannel"/>
</composite>
Using the DSL:
package f3;
public class ChannelProvider {
@Provides
public static Composite testComposite() {
QName name = new QName("urn:test", "ChannelComposite");
ChannelDefinitionBuilder channelBuilder = ChannelDefinitionBuilder.newBuilder("BuyChannel");
return CompositeBuilder.newBuilder(name).channel(channelBuilder.build()).build();
}
} |
For more details on using the DSL, see Annotations and the DSL.