[LIB-9] Environment and persistence functionality
authorgotty <gotty@hedgecode.org>
Thu, 20 Dec 2018 16:01:09 +0000 (19:01 +0300)
committergotty <gotty@hedgecode.org>
Thu, 20 Dec 2018 16:01:09 +0000 (19:01 +0300)
chesshog-db-etude/src/main/java/org/hedgecode/chess/EtudeConstants.java [new file with mode: 0644]
chesshog-db-etude/src/main/java/org/hedgecode/chess/EtudeUtils.java [moved from chesshog-db-etude/src/main/java/org/hedgecode/chess/service/EtudeUtils.java with 98% similarity]
chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/Environment.java [new file with mode: 0644]
chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/EnvironmentSetter.java [new file with mode: 0644]
chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/EnvPersistenceManager.java [new file with mode: 0644]
chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceManager.java [new file with mode: 0644]
chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceUtils.java [new file with mode: 0644]
chesshog-db-etude/src/main/resources/META-INF/persistence.xml

diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/EtudeConstants.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/EtudeConstants.java
new file mode 100644 (file)
index 0000000..81570ab
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess;
+
+/**
+ *
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public final class EtudeConstants {
+
+    public static final String SERVICE_BUNDLE_FILE = "org.hedgecode.chess.service.LocalStrings";
+
+    public static final String PERSISTENCE_UNIT_NAME = "db-etude-persistence-unit";
+
+    private EtudeConstants() {
+        throw new AssertionError(
+                "No org.hedgecode.chess.EtudeConstants instances!"
+        );
+    }
+
+}
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.hedgecode.chess.service;
+package org.hedgecode.chess;
 
 import java.math.BigInteger;
 import java.util.Arrays;
@@ -165,7 +165,7 @@ public final class EtudeUtils {
 
     private EtudeUtils() {
         throw new AssertionError(
-                "No org.hedgecode.chess.service.EtudeUtils instances!"
+                "No org.hedgecode.chess.EtudeUtils instances!"
         );
     }
 
diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/Environment.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/Environment.java
new file mode 100644 (file)
index 0000000..544b8b1
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.environment;
+
+import java.util.Locale;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.hedgecode.chess.persistence.PersistenceUtils;
+
+/**
+ * Environment execution context.
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public final class Environment {
+
+    private final Locale locale;
+    private final EntityManager entityManager;
+
+    public Environment(
+            Locale locale,
+            EntityManager entityManager) {
+        this.locale = locale;
+        this.entityManager = entityManager;
+    }
+
+    public Locale getLocale() {
+        return locale;
+    }
+
+    public EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    public static Environment init() {
+        EntityManagerFactory entityManagerFactory = PersistenceUtils.createEntityManagerFactory();
+        EnvironmentSetter.setCurrentContext(
+                new Environment(
+                        Locale.getDefault(),
+                        entityManagerFactory.createEntityManager()
+                )
+        );
+        return Environment.currentContext();
+    }
+
+    static final ThreadLocal<Environment> contextHolder = new ThreadLocal<>();
+
+    public static Environment currentContext() {
+        return contextHolder.get();
+    }
+
+}
diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/EnvironmentSetter.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/environment/EnvironmentSetter.java
new file mode 100644 (file)
index 0000000..f0648d7
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.environment;
+
+/**
+ * Environment execution context setter.
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public final class EnvironmentSetter {
+
+    public static void setCurrentContext(Environment environment) {
+        Environment.contextHolder.set(environment);
+    }
+
+    public static void resetCurrentContext() {
+        setCurrentContext(null);
+    }
+
+}
diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/EnvPersistenceManager.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/EnvPersistenceManager.java
new file mode 100644 (file)
index 0000000..2bc1814
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.persistence;
+
+import javax.persistence.EntityManager;
+
+import org.hedgecode.chess.environment.Environment;
+
+/**
+ * Environment Persistence Manager.
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public class EnvPersistenceManager implements PersistenceManager {
+
+    public EntityManager getEntityManager() {
+        return Environment.currentContext().getEntityManager();
+    }
+
+}
diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceManager.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceManager.java
new file mode 100644 (file)
index 0000000..63f6598
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.persistence;
+
+import javax.persistence.EntityManager;
+
+/**
+ * Persistence Manager interface.
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public interface PersistenceManager {
+
+    EntityManager getEntityManager();
+
+}
diff --git a/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceUtils.java b/chesshog-db-etude/src/main/java/org/hedgecode/chess/persistence/PersistenceUtils.java
new file mode 100644 (file)
index 0000000..5c49ea5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.persistence;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.hedgecode.chess.EtudeConstants;
+
+/**
+ *
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public final class PersistenceUtils {
+
+    public static EntityManagerFactory createEntityManagerFactory() {
+        return Persistence.createEntityManagerFactory(
+                EtudeConstants.PERSISTENCE_UNIT_NAME
+        );
+    }
+
+    private PersistenceUtils() {
+        throw new AssertionError(
+                "No org.hedgecode.chess.persistence.PersistenceUtils instances!"
+        );
+    }
+
+}
index 8d0db9d..08dabfa 100644 (file)
@@ -24,6 +24,8 @@
     <persistence-unit name="db-etude-persistence-unit" transaction-type="RESOURCE_LOCAL">
         <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 
+        <class>org.hedgecode.chess.domain.EtudeType</class>
+        <class>org.hedgecode.chess.domain.Author</class>
         <class>org.hedgecode.chess.domain.Etude</class>
 
         <properties>
@@ -31,7 +33,7 @@
             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/dbetude"/>
             <property name="hibernate.connection.username" value=""/>
             <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
             <property name="hibernate.hbm2ddl.auto" value="update"/>
         </properties>
     </persistence-unit>