Ainda estamos no começo de 2016 para revisitar a previsão feita no último ano. De volta a dezembro, Steve Millidge do C2B2, previu que 2016 seria o ano dos microservices Java EE. Até certo ponto isto foi baseado na apresentação do Steve no JavaOne, onde precisamente foi falado sobre esse tópico. Além disso Steve é co-fundador do Payara, que está focado em desenvolvedores Java EE interessados em microservices, algo que ouvimos e relatamos antes. Como mencionado no video:
"Microservices não são diferentes de SOA. Ainda são SOA".
Agora, claro, há o argumento de que, devido à sua experiência e foco atual, Steve pode achar que é difícil ser objetivo. Entretanto, em 2014 quando os microservices ainda estavam relativamente em sua infância, Adam Bien escreveu sobre como construir um microservice JEE perfeito:
Um microservice JEE perfeito é simplesmente [Entity Control Boundary] um componente dentro de um WAR, publicado em um único servidor. Onde é possível publicar componentes individuais (conhecidos como microservices) várias vezes, independentemente. Invocar diretamente métodos entre WARS não é possível, logo os WARS são forçados a usar por exemplo JAX-RS, para se comunicarem.
No ano passado entrevistamos Markus Eisele sobre microservices, DevOps e Java EE, onde discutimos sobre a crença no Java EE ter um papel importante a desempenhar na evolução dos microservices, e sobre uma série de outras abordagens para escrever microservices com o Java EE, incluindo o TomEE e WildFly-Swarm. Um dos ganhadores do Duke's Choice Award no JavaOne 2015 foi o KumuluzEE, um framework para microservices Java EE, como explicou o co-fundador Matjaz Juric:
O KumuluzEE é o primeiro framework para microservices usando APIs padrão do Java. Uma arquitetura orientada a microservices com foco no desenvolvimento de aplicações em serviços que permite publicá-los independentemente. Uma arquitetura verdadeiramente orientada a microservices não é possível no Java EE sem um framework que automatiza as configurações e publicação.
É interessante analisar alguns outros exemplos onde pessoas estão procurando microservices e Java EE porque alguns não estão estritamente dentro dos domínios do tradicional Java EE. Por exemplo, de volta à 2014, Alex Soto discutiu como o Java EE e o RxJava eram uma excelente abordagem. Entretanto, nem todos estão convencidos que usar o Java EE permite aos desenvolvedores adotar os microservices. Como Rick Hightower disse:
Se está sendo publicado um arquivo WAR dentro de um container Java EE, então provavelmente o desenvolvimento do microservice não está correto. Se o container tem mais de um arquivo WAR ou EAR, então definitivamente não se está desenvolvendo um microservice. Se o serviço está sendo publicado como uma AMI ou container docker e o microservice tem um método principal, então é possível que este seja um microservice.
E Rick também não acredita que os microservices são o mesmo que o SOA:
De fato, isto é o oposto de diversas maneiras. O SOA, por exemplo, adota o WSDL que é uma maneira de definir um endpoint fortemente tipado e rígido de um serviço. WSDL e XML schema leva todo o X de XML.
Claro que discutimos várias vezes como o SOA e Web Services não estão relacionados. Entretanto, Rick e outros acreditam que o Java EE é muito inchado ou muito difícil de manejar para ser a base para a construção de microservices. Jeppe Cramon acredita que existam mais aspectos fundamentais que faz com o que o Java EE seja uma base pobre:
Se usarmos (síncrono) uma comunicação de duas vias com pequenos/micro serviços, modelados de acordo com, por exemplo, a regra 1 classe = 1 serviço, estamos voltando aos anos 90 com o Corba e o J2EE e distribuindo objetos. Infelizmente, parece que a nova geração de desenvolvedores, que não tiveram experiência com objetos distribuídos e, entretanto, não sabem como essa ideia foi ruim, estão tentando repetir a história. Desta vez com novas tecnologias, tais como o HTTP ao invés do RMI ou IIOP.
Agora se os microservices e o SOA estão intimamente relacionados, talvez exista também argumentos de que os microservices podem ser abordados de uma forma agnóstica à tecnologia, como alguns fizeram com SOA. O que você acha? 2016 pode ser o ano dos microservices e Java EE? Qual o papel, se aplicável, que o Java EE tem em relação aos microservices?