Oi Franklin,
interessante suas colocações. Mas aí entra o seguinte:
* Se você pegou um sistema mal escrito em Grails, não pode generalizar dizendo que são todos assim. O mesmo poderia ser dito de qualquer linguagem, incluindo Java. Se quiser dar uma olhada em projetos melhor escritos, sugiro que dê uma busca nos open source, como por exemplo o Asgaard da Netflix, que é feito em Grails e usado para configurar as instâncias e deploy de aplicações daquela empresa. Ou então, um dia, quem sabe, o próprio código fonte do Grails Brasil que pretendo abrir em breve, ou mesmo os exemplos citados pelo Mussatto, que trabalha com projetos *realmente* grandes sem nenhum problema. Neste caso, a generalização não está acrescentando nada.
* Ainda sobre configurações, bem observado, você pode usar os arquétipos do Maven sem problema. E até aonde sei, uma coisa não exclui a outra, certo? São apenas opções para um mesmo problema.
* Com relação a dizer que todos os plugins são sem bugs. Nenhuma peça de software é, você deveria saber disto, e mesmíssima coisa você pode dizer de qualquer biblioteca Java. Basta olhar que raríssimas vezes você vai encontrar uma versão x.x.0 que dure muito tempo, sempre rola uma x.x.y com y bem maior que 3,4, certo? Então: novamente, argumentação injusta contra Grails ou qualquer linguagem. Aliás, aqui, novamente, não entendi o seu ponto no que diz respeito à configuração, mas eu respondo logo abaixo.
* Os plugins facilitam ainda mais a integração de bibliotecas Java em um projeto Grails, porque o autor do plugin já fez esta integração para você. Quando lidamos com Java diretamente, sabemos que nem sempre é assim quando queremos adicionar uma nova tecnologia ao projeto (na realidade, quase nunca é assim). Sendo assim, é uma solução interessante para este problema, e não um problema como você mesmo menciona.
* Com relação a trabalhar com JDBC direto. Fácil: basta acessar o próprio dataSource que já está configurado no Grails. Assim ó:
class ServicoService {
def dataSource
def metodo() {
def conexao = dataSource.getConnection() // igual no Java
}
}
ou, se quiser usar o mesmo contexto transacional da sua classe de serviço, tal como no exemplo abaixo:
class ServicoService {
// injeta o session factory
def sessionFactory
def metodo {
def conexao = sessionFactory.currentSession.connection()
}
}
(só dar uma lida na documentação ou mesmo fazer uma busca básica no Grails Brasil ;) )
* Com relação à IDE: isto você sempre vai ter com qualquer linguagem dinâmica, mas há opções, como por exemplo o excelente JetBrains IDEA que supre este problema 120%.
* Com relação à integração dos componentes. Esta é a vantagem de qualquer framework fullstack. Ele já vêm com os componentes mais comuns relacionados a determinado nicho (pequeno ou grande) do mercado pré-configurados para que o programador não perca tempo. Há alternativas do lado Java também, se fizer seu "para casa" vai encontrar fácil.
* Com relação a métodos privados: dê uma estudada na linguagem primeiro e, antes disto, procure entender quais os problemas que ela soluciona e por que foi criada. Assim fica bem mais fácil.
E pra finalizar...
É muito comum este comportamento de rotular como ruim algo que não conhecemos talvez por estarmos acomodados com um modo de trabalho anterior. Minha sugestão profissional para você é dar uma estudada direito antes de tomar este tipo de atitude. Isto vai aumentar sua moral profissional e, quem sabe, até mesmo te ajudar a passar uma impressão mais madura (o que infelizmente não vi nos seus argumentos até agora).