Upgrade de Java 7 para.... 8 ? 10 ? 11 ?

Bom dia pessoal :grinning:

Atualmente trabalho em um sistema bem grande, que consiste em cerca de 5 projetos independentes.
Todos esses projetos hoje são java 7 e rodam em JBoss EAP 6.1, alguns são projetos web com JSF e outros apenas libs que são usadas como dependência ou projetos que disponibilizam serviços via webservice… tem até sistema em groovy 1.9, todos tem cerca de 10 anos de idade já.

Devido ao fim de suporte, precisamos atualizar o JBoss e nosso JDK.
Pensei em fazermos o update pra JDK 8 e Wildfly 8, porém apesar de Java 8 ser o padrão de mercado hoje, já é uma versão muito antiga com quase 5 anos, fora que java 11 já está ai e 12 tá no forno já.

Duvida:
Sei que qualquer upgrade será traumático, principalmente por causa das libs JFS como Richfaces que usamos. Vocês acham que eu deveria focar em upgrade pra JDK 8 ou ir direto pro JDK 10/11 ?

Eu particularmente estou mais inclinado a ir direto pro JDK 11, Wildfly 14 e ultima versão do Eclipse(ainda usamos Kepler).
O código em sí não terá grande mudanças, minha maior preocupação são todas as libs antigas que usamos: Richfaces, Joda, Tika, CXF, Guava, Groovy, HTTPClients, etc…

Alguém ai passou por algo parecido recentemente ? O que recomendam ?

cara em geral existe uma boa backward compatibility na JVM, então codigo antigo deve funcionar sem problemas

o que vc deveria investir é em uma suite de testes unitarios e uma suite de testes integrados para validar automaticamente a sua aplicação conforme vc atualiza a JVM e outras dependencias.

seria interessante ter uma suite de teste de performance para ver se alguma parte piorou e então investigar o motivo. Pode ser que nas novas versões vc tenha algo especifico que precise fazer ( desde configuração até codigo mesmo ) para obter uma performance similar ou melhor do que antes.

por exemplo, sua aplicação pode dependender de uma API que foi abandonada ou pode ser que alguma mudança no garbage collector precise de um ajuste fino nas suas configurações. lei de murphy.

o que talvez vc veja é: um bom numero de avisos por conta de codigo depreciado ou coisas q vc precisa adequar o codigo.

Isso precisa estar em uma estratégia. Existe um custo de X horas nisso e existe um risco de parar de funcionar. Para minimizar o risco vc vai ter q investir um bom X. para justificar esse X ( que não elimina o Risco ) vc talvez precise de melhores argumentos do que simplesmente 'puxa estamos usando java velho". E vice-versa: vc pode ter argumentos para não tocar em nada pq existe um grau insano de incerteza (que vc pode resolver em alguns dias de investigação).

ainda mais se parte do sistema for algo q ninguem sabe como funciona pq os funcionarios foram saindo e morrendo e a documentação foi feita nas coxas (se é que existe).

assim sendo, vc talvez tenha que fazer N testes com versões diferentes. A primeira vez vc atualiza tudo e isso pode funcionar como pode explodir ( parte boa é que se funciona vc tem um belo atalho nessa historia toda). se explodir vc vai precisar fazer combinações ate descobrir o que foi q deu xabu. e isso leva tempo. sem uma suite de testes automatizadas pra te ajudar vc vai ter q testar tudo manualmente e isso deixa o custo X alto. cada teste importante q vc automatize pode te ajudar a economizar tempo mas não substitui um bom QA.

eu nunca fiz esse upgrade que vc esta perguntando mas a menos que o seu sistema muito complexo, eu não imagino q vai ser muito traumatico. é mais uma questão de vc saber responder: esta funcionando? a performance piorou? preciso de mais RAM ou CPU? etc.

tudo depende do processo de desenvolvimento de software que vcs tem.

contudo eu posso estar errado. vamos ver o que os outros tem a dizer.