Questão nº 60
Questão de Tecnologia da Informação · FGV TCE-SP 2023 (nº 60)
O analista Jacó implementou a aplicação TCERestAPI utilizando Java com Spring Boot. A TCERestAPI é apta para o deploy em servidores de aplicação Java preexistentes, mas também suporta a execução standalone do Spring Boot.
Para viabilizar ambas as formas de execução da TCERestAPI, Jacó precisou modificar a classe principal da aplicação, fazendo com que ela estendesse diretamente determinada classe do Spring Boot.
Jacó fez com que a classe principal da TCERestAPI estendesse a classe do Spring Boot:
- ASpringBootStarterTomcat;
- BSpringBootServletInitializer; (alternativa correta)
- CSpringBootStarterUndertow;
- DServletContextInitializerBeans;
- ESpringServletContainerInitializer.
Resposta comentada
Gabarito Alternativa B
Para que uma aplicação Spring Boot possa ser executada tanto com seu servidor embutido (standalone) quanto implantada como um arquivo WAR em um servidor de aplicação Java tradicional (como Tomcat), sua classe principal precisa estender uma classe específica que a adapta ao ciclo de vida de um contêiner de servlets.
- (A) Incorreta:
SpringBootStarterTomcaté uma dependência (starter) que inclui o servidor Tomcat embarcado, não uma classe para estender para deploy em servidores externos. É o distrator mais tentador porque menciona "Tomcat", que é um servidor de aplicação Java, mas seu propósito é para o servidor embutido, não para adaptar a aplicação a um servidor externo preexistente via WAR. A armadilha é confundir a inclusão de um servidor embarcado com a adaptação para um servidor externo. - (B) Correta:
SpringBootServletInitializeré a classe que a aplicação Spring Boot deve estender para ser configurada como um arquivo WAR e implantada em um contêiner de servlets externo (servidor de aplicação Java preexistente), mantendo a capacidade de execução standalone. - (C) Incorreta:
SpringBootStarterUndertowé uma dependência (starter) que inclui o servidor Undertow embarcado, não uma classe para estender para deploy em servidores externos. - (D) Incorreta:
ServletContextInitializerBeansé uma classe interna do Spring Boot usada para gerenciar inicializadores de contexto de servlet, não uma classe que a aplicação principal estenderia. - (E) Incorreta:
SpringServletContainerInitializeré uma implementação do Spring para a interfaceServletContainerInitializerdo Servlet API, usada para inicialização programática, mas não é a classe que a aplicação Spring Boot estende diretamente para o deploy de WAR.SpringBootServletInitializeré a abstração correta para este caso.
Fonte: FGV TCE-SP 2023 Agente da Fiscalização - TI (Caderno Tipo 1). Reproduzida para fins de estudo.