Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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
java
java
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 example uses the default producer name "buyChannel". Alternatively, a name could be specified on the @producer is connected to the "BuyChannel" channel using the Producer annotation. The next excerpt subscribes to receive BuyEvents:

Code Block
java
java
import org.fabric3.api.annotation.Consumer;

@Component
public class BuyListener {

   @Consumer(source="buyChannelBuyChannel")
   public void onEvent(BuyEvent event) {
      ...
   }
}

Producers, consumers, and channels Channels are configured in a composite using XML or a DSL:

Code Block
xml
xml
In XML: 
 
<composite ...>
    <component<channel name="BuyComponentBuyChannel"/>
</composite>

 
Using the DSL:
<implementation.java .../>
 
package f3;

public class ChannelProvider {
<producer name="buyChannel" target="BuyChannel"/>  @Provides
 </component>   public static <component name="BuyListener">
Composite testComposite() {
     <implementation.java .../>  QName name =   <consumer name="buyChannel" source="BuyChannel"/>new QName("urn:test", "ChannelComposite");
    </component>    ChannelDefinitionBuilder <channelchannelBuilder name= ChannelDefinitionBuilder.newBuilder("BuyChannel"/>);
        </composite>

...

return CompositeBuilder.newBuilder(name).channel(channelBuilder.build()).build();
    }
}

For more details on using the DSL, see Annotations and the DSL.