KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > axis > server > JNDIAxisServerFactory


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

55
56 package org.jboss.axis.server;
57
58 import org.jboss.axis.AxisEngine;
59 import org.jboss.axis.AxisFault;
60 import org.jboss.axis.utils.Messages;
61 import org.jboss.logging.Logger;
62
63 import javax.naming.InitialContext JavaDoc;
64 import javax.naming.NamingException JavaDoc;
65 import javax.servlet.ServletContext JavaDoc;
66 import java.util.Map JavaDoc;
67
68 /**
69  * Helper class for obtaining AxisServers, which hides the complexity
70  * of JNDI accesses, etc.
71  * <p/>
72  * !!! QUESTION : Does this class need to play any ClassLoader tricks?
73  *
74  * @author Glen Daniels (gdaniels@macromedia.com)
75  */

76
77 public class JNDIAxisServerFactory extends DefaultAxisServerFactory
78 {
79
80    private static Logger log = Logger.getLogger(JNDIAxisServerFactory.class.getName());
81
82    /**
83     * Obtain an AxisServer reference, using JNDI if possible, otherwise
84     * creating one using the standard Axis configuration pattern. If we
85     * end up creating one and do have JNDI access, bind it to the passed
86     * name so we find it next time.
87     * <p/>
88     * NOTE : REQUIRES SERVLET 2.3 FOR THE GetServletContextName() CALL!
89     *
90     * @param environment The following is used, in addition to
91     * the keys used by the parent class:
92     * AxisEngine.ENV_SERVLET_CONTEXT
93     * [required, else default/parent behavior]
94     * - Instance of ServletContext
95     */

96    public AxisServer getServer(Map JavaDoc environment)
97            throws AxisFault
98    {
99       log.debug("Enter: JNDIAxisServerFactory::getServer");
100
101       InitialContext JavaDoc context = null;
102
103       // First check to see if JNDI works
104
// !!! Might we need to set up context parameters here?
105
try
106       {
107          context = new InitialContext JavaDoc();
108       }
109       catch (NamingException JavaDoc e)
110       {
111          log.warn(Messages.getMessage("jndiNotFound00"), e);
112       }
113
114       ServletContext JavaDoc servletContext = null;
115       try
116       {
117          servletContext =
118                  (ServletContext JavaDoc)environment.get(AxisEngine.ENV_SERVLET_CONTEXT);
119       }
120       catch (ClassCastException JavaDoc e)
121       {
122          log.warn(Messages.getMessage("servletContextWrongClass00"), e);
123          // Fall through
124
}
125
126       AxisServer server = null;
127       if (context != null && servletContext != null)
128       {
129          // Figure out the name by looking in the servlet context (for now)
130

131          /**
132           * !!! WARNING - THIS CLASS NEEDS TO FIGURE OUT THE CORRECT
133           * NAMING SCHEME FOR GETTING/PUTTING SERVERS FROM/TO JNDI!
134           *
135           */

136
137          // For servlet 2.3....?
138
// String name = servletContext.getServletContextName();
139

140          // THIS IS NOT ACCEPTABLE JNDI NAMING...
141
String JavaDoc name = servletContext.getRealPath("/WEB-INF/Server");
142
143 // The following was submitted as a patch, but I don't believe this
144
// is going to produce a valid JNDI name of ANY sort... yuck.
145
// This would produce a URL, not a path name.
146
//
147
// Since it appears, from comments above, that this entire scheme is
148
// broken, then for now I'll simply check for a null-name to prevent
149
// possible NPE on WebLogic.
150
//
151
// What ARE we doing here?!?!
152
//
153
// if (name == null) {
154
// try {
155
// name = servletContext.getResource("/WEB-INF/Server").toString();
156
// } catch (Exception e) {
157
// // ignore
158
// }
159
// }
160

161          // We've got JNDI, so try to find an AxisServer at the
162
// specified name.
163
if (name != null)
164          {
165             try
166             {
167                server = (AxisServer)context.lookup(name);
168             }
169             catch (NamingException JavaDoc e)
170             {
171                // Didn't find it.
172
server = super.getServer(environment);
173                try
174                {
175                   context.bind(name, server);
176                }
177                catch (NamingException JavaDoc e1)
178                {
179                   // !!! Couldn't do it, what should we do here?
180
}
181             }
182          }
183       }
184
185       if (server == null)
186       {
187          server = super.getServer(environment);
188       }
189
190       log.debug("Exit: JNDIAxisServerFactory::getServer");
191
192       return server;
193    }
194 }
195
Popular Tags