3efd6e2435d3e9a230150c33e983def7a42bc07b
[so.git] / common / src / main / java / org / openecomp / mso / db / AbstractSessionFactoryManager.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * OPENECOMP - MSO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.mso.db;
22
23 import org.hibernate.cfg.Configuration;
24 import org.hibernate.SessionFactory;
25 import org.hibernate.service.ServiceRegistry;
26 import org.openecomp.mso.properties.MsoDatabaseException;
27 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
28 import java.net.URL;
29 import java.util.Map;
30 import java.util.concurrent.ConcurrentHashMap;
31
32 public abstract class AbstractSessionFactoryManager {
33
34     protected static Map<String, SessionFactory> sessionFactories = new ConcurrentHashMap<String, SessionFactory>();
35
36     protected synchronized SessionFactory initializeSessionFactory(URL hibernateConfigFile)
37             throws MsoDatabaseException {
38         try {
39             if (hibernateConfigFile != null) {
40                 SessionFactory tempFactory = sessionFactories.get(hibernateConfigFile.getPath());
41                 // Already initialized, skip
42                 if (tempFactory != null) {
43                     return tempFactory;
44                 }
45
46                 Configuration conf = new Configuration().configure(hibernateConfigFile);
47                 ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
48                 tempFactory = conf.buildSessionFactory(sr);
49                 if (tempFactory == null) {
50                     throw new MsoDatabaseException(
51                             "SessionFactory can't be initialized, method buildSessionFactory returned null !");
52                 }
53                 sessionFactories.put(hibernateConfigFile.getPath(), tempFactory);
54                 return tempFactory;
55             } else {
56                 throw new MsoDatabaseException(
57                         "HibernateConfigFile provided is null, therefore Hibernate can't be initialized !");
58             }
59         } catch (Exception e) {
60             throw new MsoDatabaseException("Exception occurred during the SessionFactory Build", e);
61         }
62     }
63
64     public SessionFactory getSessionFactory() throws MsoDatabaseException {
65         URL hibernateConfigFile = getHibernateConfigFile();
66         SessionFactory factory = sessionFactories.get(hibernateConfigFile.getPath());
67         if (factory == null) {
68             factory = initializeSessionFactory(hibernateConfigFile);
69         }
70         return factory;
71     }
72
73     protected abstract URL getHibernateConfigFile();
74 }