1 /***
2 * @(#)SessionFactoryServiceImpl.java
3 *
4 * JFoxSOAF, Service-Oriented Application Framework
5 *
6 * Copyright(c) JFoxSOAF Team
7 *
8 * Licensed under the GNU LGPL, Version 2.1 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.gnu.org/copyleft/lesser.html
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 *
20 * For more information, please visit:
21 * http://sourceforge.net/projects/jfox
22 */
23
24 package org.huihoo.jfox.soaf.services.persistence;
25
26 import java.io.IOException;
27 import java.util.HashMap;
28 import java.util.Iterator;
29 import java.util.Properties;
30 import java.util.Set;
31
32 import net.sf.hibernate.HibernateException;
33 import net.sf.hibernate.SessionFactory;
34 import net.sf.hibernate.cfg.Configuration;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38 import org.huihoo.jfox.soaf.util.resource.ResourceHelper;
39 import org.picocontainer.Startable;
40
41 /***
42 * <p>
43 * SessionFactory Service Implementation
44 * </p>
45 *
46 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
47 * @version $Revision:$ $Date:$
48 * @version Revision: 1.0
49 */
50
51 public class SessionFactoryServiceImpl implements SessionFactoryService,
52 Startable {
53
54 private final Log logger = LogFactory.getLog(getClass());
55
56 private static String HIBERNATE_MULTI_CONFIG = "hibernate-multi.properties";
57
58 private static String HIBERNATE_DEFAULT_CONFIG = "hibernate.default";
59
60 private Properties props;
61
62 private HashMap hashMap = new HashMap();
63
64 /***
65 * @see org.huihoo.jfox.soaf.services.persistence.SessionFactoryService#getSessionFactory(java.lang.String)
66 */
67 public SessionFactory getSessionFactory(String key) {
68 if (key == null) {
69 return (SessionFactory) hashMap.get(HIBERNATE_DEFAULT_CONFIG);
70 } else {
71 return (SessionFactory) hashMap.get(key);
72 }
73 }
74
75 /***
76 * @see org.picocontainer.Startable#start()
77 */
78 public void start() {
79 loadConfig();
80 }
81
82 /***
83 * Load configuation.
84 */
85 private void loadConfig() {
86 try {
87 props = ResourceHelper
88 .getResourceAsProperties(HIBERNATE_MULTI_CONFIG);
89 int propsSize = props.size();
90 Set set = props.keySet();
91 Iterator iter = set.iterator();
92 while (iter.hasNext()) {
93 String key = (String) iter.next();
94 String value = props.getProperty(key);
95 buildFactory(key, value);
96 }
97 } catch (Exception e) {
98 logger.error("Hibernate multi configuration initialization failed ", e);
99 }
100 }
101
102 /***
103 * @param key
104 * @param value
105 * @throws HibernateException
106 */
107 private void buildFactory(String key, String value)
108 throws HibernateException, IOException {
109 Configuration config = new Configuration();
110 config.configure(ResourceHelper.getResourceURL(value));
111 SessionFactory sessionFactory = config.buildSessionFactory();
112 hashMap.put(key, sessionFactory);
113 }
114
115 /***
116 * @see org.picocontainer.Startable#stop()
117 */
118 public void stop() {
119 }
120 }