Retornando Objetos com Serviços

Os serviços podem retornar parâmetros para serem utilizados por outros serviços.

A infraestrutura de serviços mantém um cache de objetos para que possam ser referenciados posteriormente por um identificador.

Dado um simples serviço de inclusão:

/**
 * Este é um serviço de inclusão de stocks
 */
@ServiceImplementor(serviceName="STOCK", action=ActionsEnum.INCLUIR)
public class StockService {

         private BaseDAO<Stock> stockDAO;

         public StockService(@Injected BaseDAO<Stock> stockDAO){
             this.stockDAO = stockDAO;
         }

         /**
          * Este é o método de execução do serviço
          */
         @Execution
         public void executeService(@Parameter("NAME") String name, @Parameter("VALUE") BigDecimal value){
             Stock stock = this.stockDAO.createBean();
             stock.setName(name);
             stock.setValue(value);
             stock.getPersister().save();
         }
}

Basta anotar o método de execução do serviço com @Output, indicando o nome da propriedade:

/**
 * Este é um serviço de inclusão de stocks
 */
@ServiceImplementor(serviceName="STOCK", action=ActionsEnum.INCLUIR)
public class StockService {

         private BaseDAO<Stock> stockDAO;

         public StockService(@Injected BaseDAO<Stock> stockDAO){
             this.stockDAO = stockDAO;
         }

         /**
          * Este é o método de execução do serviço
          */
         @Execution
         @Output(propertyName="ID")
         public Stock executeService(@Parameter("NAME") String name, @Parameter("VALUE") BigDecimal value){
             Stock stock = this.stockDAO.createBean();
             stock.setName(name);
             stock.setValue(value);
             stock.getPersister().save();
             return stock;
         }
}

O objeto retornado pelo serviço será associado pelo nome passado como property name.

../../_images/service_include.png ../../_images/service_exclude.png

Repare que após inseridos os registros, removemos um deles utilizando $STOCK2, que era o identificador daquele objeto, conforme indicado pelo property name.