Search

Errai Examples: RPC Invocation on CDI components

GWT client component

@LoadTool(name = "RPC Endpoints", group="Examples")
public class AccountClient implements WidgetProvider
{
    private final MessageBus bus = ErraiBus.get();

    private HTML responsePanel;

    public void provideWidget(ProvisioningCallback callback)
    {           
      LayoutPanel panel = 
              new LayoutPanel(new BoxLayout(BoxLayout.Orientation.VERTICAL));
      
      Button button = new Button("Load accounts"new ClickHandler()
      {
        public void onClick(ClickEvent clickEvent)
        {
          AccountManager call = MessageBuilder.createCall(
              new RemoteCallback <List<Account>>()
              {
                public void callback(List<account> accounts)
                {
                  StringBuffer sb = new StringBuffer();
                  sb.append("<ul>");
                  for(Account a : accounts)
                    sb.append("<li>").append(a.getId());
                  sb.append("</ul>");
                  responsePanel.setHTML(sb.toString());
                }
              }, AccountManager.class
          );
          
          call.getAllAccounts();
        }
      });

      responsePanel = new HTML();

      panel.add(button);
      panel.add(responsePanel);

      callback.onSuccess(panel);
    }   
}

CDI managed bean

@Service
@ApplicationScoped
public class AccountManagerBean 
        implements AccountManager
{
  @Inject
  AccountStorageBean storage;

  public void createAccount(Account account)
  {
    storage.addAccount(account);
  }

  public Account getAccount(String id)
  {
    return storage.getAccount(id);
  }

  public void deleteAccount(String id)
  {
    storage.remove(id);
  }

  public List<Account> getAllAccounts()
  {   
    return storage.getAll();
  }
}