Melhorias no Deploy do CRM Web
Configuração do Spring Framework
Alterado o escaneamento dos beans gerenciados pelo Spring, de forma que não seja realizado um escaneamento completo de todos os pacotes.
Configurado o servlet mobile-ws-servlet.xml para que utilize um contexto separado para o DispatcherServlet, conforme descrito na documentação: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html. Com a configuração anterior, estava levando cerca de 20s apenas para inicializar os servlets do mapeamento "/mobile/*" e após realizar a configuração correta inicializou em menos de 1s.
Retirado a configuração "com.urbanmania.spring.beans.factory.config.annotations.PropertyAnnotationAndPlaceholderConfigurer" pois já foi descontinuada e não é recomendado a utilização. Para guardar as propriedades do arquivo "application.properties", foi necessário mudar a implementação da classe br.com.viasoft.properties.ApplicationProperties.java.
Atualização de dependências gerenciadas pelo Maven
Atualizado os plugins de compilação do Maven para a última versão disponível.
Atualizado o Lombok para a versão 1.18.20.
As dependências Java EE com escopo "compile" foram removidas pois já são providenciadas pelo próprio GlassFish, atualmente o projeto importa o Java EE 7 Web Profile com escopo "provided". Dependências removidas: servlet-api (javax.servlet), jsf-api/jsf-impl (com.sun.faces), javax.ws.rs-api (javax.ws.rs).
Atualizado a dependência commons-lang3 para a versão 3.8.1.
Removido spring-property-annotations (com.urbanmania).
Removido sprockets (net.sf.sprockets), foi necessário alterar o import "net.sf.json.JSONObject" para "import com.google.gson.JsonObject" na classe PushNotificationHelper.
Removido xstream (com.thoughtworks.xstream).
Removido jsoup (org.jsoup).
Removido commons-collections (commons-collections).
Removido querydsl-jpa (com.mysema.querydsl).
Removido querydsl-core (com.querydsl).
Removido jackson-jaxrs (org.codehaus.jackson).
Removido joda-time (joda-time).
Removido jira-client (net.rcarz).
Removido reflections (org.reflections).
Removido jackson-core (com.fasterxml.jackson.core).
O tamanho do .war reduziu cerca de 10 MB após remover as dependências descritas acima, auxiliando no tempo de build da aplicação.
Configuração de Logs
Criado o arquivo de configuração do Log4J no diretório META-INF/log4j.properties e realizado integração com Spring e Hibernate.
Com este arquivo no classpath, temos acesso aos logs detalhados do Spring (INFO, DEBUG, TRACE etc): https://docs.spring.io/spring-framework/docs/4.2.8.RELEASE/spring-framework-reference/htmlsingle/#overview-logging-log4j
# Logs gerais da aplicação log4j.rootCategory=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n # Log da inicialização de beans do Spring log4j.category.org.springframework.beans.factory=INFO # Log da inicialização do Hibernate log4j.logger.org.hibernate=INFO # Log de consultas SQL #log4j.logger.org.hibernate.SQL=DEBUG #log4j.logger.org.hibernate.type.descriptor.sql=TRACE
Tempo de deploy
Após as mudanças, notou-se que o tempo médio de deploy ficou entre 45 segundos a 1 minuto em ambiente de produção.
Em ambiente de desenvolvimento, é possível realizar as seguintes configurações adicionais:
Alterar a configuração load-on-startup dos servlets para -1 no web.xml para não inicializar automaticamente durante o deploy.
Desabilitar a verificação de classes na JVM do GlassFish através das flags:
-Xverify:none, -XX:TieredStopAtLevel=1.Realizar o undeploy do Cotação Web no GlassFish para que não seja inicializado em ambiente de desenvolvimento.
Adicionar a configuração default-lazy-init="true" no topo da configuração de beans do Spring no arquivo applicationContext.xml e mobile-ws-servlet.xml para que não inicialize todos os beans durante o startup do Spring.