KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > core > db > datasource > JndiDataSource


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64
65 /*
66  * DataSourceInterface.java
67  *
68  * copyright 2002 AMYCASE .
69  *
70  */

71 package com.jcorporate.expresso.core.db.datasource;
72
73 import com.jcorporate.expresso.core.db.config.JNDIConfig;
74
75 import javax.naming.Context JavaDoc;
76 import javax.naming.InitialContext JavaDoc;
77 import javax.naming.NamingException JavaDoc;
78 import javax.sql.DataSource JavaDoc;
79 import java.sql.Connection JavaDoc;
80 import java.sql.SQLException JavaDoc;
81 import java.util.Hashtable JavaDoc;
82
83
84 /**
85  * <p>JndiDataSource are the pure core of the Expresso framework.</p>
86  * <p/>
87  * Interface for wrapping J2EE datasource connection retrieve
88  *
89  * @author Yves Henri AMAIZO
90  * @see com.jcorporate.expresso.core.db.DBException
91  * @see com.jcorporate.expresso.core.db.DBConnection
92  */

93 public class JndiDataSource implements DataSourceInterface {
94     private static final String JavaDoc thisClass = JndiDataSource.class.getName() + ".";
95
96
97     /**
98      * The local DataSource object for setting the connection to database via JNDI.
99      */

100     protected DataSource JavaDoc ds = null;
101
102     /**
103      * The JDBC Configuration retrieve from config-expresso.xml for the context.
104      */

105     protected JNDIConfig myJndi = null;
106
107     /**
108      * The local Database URL object for setting the connection to database via JNDI.
109      */

110     protected String JavaDoc dbURL = null;
111
112     /**
113      * Constructor
114      * Create a new datasource object
115      */

116     public JndiDataSource() {
117     }
118
119
120     /**
121      * Constructor
122      * Create a new datasource object
123      *
124      * @param ConfigJndi
125      */

126     public JndiDataSource(JNDIConfig newJndi, String JavaDoc newURL) {
127         myJndi = newJndi;
128         dbURL = newURL;
129     }
130
131     /**
132      * Configure and set up the JNDI search for database Pool Factory connection.
133      * Initial JNDI context Factory for searchin in java environment
134      * Lookup for database info from this environment.
135      *
136      * @param ConfigJdbc
137      * @param ConfigJndi
138      */

139
140     public void setupContext() throws DSException {
141         String JavaDoc myName = (thisClass + "setupContext()");
142         Context JavaDoc envContext = null;
143         Hashtable JavaDoc envTable = null;
144
145         try {
146             envTable = new Hashtable JavaDoc();
147             if (!"".equals(myJndi.getInitialContextFactory())) {
148                 envTable.put(Context.INITIAL_CONTEXT_FACTORY, myJndi.getInitialContextFactory());
149             }
150             if (!"".equals(myJndi.getProviderURL())) {
151                 envTable.put(Context.PROVIDER_URL, myJndi.getProviderURL());
152             }
153             if (!"".equals(myJndi.getSecurityPrincipal())) {
154                 envTable.put(Context.SECURITY_PRINCIPAL, myJndi.getSecurityPrincipal());
155             }
156             if (!"".equals(myJndi.getSecurityCredentials())) {
157                 envTable.put(Context.SECURITY_CREDENTIALS, myJndi.getSecurityCredentials());
158             }
159             if (!"".equals(myJndi.getSecurityAuthentication())) {
160                 envTable.put(Context.SECURITY_AUTHENTICATION, myJndi.getSecurityAuthentication());
161             }
162             if (!"".equals(myJndi.getSecurityProtocol())) {
163                 envTable.put(Context.SECURITY_PROTOCOL, myJndi.getSecurityProtocol());
164             }
165             if (!"".equals(myJndi.getDnsURL())) {
166                 envTable.put(Context.DNS_URL, myJndi.getDnsURL());
167             }
168             envContext = new InitialContext JavaDoc(envTable);
169             if (envContext != null) {
170                 ds = (DataSource JavaDoc) envContext.lookup(getDbURL());
171                 envContext.close();
172             } else {
173                 throw new DSException(myName + ":Cannot initialize Initial Context Factory for Datasource Object via JNDI. " +
174                         " DATASOURCE : '(" + myJndi.getInitialContextFactory() + ")'");
175             }
176         } catch (NamingException JavaDoc ne) {
177             throw new DSException(myName +
178                     ":Cannot get Naming Object via JNDI " +
179                     " and INITIAL_CONTEXT_FACTORY '" + myJndi.getInitialContextFactory() + "'" +
180                     " and DATASOURCE '" + getDbURL() + "'" +
181                     ":JDBC returned a null connection. " +
182                     " Error : " + ne.getMessage());
183         }
184
185     }
186
187     /**
188      * Get connection from JNDI Factory retrieve from the context previously set up.
189      */

190     public Connection JavaDoc getConnection() throws DSException {
191         String JavaDoc myName = (thisClass + "." + "getConnection()");
192
193         try {
194             if (ds == null) {
195                 throw new DSException(myName +
196                         ":Cannot get a connection to database via JNDI DataSource Handle is null'");
197             }
198             return ds.getConnection();
199         } catch (SQLException JavaDoc se) {
200             throw new DSException(myName +
201                     ":Cannot get a connection to database via JNDI DataSource '" +
202                     getDbURL() + "' (" + ")", se.getMessage());
203         }
204
205     }
206
207
208     /**
209      * Get connection from JNDI Factory retrieve from the context previously set up.
210      */

211     public Connection JavaDoc getConnection(String JavaDoc Username, String JavaDoc Password) throws DSException {
212         String JavaDoc myName = (thisClass + "." + "getConnection(String, String)");
213
214         try {
215             if (ds == null) {
216                 throw new DSException(myName +
217                         ":Cannot get a connection to database via JNDI DataSource Handle is null'");
218             }
219             return ds.getConnection(Username, Password);
220         } catch (SQLException JavaDoc se) {
221             throw new DSException(myName +
222                     ":Cannot get a connection to database via JNDI DataSource '" +
223                     getDbURL() + "' (" + Username + ", " + Password + ")", se.getMessage());
224         }
225
226     }
227
228     /**
229      * Gets the myJndi
230      *
231      * @return Returns a ConfigJndi
232      */

233     public JNDIConfig getMyJndi() {
234         return myJndi;
235     }
236
237     /**
238      * Sets the myJndi
239      *
240      * @param myJndi The myJndi to set
241      */

242     public void setMyJndi(JNDIConfig myJndi) {
243         this.myJndi = myJndi;
244     }
245
246
247     /**
248      * Gets the dbURL
249      *
250      * @return Returns a String
251      */

252     public String JavaDoc getDbURL() {
253         return dbURL;
254     }
255
256     /**
257      * Sets the dbURL
258      *
259      * @param dbURL The dbURL to set
260      */

261     public void setDbURL(String JavaDoc dbURL) {
262         this.dbURL = dbURL;
263     }
264
265
266 }
267
268
Popular Tags