annotate org.eclipse.osgi/osgi/src/org/osgi/framework/BundleContext.d @ 105:bbe49769ec18

...
author Frank Benoit <benoit@tionex.de>
date Sun, 08 Nov 2009 12:42:30 +0100
parents 12b890a6392a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * $Header: /cvshome/build/org.osgi.framework/src/org/osgi/framework/BundleContext.java,v 1.22 2007/02/21 16:49:05 hargrave Exp $
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
3 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * Copyright (c) OSGi Alliance (2000, 2007). All Rights Reserved.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
5 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * Licensed under the Apache License, Version 2.0 (the "License");
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 * you may not use this file except in compliance with the License.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * You may obtain a copy of the License at
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 *
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * http://www.apache.org/licenses/LICENSE-2.0
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 *
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 * Unless required by applicable law or agreed to in writing, software
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 * distributed under the License is distributed on an "AS IS" BASIS,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 * See the License for the specific language governing permissions and
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 * limitations under the License.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
19 // Port to the D programming language:
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
20 // Frank Benoit <benoit@tionex.de>
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 module org.osgi.framework.BundleContext;
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import java.lang.all;
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
24
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
25 import org.osgi.framework.BundleListener; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
26 import org.osgi.framework.BundleException; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
27 import org.osgi.framework.ServiceListener; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
28 import org.osgi.framework.InvalidSyntaxException; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
29 import org.osgi.framework.ServiceRegistration; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
30 import org.osgi.framework.ServiceReference; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
31 import org.osgi.framework.Bundle; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
32 import org.osgi.framework.Filter; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
33 import org.osgi.framework.FrameworkListener; // packageimport
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
34
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import java.io.File;
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import java.io.InputStream;
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import java.util.Dictionary;
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * A bundle's execution context within the Framework. The context is used to
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * grant access to other methods so that this bundle can interact with the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * Framework.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
43 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * <code>BundleContext</code> methods allow a bundle to:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * <ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * <li>Subscribe to events published by the Framework.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <li>Register service objects with the Framework service registry.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * <li>Retrieve <code>ServiceReferences</code> from the Framework service
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * registry.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * <li>Get and release service objects for a referenced service.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * <li>Install new bundles in the Framework.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * <li>Get the list of bundles installed in the Framework.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * <li>Get the {@link Bundle} object for a bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * <li>Create <code>File</code> objects for files in a persistent storage
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * area provided for the bundle by the Framework.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * </ul>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
58 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * A <code>BundleContext</code> object will be created and provided to the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * bundle associated with this context when it is started using the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * {@link BundleActivator#start} method. The same <code>BundleContext</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * object will be passed to the bundle associated with this context when it is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * stopped using the {@link BundleActivator#stop} method. A
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * <code>BundleContext</code> object is generally for the private use of its
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * associated bundle and is not meant to be shared with other bundles in the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * OSGi environment.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
68 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * The <code>Bundle</code> object associated with a <code>BundleContext</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * object is called the <em>context bundle</em>.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
72 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * The <code>BundleContext</code> object is only valid during the execution of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * its context bundle; that is, during the period from when the context bundle
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * is in the <code>STARTING</code>, <code>STOPPING</code>, and
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * <code>ACTIVE</code> bundle states. If the <code>BundleContext</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * object is used subsequently, an <code>IllegalStateException</code> must be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * thrown. The <code>BundleContext</code> object must never be reused after
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * its context bundle is stopped.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
81 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * The Framework is the only entity that can create <code>BundleContext</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * objects and they are only valid within the Framework that created them.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
85 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * @ThreadSafe
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * @version $Revision: 1.22 $
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 public interface BundleContext {
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * Returns the value of the specified property. If the key is not found in
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * the Framework properties, the system properties are then searched. The
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * method returns <code>null</code> if the property is not found.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
95 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * The Framework defines the following standard property keys:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * </p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * <ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * <li>{@link Constants#FRAMEWORK_VERSION} - The OSGi Framework version.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 * </li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * <li>{@link Constants#FRAMEWORK_VENDOR} - The Framework implementation
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * vendor.</li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * <li>{@link Constants#FRAMEWORK_LANGUAGE} - The language being used. See
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * ISO 639 for possible values.</li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * <li>{@link Constants#FRAMEWORK_OS_NAME} - The host computer operating
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * system.</li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * <li>{@link Constants#FRAMEWORK_OS_VERSION} - The host computer
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * operating system version number.</li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * <li>{@link Constants#FRAMEWORK_PROCESSOR} - The host computer processor
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * name.</li>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * </ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 * All bundles must have permission to read these properties.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
115 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * Note: The last four standard properties are used by the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * {@link Constants#BUNDLE_NATIVECODE} <code>Manifest</code> header's
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * matching algorithm for selecting native language code.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
120 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * @param key The name of the requested property.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * @return The value of the requested property, or <code>null</code> if
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * the property is undefined.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * @throws java.lang.SecurityException If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * appropriate <code>PropertyPermission</code> to read the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * property, and the Java Runtime Environment supports permissions.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 public String getProperty(String key);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * Returns the <code>Bundle</code> object associated with this
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * <code>BundleContext</code>. This bundle is called the context bundle.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
133 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * @return The <code>Bundle</code> object associated with this
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * <code>BundleContext</code>.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 public Bundle getBundle();
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * Installs a bundle from the specified location string. A bundle is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 * obtained from <code>location</code> as interpreted by the Framework in
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 * an implementation dependent manner.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * Every installed bundle is uniquely identified by its location string,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * typically in the form of a URL.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
148 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 * The following steps are required to install a bundle:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * <li>If a bundle containing the same location string is already
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * installed, the <code>Bundle</code> object for that bundle is returned.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
154 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * <li>The bundle's content is read from the location string. If this
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 * fails, a {@link BundleException} is thrown.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
157 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 * <li>The bundle's <code>Bundle-NativeCode</code> dependencies are
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * resolved. If this fails, a <code>BundleException</code> is thrown.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
160 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 * <li>The bundle's associated resources are allocated. The associated
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * resources minimally consist of a unique identifier and a persistent
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * storage area if the platform has file system support. If this step fails,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * a <code>BundleException</code> is thrown.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
165 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * <li>If the bundle has declared an Bundle-RequiredExecutionEnvironment
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * header, then the listed execution environments must be verified against
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
168 * the installed execution environments. If none of the listed execution
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * environments match an installed execution environment, a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * <code>BundleException</code> must be thrown.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
171 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * <li>The bundle's state is set to <code>INSTALLED</code>.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
173 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * <li>A bundle event of type {@link BundleEvent#INSTALLED} is fired.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
175 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 * <li>The <code>Bundle</code> object for the newly or previously
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * installed bundle is returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
179 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * <b>Postconditions, no exceptions thrown </b>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 * <ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 * <li><code>getState()</code> in {<code>INSTALLED</code>,<code>RESOLVED</code>}.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * <li>Bundle has a unique ID.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * </ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * <b>Postconditions, when an exception is thrown </b>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * <ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * <li>Bundle is not installed and no trace of the bundle exists.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * </ul>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
189 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 * @param location The location identifier of the bundle to install.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * @return The <code>Bundle</code> object of the installed bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * @throws BundleException If the installation failed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 * @throws java.lang.SecurityException If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 * appropriate <code>AdminPermission[installed bundle,LIFECYCLE]</code>, and the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 * Java Runtime Environment supports permissions.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 */
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
199 public Bundle installBundle(String location) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * Installs a bundle from the specified <code>InputStream</code> object.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
203 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * This method performs all of the steps listed in
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 * <code>BundleContext.installBundle(String location)</code>, except that
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * the bundle's content will be read from the <code>InputStream</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 * object. The location identifier string specified will be used as the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 * identity of the bundle.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
210 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * This method must always close the <code>InputStream</code> object, even
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * if an exception is thrown.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
214 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * @param location The location identifier of the bundle to install.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * @param input The <code>InputStream</code> object from which this bundle
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * will be read.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * @return The <code>Bundle</code> object of the installed bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * @throws BundleException If the provided stream cannot be read or the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * installation failed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * @throws java.lang.SecurityException If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * appropriate <code>AdminPermission[installed bundle,LIFECYCLE]</code>, and the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * Java Runtime Environment supports permissions.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * @see #installBundle(java.lang.String)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 */
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
228 public Bundle installBundle(String location, InputStream input) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * Returns the bundle with the specified identifier.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
232 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * @param id The identifier of the bundle to retrieve.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * @return A <code>Bundle</code> object or <code>null</code> if the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * identifier does not match any installed bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 public Bundle getBundle(long id);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * Returns a list of all installed bundles.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * This method returns a list of all bundles installed in the OSGi
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * environment at the time of the call to this method. However, since the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * Framework is a very dynamic environment, bundles can be installed or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * uninstalled at anytime.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
246 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * @return An array of <code>Bundle</code> objects, one object per
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * installed bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 public Bundle[] getBundles();
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * Adds the specified <code>ServiceListener</code> object with the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * specified <code>filter</code> to the context bundle's list of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * listeners. See {@link Filter} for a description of the filter syntax.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * <code>ServiceListener</code> objects are notified when a service has a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * lifecycle state change.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
258 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * If the context bundle's list of listeners already contains a listener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * <code>l</code> such that <code>(l==listener)</code>, then this
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 * method replaces that listener's filter (which may be <code>null</code>)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * with the specified one (which may be <code>null</code>).
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
264 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * The listener is called if the filter criteria is met. To filter based
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * upon the class of the service, the filter should reference the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 * {@link Constants#OBJECTCLASS} property. If <code>filter</code> is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 * <code>null</code>, all services are considered to match the filter.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
270 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 * When using a <code>filter</code>, it is possible that the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * <code>ServiceEvent</code>s for the complete lifecycle of a service
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * will not be delivered to the listener. For example, if the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * <code>filter</code> only matches when the property <code>x</code> has
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * the value <code>1</code>, the listener will not be called if the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * service is registered with the property <code>x</code> not set to the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * value <code>1</code>. Subsequently, when the service is modified
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * setting property <code>x</code> to the value <code>1</code>, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 * filter will match and the listener will be called with a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * <code>ServiceEvent</code> of type <code>MODIFIED</code>. Thus, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * listener will not be called with a <code>ServiceEvent</code> of type
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * <code>REGISTERED</code>.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
284 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * If the Java Runtime Environment supports permissions, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 * <code>ServiceListener</code> object will be notified of a service event
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * only if the bundle that is registering it has the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * <code>ServicePermission</code> to get the service using at least one of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * the named classes the service was registered under.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
291 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * @param listener The <code>ServiceListener</code> object to be added.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 * @param filter The filter criteria.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
294 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 * @throws InvalidSyntaxException If <code>filter</code> contains an
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 * invalid filter string that cannot be parsed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * longer valid.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
299 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * @see ServiceEvent
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 * @see ServiceListener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 * @see ServicePermission
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 public void addServiceListener(ServiceListener listener,
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
305 String filter) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * Adds the specified <code>ServiceListener</code> object to the context
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 * bundle's list of listeners.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
310 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * This method is the same as calling
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * <code>BundleContext.addServiceListener(ServiceListener listener,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * String filter)</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * with <code>filter</code> set to <code>null</code>.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
316 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 * @param listener The <code>ServiceListener</code> object to be added.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * longer valid.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
320 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * @see #addServiceListener(ServiceListener, String)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 public void addServiceListener(ServiceListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * Removes the specified <code>ServiceListener</code> object from the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 * context bundle's list of listeners.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
328 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 * If <code>listener</code> is not contained in this context bundle's list
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 * of listeners, this method does nothing.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
332 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 * @param listener The <code>ServiceListener</code> to be removed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 public void removeServiceListener(ServiceListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * Adds the specified <code>BundleListener</code> object to the context
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * bundle's list of listeners if not already present. BundleListener objects
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * are notified when a bundle has a lifecycle state change.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
343 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * If the context bundle's list of listeners already contains a listener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * <code>l</code> such that <code>(l==listener)</code>, this method
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * does nothing.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
348 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 * @param listener The <code>BundleListener</code> to be added.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 * @throws java.lang.SecurityException If listener is a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 * <code>SynchronousBundleListener</code> and the caller does not
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 * have the appropriate <code>AdminPermission[context bundle,LISTENER]</code>,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 * and the Java Runtime Environment supports permissions.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
356 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 * @see BundleEvent
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 * @see BundleListener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 public void addBundleListener(BundleListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 * Removes the specified <code>BundleListener</code> object from the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 * context bundle's list of listeners.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
365 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 * If <code>listener</code> is not contained in the context bundle's list
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 * of listeners, this method does nothing.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
369 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 * @param listener The <code>BundleListener</code> object to be removed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 * @throws java.lang.SecurityException If listener is a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 * <code>SynchronousBundleListener</code> and the caller does not
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 * have the appropriate <code>AdminPermission[context bundle,LISTENER]</code>,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 * and the Java Runtime Environment supports permissions.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 public void removeBundleListener(BundleListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 * Adds the specified <code>FrameworkListener</code> object to the context
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 * bundle's list of listeners if not already present. FrameworkListeners are
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 * notified of general Framework events.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
384 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 * If the context bundle's list of listeners already contains a listener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 * <code>l</code> such that <code>(l==listener)</code>, this method
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 * does nothing.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
389 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 * @param listener The <code>FrameworkListener</code> object to be added.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 * longer valid.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
393 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 * @see FrameworkEvent
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 * @see FrameworkListener
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 public void addFrameworkListener(FrameworkListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 * Removes the specified <code>FrameworkListener</code> object from the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 * context bundle's list of listeners.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
402 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 * If <code>listener</code> is not contained in the context bundle's list
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 * of listeners, this method does nothing.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
406 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 * @param listener The <code>FrameworkListener</code> object to be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * removed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 public void removeFrameworkListener(FrameworkListener listener);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 * Registers the specified service object with the specified properties
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 * under the specified class names into the Framework. A
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * <code>ServiceRegistration</code> object is returned. The
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * <code>ServiceRegistration</code> object is for the private use of the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * bundle registering the service and should not be shared with other
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 * bundles. The registering bundle is defined to be the context bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * Other bundles can locate the service by using either the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 * {@link #getServiceReferences} or {@link #getServiceReference} method.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
423 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * A bundle can register a service object that implements the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * {@link ServiceFactory} interface to have more flexibility in providing
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * service objects to other bundles.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
428 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * The following steps are required to register a service:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 * <li>If <code>service</code> is not a <code>ServiceFactory</code>,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 * an <code>IllegalArgumentException</code> is thrown if
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 * <code>service</code> is not an <code>instanceof</code> all the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * classes named.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * <li>The Framework adds these service properties to the specified
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * <code>Dictionary</code> (which may be <code>null</code>): a property
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 * named {@link Constants#SERVICE_ID} identifying the registration number of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * the service and a property named {@link Constants#OBJECTCLASS} containing
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * all the specified classes. If any of these properties have already been
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * specified by the registering bundle, their values will be overwritten by
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 * the Framework.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * <li>The service is added to the Framework service registry and may now
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 * be used by other bundles.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * <li>A service event of type {@link ServiceEvent#REGISTERED} is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 * fired.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 * <li>A <code>ServiceRegistration</code> object for this registration is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
450 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 * @param clazzes The class names under which the service can be located.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 * The class names in this array will be stored in the service's
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 * properties under the key {@link Constants#OBJECTCLASS}.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 * @param service The service object or a <code>ServiceFactory</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 * object.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 * @param properties The properties for this service. The keys in the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 * properties object must all be <code>String</code> objects. See
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 * {@link Constants} for a list of standard service property keys.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 * Changes should not be made to this object after calling this
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 * method. To update the service's properties the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 * {@link ServiceRegistration#setProperties} method must be called.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 * The set of properties may be <code>null</code> if the service
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * has no properties.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
464 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * @return A <code>ServiceRegistration</code> object for use by the bundle
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * registering the service to update the service's properties or to
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * unregister the service.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
468 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * @throws java.lang.IllegalArgumentException If one of the following is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * true:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 * <ul>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * <li><code>service</code> is <code>null</code>.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 * <li><code>service</code> is not a <code>ServiceFactory</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 * object and is not an instance of all the named classes in
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * <code>clazzes</code>.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * <li><code>properties</code> contains case variants of the same
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * key name.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * </ul>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
479 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 * @throws java.lang.SecurityException If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 * <code>ServicePermission</code> to register the service for all
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * the named classes and the Java Runtime Environment supports
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * permissions.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
484 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * longer valid.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
487 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 * @see ServiceRegistration
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 * @see ServiceFactory
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 public ServiceRegistration registerService(String[] clazzes,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 Object service, Dictionary properties);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 * Registers the specified service object with the specified properties
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 * under the specified class name with the Framework.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
497 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 * This method is otherwise identical to
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 * {@link #registerService(java.lang.String[], java.lang.Object,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 * java.util.Dictionary)} and is provided as a convenience when
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 * <code>service</code> will only be registered under a single class name.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 * Note that even in this case the value of the service's
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 * {@link Constants#OBJECTCLASS} property will be an array of strings,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * rather than just a single string.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
506 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 * @param clazz The class name under which the service can be located.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * @param service The service object or a <code>ServiceFactory</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * object.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
510 * @param properties The properties for this service.
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
511 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 * @return A <code>ServiceRegistration</code> object for use by the bundle
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 * registering the service to update the service's properties or to
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 * unregister the service.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
515 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 * @see #registerService(java.lang.String[], java.lang.Object,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 * java.util.Dictionary)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 public ServiceRegistration registerService(String clazz,
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 Object service, Dictionary properties);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 * Returns an array of <code>ServiceReference</code> objects. The returned
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 * array of <code>ServiceReference</code> objects contains services that
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 * were registered under the specified class, match the specified filter
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 * criteria, and the packages for the class names under which the services
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 * were registered match the context bundle's packages as defined in
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 * {@link ServiceReference#isAssignableTo(Bundle, String)}.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
531 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 * The list is valid at the time of the call to this method, however since
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 * the Framework is a very dynamic environment, services can be modified or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 * unregistered at anytime.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
536 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 * <code>filter</code> is used to select the registered service whose
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 * properties objects contain keys and values which satisfy the filter. See
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 * {@link Filter} for a description of the filter string syntax.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
541 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 * If <code>filter</code> is <code>null</code>, all registered services
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 * are considered to match the filter. If <code>filter</code> cannot be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 * parsed, an {@link InvalidSyntaxException} will be thrown with a human
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 * readable message where the filter became unparsable.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
547 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 * The following steps are required to select a set of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 * <code>ServiceReference</code> objects:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 * <li>If the filter string is not <code>null</code>, the filter string
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 * is parsed and the set <code>ServiceReference</code> objects of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 * registered services that satisfy the filter is produced. If the filter
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 * string is <code>null</code>, then all registered services are
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 * considered to satisfy the filter.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 * <li>If the Java Runtime Environment supports permissions, the set of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 * <code>ServiceReference</code> objects produced by the previous step is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 * reduced by checking that the caller has the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 * <code>ServicePermission</code> to get at least one of the class names
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 * under which the service was registered. If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 * correct permission for a particular <code>ServiceReference</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 * object, then it is removed from the set.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 * <li>If <code>clazz</code> is not <code>null</code>, the set is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * further reduced to those services that are an <code>instanceof</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * and were registered under the specified class. The complete list of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * classes of which a service is an instance and which were specified when
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 * the service was registered is available from the service's
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * {@link Constants#OBJECTCLASS} property.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * <li>The set is reduced one final time by cycling through each
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 * <code>ServiceReference</code> object and calling
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 * {@link ServiceReference#isAssignableTo(Bundle, String)} with the context
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 * bundle and each class name under which the <code>ServiceReference</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 * object was registered. For any given <code>ServiceReference</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * object, if any call to
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * {@link ServiceReference#isAssignableTo(Bundle, String)} returns
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 * <code>false</code>, then it is removed from the set of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 * <code>ServiceReference</code> objects.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 * <li>An array of the remaining <code>ServiceReference</code> objects is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 * returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
582 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 * @param clazz The class name with which the service was registered or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 * <code>null</code> for all services.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 * @param filter The filter criteria.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 * @return An array of <code>ServiceReference</code> objects or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 * <code>null</code> if no services are registered which satisfy
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 * the search.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 * @throws InvalidSyntaxException If <code>filter</code> contains an
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 * invalid filter string that cannot be parsed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 public ServiceReference[] getServiceReferences(String clazz,
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
595 String filter) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 * Returns an array of <code>ServiceReference</code> objects. The returned
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 * array of <code>ServiceReference</code> objects contains services that
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 * were registered under the specified class and match the specified filter
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 * criteria.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
602 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 * The list is valid at the time of the call to this method, however since
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 * the Framework is a very dynamic environment, services can be modified or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 * unregistered at anytime.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
607 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 * <code>filter</code> is used to select the registered service whose
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 * properties objects contain keys and values which satisfy the filter. See
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 * {@link Filter} for a description of the filter string syntax.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
612 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 * If <code>filter</code> is <code>null</code>, all registered services
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 * are considered to match the filter. If <code>filter</code> cannot be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 * parsed, an {@link InvalidSyntaxException} will be thrown with a human
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 * readable message where the filter became unparsable.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
618 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 * The following steps are required to select a set of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 * <code>ServiceReference</code> objects:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 * <li>If the filter string is not <code>null</code>, the filter string
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 * is parsed and the set <code>ServiceReference</code> objects of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 * registered services that satisfy the filter is produced. If the filter
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 * string is <code>null</code>, then all registered services are
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 * considered to satisfy the filter.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 * <li>If the Java Runtime Environment supports permissions, the set of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 * <code>ServiceReference</code> objects produced by the previous step is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 * reduced by checking that the caller has the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 * <code>ServicePermission</code> to get at least one of the class names
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 * under which the service was registered. If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 * correct permission for a particular <code>ServiceReference</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 * object, then it is removed from the set.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 * <li>If <code>clazz</code> is not <code>null</code>, the set is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 * further reduced to those services that are an <code>instanceof</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 * and were registered under the specified class. The complete list of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 * classes of which a service is an instance and which were specified when
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * the service was registered is available from the service's
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 * {@link Constants#OBJECTCLASS} property.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 * <li>An array of the remaining <code>ServiceReference</code> objects is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 * returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
644 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 * @param clazz The class name with which the service was registered or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 * <code>null</code> for all services.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 * @param filter The filter criteria.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 * @return An array of <code>ServiceReference</code> objects or
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 * <code>null</code> if no services are registered which satisfy
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 * the search.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 * @throws InvalidSyntaxException If <code>filter</code> contains an
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 * invalid filter string that cannot be parsed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 * @since 1.3
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 public ServiceReference[] getAllServiceReferences(String clazz,
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
658 String filter) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 * Returns a <code>ServiceReference</code> object for a service that
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 * implements and was registered under the specified class.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
663 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 * This <code>ServiceReference</code> object is valid at the time of the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 * call to this method, however as the Framework is a very dynamic
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 * environment, services can be modified or unregistered at anytime.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
668 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 * This method is the same as calling
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 * {@link BundleContext#getServiceReferences(String, String)} with a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 * <code>null</code> filter string. It is provided as a convenience for
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 * when the caller is interested in any service that implements the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 * specified class.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 * If multiple such services exist, the service with the highest ranking (as
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * specified in its {@link Constants#SERVICE_RANKING} property) is returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 * If there is a tie in ranking, the service with the lowest service ID (as
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 * specified in its {@link Constants#SERVICE_ID} property); that is, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 * service that was registered first is returned.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
682 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 * @param clazz The class name with which the service was registered.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 * @return A <code>ServiceReference</code> object, or <code>null</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 * if no services are registered which implement the named class.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 * @see #getServiceReferences(String, String)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 public ServiceReference getServiceReference(String clazz);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 * Returns the specified service object for a service.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 * A bundle's use of a service is tracked by the bundle's use count of that
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 * service. Each time a service's service object is returned by
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 * {@link #getService(ServiceReference)} the context bundle's use count for
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 * that service is incremented by one. Each time the service is released by
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 * {@link #ungetService(ServiceReference)} the context bundle's use count
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 * for that service is decremented by one.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 * When a bundle's use count for a service drops to zero, the bundle should
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 * no longer use that service.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
704 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * This method will always return <code>null</code> when the service
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 * associated with this <code>reference</code> has been unregistered.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
708 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 * The following steps are required to get the service object:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 * <li>If the service has been unregistered, <code>null</code> is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 * returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 * <li>The context bundle's use count for this service is incremented by
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 * one.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 * <li>If the context bundle's use count for the service is currently one
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 * and the service was registered with an object implementing the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 * <code>ServiceFactory</code> interface, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 * {@link ServiceFactory#getService(Bundle, ServiceRegistration)} method is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 * called to create a service object for the context bundle. This service
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 * object is cached by the Framework. While the context bundle's use count
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 * for the service is greater than zero, subsequent calls to get the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 * services's service object for the context bundle will return the cached
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 * service object. <br>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 * If the service object returned by the <code>ServiceFactory</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 * object is not an <code>instanceof</code> all the classes named when the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 * service was registered or the <code>ServiceFactory</code> object throws
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 * an exception, <code>null</code> is returned and a Framework event of
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 * type {@link FrameworkEvent#ERROR} is fired.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 * <li>The service object for the service is returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
732 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 * @param reference A reference to the service.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 * @return A service object for the service associated with
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 * <code>reference</code> or <code>null</code> if the service is
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 * not registered or does not implement the classes under which it
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 * was registered in the case of a <code>ServiceFactory</code>.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 * @throws java.lang.SecurityException If the caller does not have the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 * <code>ServicePermission</code> to get the service using at
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 * least one of the named classes the service was registered under
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 * and the Java Runtime Environment supports permissions.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 * @see #ungetService(ServiceReference)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 * @see ServiceFactory
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 public Object getService(ServiceReference reference);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 * Releases the service object referenced by the specified
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 * <code>ServiceReference</code> object. If the context bundle's use count
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 * for the service is zero, this method returns <code>false</code>.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 * Otherwise, the context bundle's use count for the service is decremented
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 * by one.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
755 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 * The service's service object should no longer be used and all references
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 * to it should be destroyed when a bundle's use count for the service drops
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 * to zero.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
760 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 * The following steps are required to unget the service object:
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 * <ol>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 * <li>If the context bundle's use count for the service is zero or the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 * service has been unregistered, <code>false</code> is returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 * <li>The context bundle's use count for this service is decremented by
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 * one.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 * <li>If the context bundle's use count for the service is currently zero
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 * and the service was registered with a <code>ServiceFactory</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 * object, the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 * {@link ServiceFactory#ungetService(Bundle, ServiceRegistration, Object)}
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 * method is called to release the service object for the context bundle.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 * <li><code>true</code> is returned.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * </ol>
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
775 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 * @param reference A reference to the service to be released.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 * @return <code>false</code> if the context bundle's use count for the
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 * service is zero or if the service has been unregistered;
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 * <code>true</code> otherwise.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 * @see #getService
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 * @see ServiceFactory
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 public bool ungetService(ServiceReference reference);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 * Creates a <code>File</code> object for a file in the persistent storage
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 * area provided for the bundle by the Framework. This method will return
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 * <code>null</code> if the platform does not have file system support.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
791 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 * A <code>File</code> object for the base directory of the persistent
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 * storage area provided for the context bundle by the Framework can be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * obtained by calling this method with an empty string as
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 * <code>filename</code>.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
797 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 * If the Java Runtime Environment supports permissions, the Framework will
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 * ensure that the bundle has the <code>java.io.FilePermission</code> with
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 * actions <code>read</code>,<code>write</code>,<code>delete</code>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * for all files (recursively) in the persistent storage area provided for
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * the context bundle.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
804 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * @param filename A relative name to the file to be accessed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 * @return A <code>File</code> object that represents the requested file
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * or <code>null</code> if the platform does not have file system
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * support.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 * longer valid.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 */
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 public File getDataFile(String filename);
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 /**
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 * Creates a <code>Filter</code> object. This <code>Filter</code> object
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 * may be used to match a <code>ServiceReference</code> object or a
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 * <code>Dictionary</code> object.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
818 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * <p>
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * If the filter cannot be parsed, an {@link InvalidSyntaxException} will be
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 * thrown with a human readable message where the filter became unparsable.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
822 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 * @param filter The filter string.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 * @return A <code>Filter</code> object encapsulating the filter string.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 * @throws InvalidSyntaxException If <code>filter</code> contains an
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 * invalid filter string that cannot be parsed.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 * @throws NullPointerException If <code>filter</code> is null.
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 * @throws java.lang.IllegalStateException If this BundleContext is no
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 * longer valid.
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
830 *
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 * @since 1.1
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 * @see "Framework specification for a description of the filter string syntax."
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 * @see FrameworkUtil#createFilter(String)
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 */
105
Frank Benoit <benoit@tionex.de>
parents: 86
diff changeset
835 public Filter createFilter(String filter) ;
86
12b890a6392a Work on databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 }