diff --git a/src/main/java/com/soap/util/HibernateUtil.java b/src/main/java/com/soap/util/HibernateUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..624c3374aed026a7867ff977af8a99cb16a7b6b9 --- /dev/null +++ b/src/main/java/com/soap/util/HibernateUtil.java @@ -0,0 +1,68 @@ +package com.soap.util; + +import java.io.File; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.w3c.dom.Document; + +import io.github.cdimascio.dotenv.Dotenv; + +public class HibernateUtil { + private static final String CONFIG_FILE_TEMPLATE = "/hibernate.cfg.template.xml"; + private static final String CONFIG_FILE = "/hibernate.cfg.xml"; + private static SessionFactory sessionFactory = buildSessionFactory(); + + private static SessionFactory buildSessionFactory() { + try { + Configuration conf = new Configuration().configure(makeConfigFile()); + return conf.buildSessionFactory(); + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + } + + private static String makeConfigFile() { + try { + File file = new File(CONFIG_FILE); + if (file.exists()) return CONFIG_FILE; + + // Load .env + Dotenv dotenv = Dotenv.load(); + + // Load XML file + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.parse(CONFIG_FILE_TEMPLATE); + + // Set the variables + doc.getElementsByTagName("property").item(0).setTextContent(dotenv.get("DB_HOST")); + doc.getElementsByTagName("property").item(1).setTextContent( + "jdbc:mysql://localhost:3306/" + dotenv.get("DB_NAME") + ); + doc.getElementsByTagName("property").item(2).setTextContent(dotenv.get("DB_USER")); + doc.getElementsByTagName("property").item(3).setTextContent(dotenv.get("DB_PASS")); + + // Save the file + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.transform(new DOMSource(doc), new StreamResult(CONFIG_FILE)); + + return CONFIG_FILE; + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + } + + public static SessionFactory getSessionFactory() { + return sessionFactory; + } + +} diff --git a/src/main/java/com/soap/util/hibernate.cfg.template.xml b/src/main/java/com/soap/util/hibernate.cfg.template.xml new file mode 100644 index 0000000000000000000000000000000000000000..07b3a3a32805c0e84871ace7e44c5874e55316ca --- /dev/null +++ b/src/main/java/com/soap/util/hibernate.cfg.template.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> +<hibernate-configuration> + <session-factory> + <!-- Database connection settings --> + <property name="hibernate.connection.driver_class"></property> + <property name="hibernate.connection.url"></property> + <property name="hibernate.connection.username"></property> + <property name="hibernate.connection.password"></property> + + <!-- Dialect for your database --> + <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> + + <!-- Enable Hibernate's automatic session context management --> + <property name="hibernate.current_session_context_class">thread</property> + + <!-- Echo all executed SQL to stdout --> + <property name="hibernate.show_sql">true</property> + + <!-- Mapping file or annotated class --> + <!-- Add your entity classes or mapping files here --> + + </session-factory> +</hibernate-configuration>