Red Hat Training

A Red Hat training course is available for Red Hat Fuse

19.16. Indirect Service Invocation With Annotations

In the example below, annotations have been added to the bean called Order to manage invocation:
@Named
@RequestScoped
public class Order implements Serializable {
 
    @Inject
    @Reference
    private OrderService orderService;
 
    private String orderId;
    private String itemId;
    private int quantity = 1;
 
    public String getOrderId() {
        return orderId;
    }
 
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
 
    public String getItemId() {
        return itemId;
    }
 
    public void setItemId(String itemId) {
        this.itemId = itemId;
    }
 
    public int getQuantity() {
        return quantity;
    }
 
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
 
    public void create() {
        OrderAck serviceAck = orderService.submitOrder(this);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(serviceAck.toString()));
    }
}
  • Annotations @Named and @RequestScoped have been added.
  • The OrderService property has a @Reference annotation. Because of this, its instance is not a reference to the actual service implementation. Instead, it is a SwitchYard Exchange proxy to that service implementation. By using @Reference injected service references, backend service implementations can be non-CDI Bean service implementations.
  • Implementing the create method invokes the OrderService reference (exchange proxy).