Hotswap e alternativas?

15

Desde os primeiros dias da minha vida universitária, uso Java e o maior problema que temos é absolutamente menos produtivo do que outras linguagens interpretadas. Todas as pessoas têm certeza de que o java é uma das melhores linguagens compiladas.

No entanto, nem a Sun nem a Oracle se esforçaram o suficiente para resolver esse problema. Um dos problemas é, obviamente, o recarregamento de classes.

As últimas tentativas da comunidade para resolver este problema são o projeto DaVinci Hotswap , JRebel , PlayFramework . No entanto, no momento da redação deste texto, eles ainda não eram maduros (imo) e nativos. Alguns deles não estão prontos para a empresa, outros não são compatíveis com todos os IDEs, alguns deles são projetos universais imaturos. O roteiro e até o Java pronto para o desenvolvedor estão prontos, mas a comunidade Java ainda não possui uma solução para o recarregamento imediato da classe.

É tão difícil para a Oracle envidar esforços para resolver esse problema? Por que o recarregamento de classe ainda não foi implementado nativamente?

Ozgur
fonte
2
Na verdade, o JRebel está completamente pronto para empresas e possui um bom suporte a IDE, embora não seja gratuito.
CarlosZ
@CarlosZ Really? Eu usei o IntelliJ IDEA com o JRebel da primeira versão beta à série 3.x. Em vez de "isto", você deve usar "aquilo". No fórum de cada versão, você verá muitos problemas relacionados ao plugin intelliJ. Mas a pior experiência foi a depuração de problemas. O depurador pode se conectar muito tarde. E tivemos problemas tremendos. Como usuário do intellJ, tenho uma experiência concreta em relação ao JRebel no IDEA. E, claro, pagar dinheiro também é outra questão.
@CarlosZ É realmente uma pergunta, estou curioso para saber por que é difícil implementar o recarregamento de classe em java nativamente.

Respostas:

4

E o JEE / J2EE? Este foi lançado pela primeira vez há 12 anos. Isso é suportado diretamente pela Sun / Oracle e por muitos outros fornecedores.

Que tal e OSGi? Seu primeiro lançamento foi há quase 11 anos. O Eclipse (um IDE) é construído sobre ele, o Glassfish da Sun / Oracle e o Apache Felix o usam extensivamente. Você pode usá-lo com o Spring-OSGi.

Ele não é suportado nativamente no Java SE porque os aplicativos corporativos foram deliberadamente suportados pelos servidores de aplicativos como produtos separados.

Peter Lawrey
fonte
@ Peter Lawrey 1) Lawrey Em relação ao J2EE, existe uma solução concreta? Eu não conseguia entender o seu ponto? 2) Para recarregar as aulas, você acha que o OSGI deve ser usado? E o Jigsaw? Mesmo no nível do JCR, ainda não há um consenso :). O OSGI está abordando uma área muito diferente da recarga de classe. 3) Não consegui entender a parte do JavaSE, você poderia explicar um pouco mais? E observe que o projeto DaVinci HotSwap é patrocinado pela Oracle. Significa que, pelo menos para mim, eles também estão ansiosos por essa solução.
Depende do que você espera que o hot swap faça. Se você deseja troca a quente para depuração, é possível fazer isso há algum tempo. No entanto, para soluções corporativas robustas, a troca a quente dessa natureza não é apropriada e apenas liberações controladas são. Nesse caso, o JEE e o OSGi permitem atualizar os aplicativos em execução que têm praticamente o mesmo benefício, mas com o controle que você esperaria de um ambiente de produção. Por exemplo, no meu contêiner OSGi, posso remover classes e substituí-las por versões mais novas sem interromper o aplicativo. O que você precisa que OSGi não faz?
27411 Peter Lawrey
1) A implementação de referência JEE / J2EE pode ser um ponto de partida, mas existem muitos mais populares e fáceis de usar JEE. Meu argumento é que você pode substituir o código em um sistema em execução. O que mais você precisa em um ambiente controlado / de produção.
Peter Lawrey
1
2) Recarregar classes é a única coisa para a qual uso o OSGi. O que você vê como o principal uso do OSGi?
26511 Peter Lawrey
3) O ponto principal do JEE é que este é o espaço para suporte de aplicativos corporativos. JSE é a plataforma subjacente que pode ser usada para JEE ou outros aplicativos.
26511 Peter Lawrey
2

Tente isto: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Existem vários problemas complexos envolvidos. Na verdade, não estou ciente de nenhuma solução disponível (para Java ou não) que faça alterações estruturais em entidades com estado. Linguagens dinâmicas como Ruby ou PHP realmente não fazem isso, não tenho certeza sobre Erlang, mas acho que também perderá o estado.

Jevgeni Kabanov
fonte