01: /*
02: * JBoss, Home of Professional Open Source.
03: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
04: * as indicated by the @author tags. See the copyright.txt file in the
05: * distribution for a full listing of individual contributors.
06: *
07: * This is free software; you can redistribute it and/or modify it
08: * under the terms of the GNU Lesser General Public License as
09: * published by the Free Software Foundation; either version 2.1 of
10: * the License, or (at your option) any later version.
11: *
12: * This software is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this software; if not, write to the Free
19: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21: */
22: package org.jnp.interfaces.java;
23:
24: import java.util.Hashtable;
25: import javax.naming.*;
26: import javax.naming.spi.*;
27:
28: import org.jnp.interfaces.NamingContext;
29: import org.jnp.interfaces.Naming;
30:
31: /**
32: * Implementation of "java:" namespace factory. The context is associated
33: * with the thread, so the root context must be set before this is used in a thread
34: *
35: * @author Rickard Oberg
36: * @version $Revision: 57199 $
37: */
38: public class javaURLContextFactory implements ObjectFactory {
39: // Constants -----------------------------------------------------
40:
41: // Attributes ----------------------------------------------------
42:
43: // Static --------------------------------------------------------
44: private static ThreadLocal server = new ThreadLocal();
45:
46: public static void setRoot(Naming srv) {
47: // TODO: Add security check here
48: server.set(srv);
49: }
50:
51: public static Naming getRoot() {
52: // TODO: Add security check here
53: return (Naming) server.get();
54: }
55:
56: // Constructors --------------------------------------------------
57:
58: // Public --------------------------------------------------------
59:
60: // ObjectFactory implementation ----------------------------------
61: public Object getObjectInstance(Object obj, Name name,
62: Context nameCtx, Hashtable environment) throws Exception {
63: if (obj == null)
64: return new NamingContext(environment, name, (Naming) server
65: .get());
66: else if (obj instanceof String) {
67: String url = (String) obj;
68: Context ctx = new NamingContext(environment, name,
69: (Naming) server.get());
70:
71: Name n = ctx.getNameParser(name).parse(
72: url.substring(url.indexOf(":") + 1));
73: if (n.size() >= 3) {
74: // Provider URL?
75: if (n.get(0).toString().equals("")
76: && n.get(1).toString().equals("")) {
77: ctx
78: .addToEnvironment(Context.PROVIDER_URL, n
79: .get(2));
80: }
81: }
82: return ctx;
83: } else {
84: return null;
85: }
86: }
87:
88: // Y overrides ---------------------------------------------------
89:
90: // Package protected ---------------------------------------------
91:
92: // Protected -----------------------------------------------------
93:
94: // Private -------------------------------------------------------
95:
96: // Inner classes -------------------------------------------------
97: }
|