Erro no uso de Services
17/05/2012 19:12
0
Pessoal,

tentei encontrar um tutorial para uso de serviços, mas nao to encontrando. Li a documentação que é muito resumida.

Por favor alguem poderia me esclarecer alguns pontos:

1. mandei criar o serviço "MensageiroService.groovy".
2. Criei uma um metodo interno chamado "void verificaMensagem(Long mensagem.id)"
3. Em meu controlador eu declaro o service: "def MensagemService"
4. Chamo o método:
" // codigo
verificaMensagem(1)
//codigo
"
e ocorre o erro: groovy.lang.MissingMethodException: No signature of method: application.ConsoleScript8.verificaMensagem() is applicable for argument types: (java.lang.Integer) values: [1] at application.ConsoleScript8.run(ConsoleScript8:7)


1° Pergunta - Estou invocando o metodo dentro de service errado? Como deveria chamá-lo (invocá-lo)?

2º Pergunta - Pra que ser o "transactional = true" (static transactional = true) e o que isso melhora em meu projeto?

3° Pergunta - Como posso melhorar o uso de Services no Grails?
Tags: Service, erro


1
Olá,

Troque a assinatura do seu método. Ao invés disso:

void verificaMensagem(Long mensagem.id)


Troque para isso:

void verificaMensagem(Long mensagem)


Ou:

void verificaMensagem(Long id)


Ao declarar seu serviço como transacional, você se certifica de que ele automaticamente fará um rollback no caso de ocorrer algum erro. Ou seja, se você estiver atualizando uma base de dados, por exemplo, só ocorre o commit no banco se nada der errado durante a operação. Assim você garante a integridade do sistema como um todo.

Quanto aos services, você pode (deve) utilizá-lo quando desejar implementar regras de negócios complexas, ao invés de deixar tudo no controlador. Essa é uma boa prática de programação, pois seus controllers irão servir apenas para lidar com as requisições.
17/05/2012 23:32


0
Amigo, o método espera um Long e você passou um Integer, não foi?


0
CarlosG,

Obrigado pela sua ajuda, mas infelizmente o serviço não foi executado (groovy.lang.MissingMethodException), nem mesmo entrou no serviço.

José Yoshiriro é um Long, mas eu ja alterei pata um Integer e mesmo assim não funcionou.

Isso é que esta complicado, as regras foram seguidas, mas algo parece estar errado, só que eu não consigo encontrar.

Por favor vejam o uqe consegue me ajudar.

18/05/2012 15:13


0
Amigo, você disse que usou

def MensagemService



no Controller, certo? Por que não tentou
def mensageiroService

ou
MensageiroService mensageiroService


E devem estar como variáveis de instância, ok?


0
José,

na verdade estou usando inicialmente no Console do Grails uma vez que não funcionou usá-lo no controlador:

1°) Eu já fiz o que sugeriu com o serviço criado: "def mensageiroService".

2°) Após declarado o serviço fiz o uso do método verificaMensagem() porém o erro ainda permanece.

O que vc acha que estou fazendo de errado José?

Obrigado pela sua ajuda.
18/05/2012 16:16


0
Não sei se ajuda a informação, mas eu tenho um dominio com o mesmo nome do serviço (Dominio: Mensagem | Serviço: MensagemService) vou tentar alterar o nome do serviço para ver se funciona e posto aqui.
18/05/2012 16:20


0
Alterei o nome da classe de Serviço para ficar diferente da de Dominio e mesmo assim nao funcionou.

Alterei o paramentro de passagem de retirando o long e encaminhando via parametro a mensagem direta e deu o mesmo erro: groovy.lang.MissingMethodException: No signature of method.

18/05/2012 16:33


1
"na verdade estou usando inicialmente no Console do Grails uma vez que não funcionou usá-lo no controlador"


Amigo, eu acho que só se pode usar Services em Controllers.


0
AH, já tentou fazer o "clean" do Grails?


0
José,


você é um dos caras mais inteligentes desse forum. Realmente esse era o problema.

Montei uma view e testei o serviço no controlador. Funcionou perfeito.

O problema é que na documentação não diz que os serviços são exclusivamente para uso nos controladores. Pela lógica deveria funcionar no Console do Grails.

No mais José você me ajudou até aqui e pela sua ajuda consegui resolver este problema.

Muito obrigado pela sua ajuda.

18/05/2012 17:15


0
hehehehehe

fico feliz em ajudar mas passo longe de ser um dos mais inteligentes. Sou só um cara esforçado e estudioso inclusive eu disse "eu acho que só se pode usar Services em Controllers" rsrsr. Hoje fui eu amanhã será outro a te "salvar a vida" aqui no fórum ;)

Bom trabalho e até +



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto