KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quadcap > services > DataSources


1 package com.quadcap.services;
2
3 /* Copyright 2000 - 2003 Quadcap Software. All rights reserved.
4  *
5  * This software is distributed under the Quadcap Free Software License.
6  * This software may be used or modified for any purpose, personal or
7  * commercial. Open Source redistributions are permitted. Commercial
8  * redistribution of larger works derived from, or works which bundle
9  * this software requires a "Commercial Redistribution License"; see
10  * http://www.quadcap.com/purchase.
11  *
12  * Redistributions qualify as "Open Source" under one of the following terms:
13  *
14  * Redistributions are made at no charge beyond the reasonable cost of
15  * materials and delivery.
16  *
17  * Redistributions are accompanied by a copy of the Source Code or by an
18  * irrevocable offer to provide a copy of the Source Code for up to three
19  * years at the cost of materials and delivery. Such redistributions
20  * must allow further use, modification, and redistribution of the Source
21  * Code under substantially the same terms as this license.
22  *
23  * Redistributions of source code must retain the copyright notices as they
24  * appear in each source code file, these license terms, and the
25  * disclaimer/limitation of liability set forth as paragraph 6 below.
26  *
27  * Redistributions in binary form must reproduce this Copyright Notice,
28  * these license terms, and the disclaimer/limitation of liability set
29  * forth as paragraph 6 below, in the documentation and/or other materials
30  * provided with the distribution.
31  *
32  * The Software is provided on an "AS IS" basis. No warranty is
33  * provided that the Software is free of defects, or fit for a
34  * particular purpose.
35  *
36  * Limitation of Liability. Quadcap Software shall not be liable
37  * for any damages suffered by the Licensee or any third party resulting
38  * from use of the Software.
39  */

40
41 import java.io.FileReader JavaDoc;
42
43 import java.util.HashMap JavaDoc;
44 import java.util.Hashtable JavaDoc;
45 import java.util.Properties JavaDoc;
46
47 import java.lang.ref.WeakReference JavaDoc;
48
49 import javax.naming.Context JavaDoc;
50 import javax.naming.InitialContext JavaDoc;
51 import javax.naming.Name JavaDoc;
52 import javax.naming.NameAlreadyBoundException JavaDoc;
53 import javax.naming.NamingException JavaDoc;
54 import javax.naming.RefAddr JavaDoc;
55 import javax.naming.Reference JavaDoc;
56 import javax.naming.spi.ObjectFactory JavaDoc;
57
58 import com.quadcap.server.Service;
59 import com.quadcap.server.ServiceContainer;
60
61 import com.quadcap.util.Debug;
62
63 /**
64  * Read datasources.xml; create any specified data sources, and bind them
65  * to JNDI names
66  *
67  * @author Stan Bailes
68  */

69 public class DataSources implements Service, ObjectFactory JavaDoc {
70     static HashMap JavaDoc dss = new HashMap JavaDoc();
71     Context JavaDoc context;
72     Properties JavaDoc props;
73
74     public DataSources() {}
75
76     private static DataSources globalDs = null;
77     
78 // public static void init(String initFile) throws Exception {
79
// if (globalDs == null) {
80
// globalDs = new DataSources();
81
// Properties p = new Properties();
82
// p.put("service.config", "datasources.xml");
83
// globalDs.init(null, p);
84
// }
85
// }
86

87     public void init(ServiceContainer c, Properties JavaDoc p)
88         throws Exception JavaDoc
89     {
90         this.props = p;
91         this.context = new InitialContext JavaDoc();
92         String JavaDoc fileName = p.getProperty("service.config");
93         DataSourcesParser dp = new DataSourcesParser();
94         FileReader JavaDoc in = new FileReader JavaDoc(fileName);
95         dp.parse(in, this);
96     }
97
98     public Properties JavaDoc getProperties() { return props; }
99
100     public void addDataSource(DataSource ds) throws NamingException JavaDoc {
101         addAttribute(ds.getName(), ds);
102     }
103
104     public static DataSource getDataSource(String JavaDoc name) {
105         return (DataSource)dss.get(name);
106     }
107
108     public void addAttribute(String JavaDoc name, Object JavaDoc attr) {
109         dss.put(name, attr);
110         try {
111             try {
112                 context.bind(name, attr);
113             } catch (NameAlreadyBoundException JavaDoc ne) {
114                 context.rebind(name, attr);
115             }
116         } catch (NamingException JavaDoc ex) {
117             Debug.print(ex);
118         }
119     }
120
121     public Object JavaDoc getAttribute(String JavaDoc name) {
122         return dss.get(name);
123     }
124
125     public void stop() {
126     }
127
128     public Object JavaDoc getObjectInstance(Object JavaDoc obj, Name JavaDoc name,
129                                     Context JavaDoc ctx, Hashtable JavaDoc env)
130         throws Exception JavaDoc
131     {
132         Object JavaDoc ret = null;
133         if (obj instanceof Reference JavaDoc) {
134             Reference JavaDoc ref = (Reference JavaDoc)obj;
135             if (ref.getClassName().equals(DataSource.class.getName())) {
136                 RefAddr JavaDoc addr = ref.get("name");
137                 if (addr != null) {
138                     ret = getDataSource(addr.getContent().toString());
139                 }
140             }
141         }
142         return ret;
143     }
144 }
145
Popular Tags