KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > bsf > remoting > util > naming > PropertiesICFactory


1 /**
2  * Copyright (c) 2002 Bright Side Factory. All rights
3  * reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in
14  * the documentation and/or other materials provided with the
15  * distribution.
16  *
17  * 3. The end-user documentation included with the redistribution,
18  * if any, must include the following acknowledgment:
19  * "This product includes software developed by the
20  * Bright Side Factory (http://www.bs-factory.org/)."
21  * Alternately, this acknowledgment may appear in the software itself,
22  * if and wherever such third-party acknowledgments normally appear.
23  *
24  * 4. The names "Bright Side", "BS Factory" and "Bright Side Factory" must
25  * not be used to endorse or promote products derived from this
26  * software without prior written permission. For written
27  * permission, please contact info@bs-factory.org.
28  *
29  * 5. Products derived from this software may not be called "Bright Side",
30  * nor may "Bright Side" appear in their name, without prior written
31  * permission of the Apache Software Foundation.
32  *
33  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
34  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
37  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
40  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
41  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
42  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
43  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44  * SUCH DAMAGE.
45  * ====================================================================
46  *
47  * This software consists of voluntary contributions made by many
48  * individuals on behalf of the Bright Side Factory. For more
49  * information on the Bright Side Factory, please see
50  * <http://www.bs-factory.org/>.
51  */

52 package org.bsf.remoting.util.naming;
53
54 import javax.naming.Context JavaDoc;
55 import javax.naming.InitialContext JavaDoc;
56 import java.io.InputStream JavaDoc;
57 import java.io.IOException JavaDoc;
58 import java.util.Properties JavaDoc;
59
60 /**
61  * This class allows to create an Initial context depending on a
62  * property file. The normal use is to set the properties ressources and then to call
63  * the getInitialContext() that will returns the cached initial context.
64  *
65  * However, another solution is to call the static method getInitialContext(String )
66  * that allows the use of different Initial contexts in the same JVM
67  *
68  * This is usefull when more than one IC can be used
69  * in the same JVM.
70  *
71  * @author Gaetan Zoritchak
72  * @version@
73  */

74 public class PropertiesICFactory implements InitialContextFactory {
75
76     private String JavaDoc _propertiesRessources;
77     private Context JavaDoc _ic;
78
79     /**
80      * sets the properties ressource and load the Initial context
81      * corresponding to the ressource.
82      */

83     public void setPropertiesRessources(String JavaDoc propertiesRessources) {
84         boolean bTmpCheckResult = false;
85
86         if ( ( propertiesRessources != null ) && (
87                 !propertiesRessources.equals( "") ) )
88             bTmpCheckResult = true;
89
90         if ( !bTmpCheckResult)
91             throw new IllegalArgumentException JavaDoc();
92         _propertiesRessources = propertiesRessources;
93         loadICInstance();
94     }
95
96     /**
97      * Instantiates the Initial context according to the properties.
98      */

99     private void loadICInstance() {
100         ClassLoader JavaDoc classLoader = Thread.currentThread().getContextClassLoader();
101         InputStream JavaDoc inputStream = classLoader.getResourceAsStream(_propertiesRessources);
102
103         if ( inputStream == null)
104             throw new RuntimeException JavaDoc("Unable to load " + _propertiesRessources);
105
106         Properties JavaDoc properties = new Properties JavaDoc();
107
108         try {
109             properties.load(inputStream);
110             _ic = new InitialContext JavaDoc(properties);
111         } catch (Exception JavaDoc e) {
112             throw new RuntimeException JavaDoc(e.toString());
113         }
114     }
115
116     /**
117      * @return the cached initial context.
118      */

119     public Context JavaDoc getInitialContext() {
120         if (_ic == null )
121             throw new RuntimeException JavaDoc("The properties name haven't been set.");
122         return _ic;
123     }
124
125     /**
126      * Creates a new Initial context using the ressource properties.
127      */

128     public static Context JavaDoc createInitialContext(String JavaDoc propertiesRessource) {
129         Context JavaDoc result = null;
130
131         Properties JavaDoc properties = new Properties JavaDoc();
132
133         //If a properties file resource was specified in the servlet context,
134
//we use it to initialize the properties
135
if ( propertiesRessource != null && propertiesRessource.length() > 0){
136             ClassLoader JavaDoc classLoader = Thread.currentThread().getContextClassLoader();
137             InputStream JavaDoc inputStream = classLoader.getResourceAsStream(propertiesRessource);
138
139             if ( inputStream == null)
140                 throw new RuntimeException JavaDoc("Unable to load " + propertiesRessource);
141
142
143             try {
144                 properties.load(inputStream);
145             } catch (IOException JavaDoc e) {
146                 throw new RuntimeException JavaDoc(e.getLocalizedMessage());
147             }
148         }
149
150         try {
151             result = new InitialContext JavaDoc(properties);
152         } catch (Exception JavaDoc e) {
153             throw new RuntimeException JavaDoc(e.getLocalizedMessage());
154         }
155         return result;
156         }
157
158 }
Popular Tags