1 /*
2 * Copyright (c) 2003
3 * Information Desire GmbH
4 * All rights reserved.
5 */
6 package com.infodesire.infobit;
7
8 import java.util.Properties;
9 import java.util.Collection;
10
11 import net.sf.hibernate.HibernateException;
12 import net.sf.hibernate.MappingException;
13 import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
14 import net.sf.hibernate.cfg.Configuration;
15 import net.sf.hibernate.Session;
16 import net.sf.hibernate.SessionFactory;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20
21 import com.infodesire.infobit.security.SecurityProvider;
22 import com.infodesire.infobit.security.DefaultSecurityProvider;
23 import com.infodesire.infobit.hibernate.SessionProvider;
24 import com.infodesire.infobit.hibernate.ThreadLocalSessionProvider;
25
26 import com.infodesire.infobit.dao.InfobitDAO;
27 import com.infodesire.infobit.dao.AclDAO;
28 import com.infodesire.infobit.data.Infobit;
29 import com.infodesire.infobit.data.Acl;
30
31 import com.infodesire.infobit.render.InfobitRenderer;
32
33 /***
34 * infobit pool - main entry point for infobits. shall handle all infobbit
35 * operations and session management
36 *
37 * @author konstantin
38 * @created July 29, 2003
39 * @version $Revision: 1.9 $
40 */
41 public final class InfobitPool {
42 /***
43 * name of property ( map entry ) holding name of given infobit pool
44 */
45 public final static String NAME = "pool.name";
46 /***
47 * name of property ( map entry ) holding class name of hibernate session
48 * provider. if not specified, default one will be used ( {@see
49 * com.infodesire.infobit.hibernate.DefaultSessionProvider} )
50 */
51 public final static String SESSION_PROVIDER = "pool.sessionprovider";
52 /***
53 * name of property ( map entry ) holding class name of security provider.
54 * if not specified, default one will be used ( {@see
55 * com.infodesire.infobit.security.DefaultSecurityProvider} )
56 */
57 public final static String SECURITY_PROVIDER = "pool.securityprovider";
58
59 private static Log _log = LogFactory.getLog(InfobitPool.class);
60 private String _name;
61
62 private SecurityProvider _securityProvider;
63 private SessionProvider _sessionProvider;
64
65 private InfobitManager _infobitManager = null;
66 private AclManager _aclManager = null;
67
68 private InfobitRenderer _infobitRenderer = null;
69
70
71 /***
72 * Gets the Name attribute of the InfobitPool object
73 *
74 * @return The Name value
75 */
76 public String getName() {
77 return _name;
78 }
79
80
81
82 /***
83 * provide DAO for infobit manipulation. do it lazy and synchronized.
84 *
85 * @return DAO for infobit manipulation
86 */
87
88 public synchronized InfobitManager getInfobitManager() {
89 if (_infobitManager == null) {
90 _infobitManager = new InfobitDAO(getSecurityProvider(), getSessionProvider());
91 }
92 return _infobitManager;
93 }
94
95
96 /***
97 * provide DAO for infobit manipulation. do it lazy and synchronized.
98 *
99 * @return The AclDAO value
100 */
101 public synchronized AclManager getAclManager() {
102 if (_aclManager == null) {
103 _aclManager = new AclDAO(getSecurityProvider(), getSessionProvider());
104 }
105
106 return _aclManager;
107 }
108
109
110 /***
111 * Gets the RenderManager attribute of the InfobitPool object
112 *
113 * @return The RenderManager value
114 */
115 public InfobitRenderer getInfobitRenderer() {
116 return null;
117 }
118
119
120
121 /***
122 * Sets the Name attribute of the InfobitPool object
123 *
124 * @param name The new Name value
125 */
126 public void setName(String name) {
127 _name = name;
128 }
129
130
131 /***
132 * initialize pool off property map. set own name and construct session and
133 * security providers. necessary properties are defined by provider classes
134 *
135 * @param properties Description of Parameter
136 * @exception InfobitException Description of Exception
137 */
138 public void init(Properties properties) throws InfobitException {
139 if (properties.containsKey(NAME)) {
140 setName(properties.getProperty(NAME));
141 }
142 // configure security provider
143 String providerClassName = properties.getProperty(SESSION_PROVIDER);
144 Class providerClass = null;
145 if (providerClassName != null) {
146 providerClass = loadClass(providerClassName);
147 if (null == providerClass) {
148 _log.warn("did not found configured session provider class: " + providerClassName + " fallback to default");
149 }
150 }
151 if (providerClass == null) {
152 providerClass = ThreadLocalSessionProvider.class;
153 }
154
155 try {
156 _sessionProvider = (SessionProvider) providerClass.newInstance();
157 } catch (Exception ex) {
158 _log.fatal("exception occured while instantiating session provider", ex);
159 throw new InfobitException("exception occured while instantiating session provider", ex);
160 }
161 _sessionProvider.init(properties);
162
163 // and security provder
164 providerClassName = properties.getProperty(SECURITY_PROVIDER);
165 providerClass = null;
166 if (providerClassName != null) {
167 providerClass = loadClass(providerClassName);
168 if (null == providerClass) {
169 _log.warn("did not found configured security provider class: " + providerClassName + " fallback to default");
170 }
171 }
172 if (providerClass == null) {
173 providerClass = DefaultSecurityProvider.class;
174 }
175
176 try {
177 _securityProvider = (SecurityProvider) providerClass.newInstance();
178 } catch (Exception ex) {
179 _log.fatal("exception occured while instantiating session provider", ex);
180 throw new InfobitException("exception occured while instantiating session provider", ex);
181 }
182 _securityProvider.init(properties);
183
184 }
185
186
187 /***
188 * flush given pool. close / flush active session if any
189 */
190 public void flush() {
191 try {
192 Session sess = getSessionProvider().getSession();
193 getSessionProvider().returnCloseSession(sess);
194 } catch (Exception ex) {
195 _log.error("error occured while flushing infobit pool", ex);
196 }
197 }
198
199
200 /***
201 * Gets the SessionProvider attribute of the InfobitPool object
202 *
203 * @return The SessionProvider value
204 */
205 SessionProvider getSessionProvider() {
206 return _sessionProvider;
207 }
208
209
210 /***
211 * Gets the SecurityProvider attribute of the InfobitPool object
212 *
213 * @return The SecurityProvider value
214 */
215 SecurityProvider getSecurityProvider() {
216 return _securityProvider;
217 }
218
219
220 /***
221 * Sets the SessionProvider attribute of the InfobitPool object
222 *
223 * @param sessionProvider The new SessionProvider value
224 */
225 void setSessionProvider(SessionProvider sessionProvider) {
226 _sessionProvider = sessionProvider;
227 }
228
229
230 /***
231 * Sets the SecurityProvider attribute of the InfobitPool object
232 *
233 * @param securityProvider The new SecurityProvider value
234 */
235 void setSecurityProvider(SecurityProvider securityProvider) {
236 _securityProvider = securityProvider;
237 }
238
239
240 /***
241 * load class safely
242 *
243 * @param name Description of Parameter
244 * @return Description of the Returned Value
245 */
246 private Class loadClass(String name) {
247 Class clazz = null;
248 try {
249 clazz = Thread.currentThread().getContextClassLoader().loadClass(name);
250 } catch (ClassNotFoundException e) {
251 try {
252 clazz = Class.forName(name);
253 } catch (ClassNotFoundException ee) {
254 try {
255 clazz = this.getClass().getClassLoader().loadClass(name);
256 } catch (ClassNotFoundException eee) {
257 }
258 }
259 }
260
261 return clazz;
262 }
263 }
This page was automatically generated by Maven