Este repositório GitHub apresenta um projeto de exemplo abrangente que demonstra a construção de uma aplicação Java EE robusta utilizando Jakarta EE 10 em conjunto com containers Docker. A aplicação é composta por:
- Servidor de Aplicação: WildFly, um servidor de aplicação Jakarta EE de alto desempenho, gerenciado em um contêiner Docker.
- Banco de Dados: MySQL 8, um sistema de gerenciamento de banco de dados relacional popular, também executado em seu próprio contêiner Docker.
- API REST: Uma API RESTful desenvolvida com Jakarta EE para fornecer acesso remoto às funcionalidades do negócio da aplicação. Tecnologias Empregadas
O projeto é estruturado com as seguintes tecnologias:
- Jakarta EE 10: A plataforma de desenvolvimento Java para aplicações enterprise, oferecendo recursos avançados como CDI, JPA, EJB e JAX-RS.
- WildFly: Um servidor de aplicação Jakarta EE leve e modular, ideal para ambientes de produção e desenvolvimento.
- MySQL 8: Um SGBD relacional confiável e escalável, com suporte a diversas funcionalidades e alto desempenho.
- Docker: Uma plataforma de containerização que simplifica a implantação e o gerenciamento de aplicações em ambientes distribuídos.
- Maven: Uma ferramenta de gerenciamento de projeto e construção que facilita o desenvolvimento e a entrega de aplicações Java.
O projeto oferece diversas funcionalidades:
- Acesso a Dados: A API REST permite consultar, inserir, atualizar e excluir dados no banco de dados MySQL 8 de forma segura e eficiente.
- Autenticação e Autorização: A aplicação implementa mecanismos de autenticação e autorização para garantir o acesso controlado aos recursos.
- Validação de Dados: A API valida os dados recebidos nas requisições para garantir a integridade e confiabilidade das informações.
- Gerenciamento de Erros: A aplicação manipula erros de forma robusta, fornecendo mensagens de erro descritivas para facilitar a depuração.
- Documentação: A API REST é documentada com Swagger, permitindo que os desenvolvedores explorem e integrem facilmente os recursos da aplicação.
--docker
|
--Dockerfile
/**
* contem informações relacionadas ao usuario e password para acessar a
* aplicação bean remota.
*/
--application-user.properties
/**
* tem dados para levantar os containers necessários para funcionamento
* da aplicação, nesse caso especifico são dois um com wildfly e outro
* com banco de dados mysql.
*/
--docker-composer.yml
/**
* é referenciado pelo docker-compose para criação das tabelas no banco
* de dados.
*/
--init.sql
/**
* é responsavel por carregar o modulo mysql-coonector-java-8.1.0.jar no
* servidor wildfly
*/
--module.xml
--mysql-coonector-java-8.1.0.jar
// são as configurações do wildfly.
--standalone.xml
<dependencies>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>10.0.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.immutables</groupId>
<artifactId>value</artifactId>
<version>2.10.1</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.5</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.5</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.5</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>6.2.4</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>6.2.5</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-dmr</artifactId>
<version>1.7.0.Final</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.wildfly.core</groupId>
<artifactId>wildfly-controller-client</artifactId>
<version>25.0.0.Beta4</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.eclipse.microprofile.jwt</groupId>
<artifactId>microprofile-jwt-auth-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.microprofile.config</groupId>
<artifactId>microprofile-config-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<!-- Logging for your Application -->
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.11.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.12.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.5.2.Final</version>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.7.3</version>
<scope>test</scope>
</dependency>
<!-- Test Cucumber -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.18.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.18.1</version>
<scope>test</scope>
</dependency>
<!-- Test JUnit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- Outras dependências -->
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>wildfly-microprofile</artifactId>
<version>32.0.1.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- Um simples inicio
execute start.sh no linux.
#!/bin/bash
mvn clean package
cd $HOME/NetBeansProjects/Biblioteca/docker
yes | sudo rm -R db
yes | cp $HOME/NetBeansProjects/Biblioteca/target/biblioteca-1.0-SNAPSHOT.war $HOME/NetBeansProjects/Biblioteca/docker
docker-compose down --rmi all
docker build --build-arg jdk=22 --tag=jboss/wildfly-admin .
docker-compose up --remove-orphans