Criando serviços

Neste tutorial, criaremos um serviço de inclusão. É preciso ter uma entidade, como descrito em criando entidades.

Um serviço básico

Para criar um serviço, basta criar uma classe e anotá-la como @ServiceImplementor, definindo o nome do serviço e o tipo de ação. Se serviceName não for definido, por default o nome do serviço será o nome da classe menos o sufixo Service (StockService -> serviceName=”Stock”).

O que o serviço faz deve estar num método público anotado como @Execution.

package example.services.incluir;

import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;

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

         /**
          * Este é o método de execução do serviço
          */
         @Execution
         public void executeService(){

         }
}

Parâmetros do serviço

Um serviço geralmente tem parâmetros. Para indicar os parâmetros, basta anotá-los como Parameter, definindo o nome de cada parâmetro.

package example.services.incluir;

import java.math.BigDecimal;

import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Parameter;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;

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

         /**
          * Este é o método de execução do serviço
          */
         @Execution
         public void executeService(@Parameter("NAME") String name, @Parameter("VALUE") BigDecimal value){

         }
}

Também é possível indicar os parâmetros do serviço de outra forma.

Basta anotar o método setter como @Input, identificando o nome do campo. Por default, se não houver valor para fieldName, o nome será o do setter (setName(...) -> fieldName=”name”).

package example.services.incluir;

import java.math.BigDecimal;

import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Input;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;

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

         private String name;
         private BigDecimal value;

         /**
          * Este é o método de execução do serviço
          */
         @Execution
         public void executeService(){

         }

         public String getName() {
             return name;
         }

         @Input(fieldName = "NAME")
         public void setName(String name) {
             this.name = name;
         }

         public BigDecimal getValue() {
             return value;
         }

         @Input(fieldName = "VALUE")
         public void setValue(BigDecimal value) {
             this.value = value;
         }
}

Dependências do serviço

Caso o serviço necessite que alguns recursos sejam injetados, basta anotar o parâmetro com @Injected.

Pode ser usado tanto em parâmetros do construtor como em parâmetros do método de execução do serviço.

package example.services.incluir;

import example.domain.Stock;
import jmine.tec.di.annotation.Injected;
import jmine.tec.persist.impl.dao.BaseDAO;
import jmine.tec.services.api.ActionsEnum;
import jmine.tec.services.api.annotations.Execution;
import jmine.tec.services.api.annotations.ServiceImplementor;

import java.math.BigDecimal;

/**
 * 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();
         }
}

Registrando o serviço

Depois de criado o serviço, é preciso registrá-lo.

No arquivo core-services.xml, devemos registrar o serviço criado, incluindo um bean que o representará no grupo de serviços.

E esse grupo conterá uma lista de serviços, é nessa lista que registraremos o serviço que criamos.

<beans>
  <bean id="coreServices" class="jmine.tec.utils.register.Registrar">
         <property name="receiver" ref="serviceFactory">
         <property name="registers">
             <bean class="jmine.tec.services.api.factory.ServiceClassListFactoryBean">
                 <property name="mappingResources">
                     <list>
                         <value>example.services.incluir.StockService</value>
                     </list>
                 </property>
             </bean>
         </property>
  </property></bean>
</beans>