KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openejb > core > ivm > naming > java > javaURLContextFactory


1 /**
2  * Redistribution and use of this software and associated documentation
3  * ("Software"), with or without modification, are permitted provided
4  * that the following conditions are met:
5  *
6  * 1. Redistributions of source code must retain copyright
7  * statements and notices. Redistributions must also contain a
8  * copy of this document.
9  *
10  * 2. Redistributions in binary form must reproduce the
11  * above copyright notice, this list of conditions and the
12  * following disclaimer in the documentation and/or other
13  * materials provided with the distribution.
14  *
15  * 3. The name "Exolab" must not be used to endorse or promote
16  * products derived from this Software without prior written
17  * permission of Exoffice Technologies. For written permission,
18  * please contact info@exolab.org.
19  *
20  * 4. Products derived from this Software may not be called "Exolab"
21  * nor may "Exolab" appear in their names without prior written
22  * permission of Exoffice Technologies. Exolab is a registered
23  * trademark of Exoffice Technologies.
24  *
25  * 5. Due credit should be given to the Exolab Project
26  * (http://www.exolab.org/).
27  *
28  * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29  * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30  * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32  * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39  * OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved.
42  *
43  * $Id: javaURLContextFactory.java 1096 2004-03-26 21:41:16Z dblevins $
44  */

45
46
47 package org.openejb.core.ivm.naming.java;
48
49
50 import java.util.Hashtable JavaDoc;
51
52 import javax.naming.Context JavaDoc;
53 import javax.naming.Name JavaDoc;
54 import javax.naming.NamingException JavaDoc;
55 import javax.naming.spi.InitialContextFactory JavaDoc;
56 import javax.naming.spi.ObjectFactory JavaDoc;
57
58 import org.openejb.core.DeploymentInfo;
59 import org.openejb.core.ThreadContext;
60 /**
61  * Implements a URL context factory for the <tt>java:</tt> URL. Exposes
62  * the environment naming context (<tt>java:/comp</tt>) as a read-only
63  * context as per the J2EE container requirements.
64  * <p>
65  * To use this context factory the JNDI properties file must include
66  * the following property:
67  * <pre>
68  * java.naming.factory.url.pkgs=org.openejb.naming
69  * </pre>
70  *
71  *
72  *
73  * @version $Revision: 1096 $ $Date: 2004-03-26 13:41:16 -0800 (Fri, 26 Mar 2004) $
74  */

75 public class javaURLContextFactory implements ObjectFactory JavaDoc, InitialContextFactory JavaDoc {
76     
77     public Context JavaDoc getInitialContext(Hashtable JavaDoc env) throws NamingException JavaDoc {
78         return getContext();
79     }
80     public Object JavaDoc getObjectInstance( Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc env )
81     throws NamingException JavaDoc {
82         if(obj == null){
83             /*
84                A null obj ref means the NamingManager is requesting
85                a Context that can resolve the 'java:' schema
86             */

87             return getContext();
88         }else if(obj instanceof java.lang.String JavaDoc){
89             String JavaDoc string = (String JavaDoc)obj;
90             if(string.startsWith("java:comp")||string.startsWith("java:openejb")){
91                 /*
92                  If the obj is a URL String with the 'java:' schema
93                  resolve the URL in the context of this threads JNDI ENC
94                  */

95                 string = string.substring(string.indexOf(':'));
96                 Context JavaDoc encRoot = getContext();
97                 return encRoot.lookup(string);
98             }
99         }
100         return null;
101     }
102     public Object JavaDoc getObjectInstance( Object JavaDoc obj, Hashtable JavaDoc env )
103     throws NamingException JavaDoc {
104         return getContext();
105     }
106         
107     public Context JavaDoc getContext(){
108         Context JavaDoc jndiCtx = null;
109         
110         if( !ThreadContext.isValid() ){
111             return org.openejb.OpenEJB.getJNDIContext();
112         }
113             
114         DeploymentInfo di = ThreadContext.getThreadContext().getDeploymentInfo();
115         if ( di != null ) {
116             return di.getJndiEnc();
117         } else {
118             return org.openejb.OpenEJB.getJNDIContext();
119         }
120     }
121 }
122
Popular Tags