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. The following is an example of a source component with a an injected producer:
Code Block |
---|
|
import org.fabric3.api.annotation.Producer;
public class BuyComponent implements BuyService {
@Producer
private BuyChannel buyChannel;
public void process() {
BuyEvent event = //...
buyChannel.publish(event);*
}
}
|
The above example uses the default producer name "buyChannel". Alternatively, a name could be specified on the @Producer annotation. The next excerpt subscribes to receive BuyEvents:
Code Block |
---|
|
import org.fabric3.api.annotation.Consumer;
public class BuyListener {
@Consumer("buyChannel")*
public void onEvent(BuyEvent event) {
// ...
}
}
|
Producers, consumers, and channels are configured in a composite:
Code Block |
---|
|
<composite ...>
<component name="BuyComponent">
<implementation.java .../>
<producer name="buyChannel" target="BuyChannel"/>
</component>
<component name="BuyListener">
<implementation.java .../>
<consumer name="buyChannel" source="BuyChannel"/>
</component>
<channel name="BuyChannel"/>
</composite>
|
...