Clone este repositório em seu computador: https://github.com/thiagobdp/gerenciador-de-assembleias
Para utilizar o MySQL é necessário primeiro instalar o Visual Studio.
Versões mais recentes do Visual C++:
A versão utilizada neste projeto é o link abaixo:
MySQL Installer 8.0.25:
ou diretamente pelo link:
Sugestão de senha para root:
- mysql password: root
Abra o aplicativo MySQL 8.0 Command Line Client. Ao abrir será solicitada a senha de root fornecida no passo anterior.
Execute os seguintes comando no mysql prompt ( mysql> ):
1- Cria o novo banco
create database bd_gerenciador_assembleias;
2- Cria o novo usuário
create user 'pmanageruser'@'%' identified by 'pmanageruser';
3- Fornece todos privilégios para o novo usuário no novo banco de dados
grant all on bd_gerenciador_assembleias.* to 'pmanageruser'@'%';
As tabelas serão criadas neste banco de dados automaticamente pelo Hibernate quando a aplicação for inicializada.
O objetivo desta aplicação é gerenciar a votação de assembleias.
É possível consultar a documentação Swagger pelo link abaixo quando executando em localhost:
Para a correta execução da aplicação, é importante primeiro executar os passos da "Tarefa Bônus 2" para instalar o Apache Kafka e deixá-lo executando em terminais windows.
Criei o projeto git abaixo para servir como sistema externo para integração
O serviço está disponível na URL
E a documentação Swagger está disponível na URL
Ao realizar o voto, a aplicação validará nessa API externa se o CPF informado é válido. Caso seja valido, retornará permitindo o voto. Caso seja inválido, retornará erro.
Para evitar o problema no Kafka de OutOfMemory, é necessário instalar a versão 64bits do Java disponível nos dois links abaixo. Essa aplicação foi testado no OS Windows 10
- https://www.java.com/pt-BR/download/manual.jsp
- https://javadl.oracle.com/webapps/download/AutoDL?BundleId=244584_d7fc238d0cbf4b0dac67be84580cfb4b
Definir variável de ambiente JAVA_HOME
- No windows, em "Propriedades do Sistema" clicar em "Variáveis de Ambiente"
- Definir a variável para a nova instalação da JRE 64bits
- Nome da variável:
JAVA_HOME
- Valor da variável:
C:\Program Files\Java\jre1.8.0_291
-> Neste caso substitua pelo diretório em que seu java 64bits está instalado
Baixar a versão do link abaixo
Descompactar no diretório "C:/". Se utilizar outro diretório, na hora de executar, o windows pode reclamar que o caminho é muito longo para executar.
O programa 7zip realiza realiza o descompactamento
Ao descompactar, irá gerar um arquivo chamado "kafka_2.13-2.8.0.tar". Também é necessário descompatar esse arquivo utilizando o 7zip.
O resultado final será um diretório chamado "kafka_2.13-2.8.0"
Antes de iniciar o Kafka, é necessário iniciar o Zookeeper
- abrir prompt de comando do Windows (cmd)
- executar o comando:
cd C:\kafka_2.13-2.8.0
- executar o comando:
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
- Se ocorrer o erro
'Error: missing server' JVM at C:\Program Files (x86)\Java\jre1.8.0_291\bin\server\jvm.dll'. Please install or use the JRE or JDK that contains these missing components.
Executar o passo 5, se não, pular para o passo 9 - Via Explorador de Arquivos (Windows Explorer) navegar até o diretório "C:\Program Files (x86)\Java\jre1.8.0_291\bin"
- Criar um diretório vazio chamado "server"
- Copiar todo o conteúdo do diretório "client" para o novo diretório "server". Atenção para copiar somente o conteúdo do diretório "client". O próprio diretório "client" não deve ser copiado, somente seu conteúdo.
- Executar novamente o passo 3.
- Se o Zookeeper foi iniciado com sucesso, uma das linhas exibidas no terminal será:
INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)
- Não fechar (apenas minimizar) este terminal pois o Zookeeper ficará sendo executado nele.
- Abrir novo prompt de comando do Windows (cmd)
- executar o comando:
cd C:\kafka_2.13-2.8.0
- executar o comando:
bin\windows\kafka-server-start.bat config\server.properties
- Se o Kafka foi iniciado com sucesso pela primeira vez, uma das linhas exibidas no terminal será:
INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
- Por padrão o kafka é executado na porta 9092
Será criado um tópico via terminal pois a aplicação será responsável somente por enviar a mensagem.
- Abrir prompt de comando do Windows (cmd)
- Executar o comando:
cd C:\kafka_2.13-2.8.0
- Executar o comando:
bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic NOVO_RESULTADO_VOTACAO
- Se o topico for criado com sucesso, aparecerá a mensagem:
Created topic NOVO_RESULTADO_VOTACAO.
- Para listar os tópicos, executar o comando
bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
Para facilitar o desenvolvimento, o consumidor das mensagens enviadas pela aplicação "Gerenciador de Assembleias para Votação" para o tópico criado no item acima, será o terminal do windows.
- Abrir prompt de comando do Windows (cmd)
- Executar o comando:
cd C:\kafka_2.13-2.8.0
- Executar o comando:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic NOVO_RESULTADO_VOTACAO --from-beginning
- Com o comando acima, o consumidor exibirá todas as mensagem que já foram enviadas e ficará ouvindo por novas mensagens
- Sempre que uma sessão de votação fechar, será enviada a mensagem para o kafka e será exibida neste terminal pelo consumidor
A mensagem é enviada quando o sistema identifica que a sessão passou do prazo.
Para fins de simplificação, a validação do prazo é realizada quando alguma operação é feita na pauta, ou seja, quando algum dos serviços abaixo são executados:
- /pauta/{id}
- /voto/votar
Desta forma, após abrir a sessão, para que a mesagem seja enviada, é necessário executar algum dos serviços acima após passar o horário da sessão.
Foram criados testes automatizados para todos Controller, tendo:
- PautaController - 100% de cobertura
- VotoController - 87,2% de cobertura
Resultando no total de cobertura de teste do sistema em 85,9%.
Utilize Manven Test para executar todos teste juntos. No Eclipse IDE, clique com o botão direito do mouse "pom.xml" -> "Run as" -> "Maven test".
Os testes utilizam o profile "test", e as operações são executadas no banco de dados em memória H2 e não no MySQL, assim isola os testes dos dados reais da aplicação.