1 /***
2 * JFoxSOAF, Service-Oriented Application Framework
3 *
4 * Copyright (C) www.huihoo.org
5 *
6 * Distributable under GNU LGPL
7 *
8 * For more information, please visit: http://www.huihoo.org/jfox/jfoxsoaf
9 */
10
11 package org.huihoo.jfox.soaf.services.ejb;
12
13 import java.net.URL;
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import javax.ejb.EJBHome;
19 import javax.ejb.EJBLocalHome;
20 import javax.jms.Queue;
21 import javax.jms.QueueConnectionFactory;
22 import javax.jms.Topic;
23 import javax.jms.TopicConnectionFactory;
24 import javax.mail.Session;
25 import javax.naming.InitialContext;
26 import javax.naming.NamingException;
27 import javax.rmi.PortableRemoteObject;
28 import javax.sql.DataSource;
29
30 import org.huihoo.jfox.soaf.exception.ServiceLocatorException;
31 import org.huihoo.jfox.soaf.services.logging.LoggingService;
32
33 /***
34 * <p>
35 * ServiceLocator Implementation.
36 * </p>
37 *
38 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
39 * @version $Revision: 1.7 $ $Date: 2004/11/16 10:26:42 $
40 * @version Revision: 1.0
41 */
42
43 public class ServiceLocatorImpl implements ServiceLocator {
44
45 private InitialContext ic = null;
46
47 private Map cache = null;
48
49 private LoggingService logger = null;
50
51 private DataSource dataSource = null;
52
53 private Session mailSession = null;
54
55 public ServiceLocatorImpl() throws ServiceLocatorException {
56 try {
57 ic = new InitialContext();
58 cache = Collections.synchronizedMap(new HashMap());
59 } catch (NamingException ne) {
60 logger.error("ServiceService NamingException " + ne.getMessage());
61 throw new ServiceLocatorException(ne);
62 } catch (Exception e) {
63 logger.error("ServiceLocator Exception " + e.getMessage());
64 throw new ServiceLocatorException(e);
65 }
66 }
67
68 /***
69 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getBoolean(java.lang.String)
70 */
71 public boolean getBoolean(String envName) throws ServiceLocatorException {
72 Boolean bool = null;
73 try {
74 bool = (Boolean) ic.lookup(envName);
75 } catch (NamingException ne) {
76 throw new ServiceLocatorException(ne);
77 } catch (Exception e) {
78 throw new ServiceLocatorException(e);
79 }
80 return bool.booleanValue();
81 }
82
83 /***
84 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getLocalHome(java.lang.String)
85 */
86 public EJBLocalHome getLocalHome(String jndiHomeName)
87 throws ServiceLocatorException {
88 EJBLocalHome home = null;
89 try {
90 if (cache.containsKey(jndiHomeName)) {
91 home = (EJBLocalHome) cache.get(jndiHomeName);
92 } else {
93 home = (EJBLocalHome) ic.lookup(jndiHomeName);
94 cache.put(jndiHomeName, home);
95 }
96 } catch (NamingException ne) {
97 throw new ServiceLocatorException(ne);
98 } catch (Exception e) {
99 throw new ServiceLocatorException(e);
100 }
101 return home;
102 }
103
104 /***
105 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getRemoteHome(java.lang.String,
106 * java.lang.ClassLoadProxy)
107 */
108 public EJBHome getRemoteHome(String jndiHomeName, Class className)
109 throws ServiceLocatorException {
110 EJBHome home = null;
111 try {
112 if (cache.containsKey(jndiHomeName)) {
113 home = (EJBHome) cache.get(jndiHomeName);
114 } else {
115 Object objref = ic.lookup(jndiHomeName);
116 Object obj = PortableRemoteObject.narrow(objref, className);
117 home = (EJBHome) obj;
118 cache.put(jndiHomeName, home);
119 }
120 } catch (NamingException ne) {
121 throw new ServiceLocatorException(ne);
122 } catch (Exception e) {
123 throw new ServiceLocatorException(e);
124 }
125 return home;
126 }
127
128 /***
129 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getQueue(java.lang.String)
130 */
131 public Queue getQueue(String queueName) throws ServiceLocatorException {
132 Queue queue = null;
133 try {
134 if (cache.containsKey(queueName)) {
135 queue = (Queue) cache.get(queueName);
136 } else {
137 queue = (Queue) ic.lookup(queueName);
138 cache.put(queueName, queue);
139 }
140 } catch (NamingException ne) {
141 throw new ServiceLocatorException(ne);
142 } catch (Exception e) {
143 throw new ServiceLocatorException(e);
144 }
145 return queue;
146 }
147
148 /***
149 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getQueueConnectionFactory(java.lang.String)
150 */
151 public QueueConnectionFactory getQueueConnectionFactory(
152 String qConnFactoryName) throws ServiceLocatorException {
153 QueueConnectionFactory factory = null;
154 try {
155 if (cache.containsKey(qConnFactoryName)) {
156 factory = (QueueConnectionFactory) cache.get(qConnFactoryName);
157 } else {
158 factory = (QueueConnectionFactory) ic.lookup(qConnFactoryName);
159 cache.put(qConnFactoryName, factory);
160 }
161 } catch (NamingException ne) {
162 throw new ServiceLocatorException(ne);
163 } catch (Exception e) {
164 throw new ServiceLocatorException(e);
165 }
166 return factory;
167 }
168
169 /***
170 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getTopic(java.lang.String)
171 */
172 public Topic getTopic(String topicName) throws ServiceLocatorException {
173 Topic topic = null;
174 try {
175 if (cache.containsKey(topicName)) {
176 topic = (Topic) cache.get(topicName);
177 } else {
178 topic = (Topic) ic.lookup(topicName);
179 cache.put(topicName, topic);
180 }
181 } catch (NamingException ne) {
182 throw new ServiceLocatorException(ne);
183 } catch (Exception e) {
184 throw new ServiceLocatorException(e);
185 }
186 return topic;
187 }
188
189 /***
190 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getTopicConnectionFactory(java.lang.String)
191 */
192 public TopicConnectionFactory getTopicConnectionFactory(
193 String topicConnFactoryName) throws ServiceLocatorException {
194 TopicConnectionFactory factory = null;
195 try {
196 if (cache.containsKey(topicConnFactoryName)) {
197 factory = (TopicConnectionFactory) cache
198 .get(topicConnFactoryName);
199 } else {
200 factory = (TopicConnectionFactory) ic
201 .lookup(topicConnFactoryName);
202 cache.put(topicConnFactoryName, factory);
203 }
204 } catch (NamingException ne) {
205 throw new ServiceLocatorException(ne);
206 } catch (Exception e) {
207 throw new ServiceLocatorException(e);
208 }
209 return factory;
210 }
211
212 /***
213 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getDataSource(java.lang.String)
214 */
215 public DataSource getDataSource(String dataSourceName)
216 throws ServiceLocatorException {
217
218 try {
219 if (cache.containsKey(dataSourceName)) {
220 dataSource = (DataSource) cache.get(dataSourceName);
221 } else {
222 dataSource = (DataSource) ic.lookup(dataSourceName);
223 cache.put(dataSourceName, dataSource);
224 }
225 } catch (NamingException ne) {
226 throw new ServiceLocatorException(ne);
227 } catch (Exception e) {
228 throw new ServiceLocatorException(e);
229 }
230 return dataSource;
231 }
232
233 /***
234 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getDataSource(java.lang.String)
235 */
236 public Session getMailSession(String mailSessionName)
237 throws ServiceLocatorException {
238
239 try {
240 if (cache.containsKey(mailSessionName)) {
241 mailSession = (Session) cache.get(mailSessionName);
242 } else {
243 mailSession = (Session) ic.lookup(mailSessionName);
244 cache.put(mailSessionName, mailSession);
245 }
246 } catch (NamingException ne) {
247 throw new ServiceLocatorException(ne);
248 } catch (Exception e) {
249 throw new ServiceLocatorException(e);
250 }
251 return mailSession;
252 }
253
254 /***
255 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getString(java.lang.String)
256 */
257 public String getString(String envName) throws ServiceLocatorException {
258 String envEntry = null;
259 try {
260 envEntry = (String) ic.lookup(envName);
261 } catch (NamingException ne) {
262 throw new ServiceLocatorException(ne);
263 } catch (Exception e) {
264 throw new ServiceLocatorException(e);
265 }
266 return envEntry;
267 }
268
269 /***
270 * @see org.huihoo.jfox.soaf.services.ejb.ServiceLocator#getUrl(java.lang.String)
271 */
272 public URL getUrl(String envName) throws ServiceLocatorException {
273 URL url = null;
274 try {
275 url = (URL) ic.lookup(envName);
276 } catch (NamingException ne) {
277 throw new ServiceLocatorException(ne);
278 } catch (Exception e) {
279 throw new ServiceLocatorException(e);
280 }
281 return url;
282 }
283 }