Thu, 31 Aug 2017 15:18:52 +0800
merge
1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.xml.internal.ws.api.server;
28 import com.sun.istack.internal.NotNull;
30 /**
31 * This class determines an instance of {@link Container} for the runtime.
32 * It applies for both server and client runtimes(for e.g in Servlet could
33 * be accessing a Web Service).
34 *
35 * A client that is invoking a web service may be running in a
36 * container(for e.g servlet). T
37 *
38 * <p>
39 * ContainerResolver uses a static field to keep the instance of the resolver object.
40 * Typically appserver may set its custom container resolver using the static method
41 * {@link #setInstance(ContainerResolver)}
42 *
43 * @author Jitendra Kotamraju
44 */
45 public abstract class ContainerResolver {
47 private static final ThreadLocalContainerResolver DEFAULT = new ThreadLocalContainerResolver();
49 private static volatile ContainerResolver theResolver = DEFAULT;
51 /**
52 * Sets the custom container resolver which can be used to get client's
53 * {@link Container}.
54 *
55 * @param resolver container resolver
56 */
57 public static void setInstance(ContainerResolver resolver) {
58 if(resolver==null)
59 resolver = DEFAULT;
60 theResolver = resolver;
61 }
63 /**
64 * Returns the container resolver which can be used to get client's {@link Container}.
65 *
66 * @return container resolver instance
67 */
68 public static @NotNull ContainerResolver getInstance() {
69 return theResolver;
70 }
72 /**
73 * Returns the default container resolver which can be used to get {@link Container}.
74 *
75 * @return default container resolver
76 */
77 public static ThreadLocalContainerResolver getDefault() {
78 return DEFAULT;
79 }
81 /**
82 * Returns the {@link Container} context in which client is running.
83 *
84 * @return container instance for the client
85 */
86 public abstract @NotNull Container getContainer();
88 }