0
respostas

Como resolver o problema de conexão de uma base de dados em uma arquitetura distribuída?

Em um cenário de um monólito se tratando de uma aplicação Java utilizando JPA podemos utilizar uma classe para trabalhar com as instancias de uma classe de conexão, então podemos ter um arquivo de conexão persistence.xml

    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="banco">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>br.com.andremartds.model.Teste</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/estudo_jpa" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="docker" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>
</persistence>

Tenho uma classe responsável por gerenciar a fábrica de conexões, pensando sempre em deixar apenas uma conexão aberta para poupar recursos.

    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;

    public class JPAUtil {
      public static final EntityManagerFactory emf = 
             Persistence.createEntityManagerFactory("banco");

    public static EntityManager getEntityManager(){
        return emf.createEntityManager();
     }

    }

a responsabilidade dessa classe é ser apenas um provedor de conexões onde eu retornarei de forma constante a instancia de emf.createEntityManager(); e para ilustrar vou demonstrar em uma classe de teste:

       public class TesteMain {
       public static void main(String[] args) {

        EntityManager em = JPAUtil.getEntityManager();

        Teste teste  = new Teste();

        em.getTransaction().begin();
        teste.setNomeTeste("Teste Teste Teste");
        em.persist(teste);
        em.getTransaction().commit();
        em.close();
       }
     }

Apesar de explicar o problema fica a dúvida de como distribuir essa instancia através de uma aplicação em contêineres separados dentro da mesma rede?