Também utilizo Liferay há um tempo, aproximadamente 3 anos, e lá no início também não entendia muito bem o por que de utilizar o Service Builder, pois achei muito complexo para utilizar o banco de dados.
Mas depois de um tempo, pesquisas e práticas, vi que para desenvolvimento de portlet, especificamente no Liferay é claro, este serviço agiliza e muito o desenvolvimento. Como já foi comentado anteriormente, o foco do desenvolvedor fica na lógica das regras de negócio, utilizando os *Impl, e o serviço cuida das demais preocupações como cache, etc. É extremamente recomendado utilizá-lo, principalmente quando o portal encontra-se em um ambiente clusterizado, pois o desenvolvedor não precisará implementar e configurar tudo o que for necessário para que as informações sejam propagadas através do cluster, já que com o ServiceBuilder vc não precisa configurar nada por padrão, a não ser algum tunning ou outro.
Concordo que para algumas coisas dá um certo trabalho, como utilizar uma query customizada, o que por sinal vem melhorando a cada versão. Mas, temos o mesmo "problema" em qualquer ferramenta, pois sempre temos necessidades que não se encaixam como uma luva no framework, dando trabalho para customizar, como já tive com JPA, Hibernate, até mesmo puro JDBC.
Já desenvolvi vários portlets que usam ServiceBuilder, das mais variadas complexidades, e até agora tive um problema sério, muito sério que foi simplesmente perder todas as informações de uma determinada tabela.
Depois de um tempo, após recuperar o backup que fiz antes de atualizar o portlet, vi que na verdade foi uma falha minha onde não defini o tamanho da coluna corretamente.
Fora este caso, o service ainda não me deixou na mão, com relação a perder informações ao ponto de ter que desabilitar o auto update.
Até agora o que mais me deu trabalho foi fazer relacionamento entre as entidades, o que no início achava que deveria ser mais "prático".
É interessante dar uma olhada no log e procurar por problemas durante a alteração da estrutura através do service builder, pois o mesmo pode estar encontrando dificuldades em executar a rotina devido a outros fatores como permissão, etc.
Alguns casos talvez possam ser resolvidos dando uma estudada mais aprofundada neste serviço, pois é bem extenso.
Resumindo, não estou defendendo que o ServiceBuilder é a única opção... mas para um portlet é o mais recomendado, principalmente com relação a outras questões como infraestrutura (cache, cluster), etc.
Please sign in to flag this as inappropriate.