/Biblioteca

Biblioteca with JakarkaEE

Primary LanguageJavaMIT LicenseMIT

Projeto Biblioteca
JakartaEE 10


github github Release Date

Introdução

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.

Funcionalidades Chave

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

Requisitos/Opcionais

docker docker-compose maven netbeans openjdk/jdk junit5

Depedencias maven

       <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

Referências

https://shields.io/badges/libraries-io-dependency-status-for-git-hub-repo

https://gitmoji.dev/