|
OSGi™ Service Platform Release 4 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
An installed bundle in the Framework.
A Bundle object is the access point to define the lifecycle of
an installed bundle. Each bundle installed in the OSGi environment must have
an associated Bundle object.
A bundle must have a unique identity, a long, chosen by the
Framework. This identity must not change during the lifecycle of a bundle,
even when the bundle is updated. Uninstalling and then reinstalling the
bundle must create a new unique identity.
A bundle can be in one of six states:
Values assigned to these states have no specified ordering; they represent bit values that may be ORed together to determine if a bundle is in one of the valid states.
A bundle should only execute code when its state is one of
STARTING,ACTIVE, or STOPPING.
An UNINSTALLED bundle can not be set to another state; it is a
zombie and can only be reached because references are kept somewhere.
The Framework is the only entity that is allowed to create
Bundle objects, and these objects are only valid within the
Framework that created them.
| Field Summary | |
static int |
ACTIVE
This bundle is now running. |
static int |
INSTALLED
This bundle is installed but not yet resolved. |
static int |
RESOLVED
This bundle is resolved and is able to be started. |
static int |
STARTING
This bundle is in the process of starting. |
static int |
STOPPING
This bundle is in the process of stopping. |
static int |
UNINSTALLED
This bundle is uninstalled and may not be used. |
| Method Summary | |
java.util.Enumeration |
findEntries(java.lang.String path,
java.lang.String filePattern,
boolean recurse)
Returns entries in this bundle and its attached fragments. |
long |
getBundleId()
Returns this bundle's identifier. |
java.net.URL |
getEntry(java.lang.String name)
Returns a URL to the specified entry in this bundle. |
java.util.Enumeration |
getEntryPaths(java.lang.String path)
Returns an Enumeration of all the paths ( String objects)
to entries within the bundle whose longest sub-path matches the supplied
path argument. |
java.util.Dictionary |
getHeaders()
Returns this bundle's Manifest headers and values. |
java.util.Dictionary |
getHeaders(java.lang.String locale)
Returns this bundle's Manifest headers and values localized to the specified locale. |
long |
getLastModified()
Returns the time when this bundle was last modified. |
java.lang.String |
getLocation()
Returns this bundle's location identifier. |
ServiceReference[] |
getRegisteredServices()
Returns this bundle's ServiceReference list for all
services it has registered or null if this bundle has no
registered services. |
java.net.URL |
getResource(java.lang.String name)
Find the specified resource from this bundle. |
java.util.Enumeration |
getResources(java.lang.String name)
Find the specified resources from this bundle. |
ServiceReference[] |
getServicesInUse()
Returns this bundle's ServiceReference list for all
services it is using or returns null if this bundle is not
using any services. |
int |
getState()
Returns this bundle's current state. |
java.lang.String |
getSymbolicName()
Returns the symbolic name of this bundle as specified by its Bundle-SymbolicName manifest header. |
boolean |
hasPermission(java.lang.Object permission)
Determines if this bundle has the specified permissions. |
java.lang.Class |
loadClass(java.lang.String name)
Loads the specified class using this bundle's classloader. |
void |
start()
Starts this bundle. |
void |
stop()
Stops this bundle. |
void |
uninstall()
Uninstalls this bundle. |
void |
update()
Updates this bundle. |
void |
update(java.io.InputStream in)
Updates this bundle from an InputStream. |
| Field Detail |
public static final int UNINSTALLED
The UNINSTALLED state is only visible after a bundle is
uninstalled; the bundle is in an unusable state but references to the
Bundle object may still be available and used for
introspection.
The value of UNINSTALLED is 0x00000001.
public static final int INSTALLED
A bundle is in the INSTALLED state when it has been
installed in the Framework but cannot run.
This state is visible if the bundle's code dependencies are not resolved.
The Framework may attempt to resolve an INSTALLED bundle's
code dependencies and move the bundle to the RESOLVED
state.
The value of INSTALLED is 0x00000002.
public static final int RESOLVED
A bundle is in the RESOLVED state when the Framework has
successfully resolved the bundle's dependencies. These dependencies
include:
Constants.BUNDLE_CLASSPATH
Manifest header.
Constants.EXPORT_PACKAGE and Constants.IMPORT_PACKAGE
Manifest headers.
Constants.REQUIRE_BUNDLE Manifest header.
Constants.FRAGMENT_HOST Manifest header.
Note that the bundle is not active yet. A bundle must be put in the
RESOLVED state before it can be started. The Framework may
attempt to resolve a bundle at any time.
The value of RESOLVED is 0x00000004.
public static final int STARTING
A bundle is in the STARTING state when the start()
method is active. A bundle must be in this state when the bundle's
BundleActivator.start(org.osgi.framework.BundleContext) is called. If this method completes without
exception, then the bundle has successfully started and must move to the
ACTIVE state.
The value of STARTING is 0x00000008.
public static final int STOPPING
A bundle is in the STOPPING state when the stop()
method is active. A bundle must be in this state when the bundle's
BundleActivator.stop(org.osgi.framework.BundleContext) method is called. When this method completes
the bundle is stopped and must move to the RESOLVED state.
The value of STOPPING is 0x00000010.
public static final int ACTIVE
A bundle is in the ACTIVE state when it has been
successfully started.
The value of ACTIVE is 0x00000020.
| Method Detail |
public int getState()
A bundle can be in only one state at any time.
UNINSTALLED,INSTALLED,
RESOLVED,STARTING,
STOPPING,ACTIVE.
public void start()
throws BundleException
If the Framework implements the optional Start Level service and the current start level is less than this bundle's start level, then the Framework must persistently mark this bundle as started and delay the starting of this bundle until the Framework's current start level becomes equal or more than the bundle's start level.
Otherwise, the following steps are required to start a bundle:
UNINSTALLED then an
IllegalStateException is thrown.
STARTING or
STOPPING then this method must wait for this bundle to
change state before continuing. If this does not occur in a reasonable
time, a BundleException is thrown to indicate this bundle
was unable to be started.
ACTIVE then this method
returns immediately.
RESOLVED, an attempt
is made to resolve this bundle's package dependencies. If the Framework
cannot resolve this bundle, a BundleException is thrown.
STARTING.
BundleEvent.STARTING is fired. This event is only delivered to
SynchronousBundleListeners. It is not delivered to BundleListeners.
BundleActivator.start(org.osgi.framework.BundleContext) method of this bundle's
BundleActivator, if one is specified, is called. If the
BundleActivator is invalid or throws an exception, this
bundle's state is set back to RESOLVED.BundleException is then thrown.
UNINSTALLED, because the
bundle was uninstalled while the BundleActivator.start
method was running, a BundleException is thrown.
ACTIVE.
BundleEvent.STARTED is fired.
getState() in {INSTALLED}, {
RESOLVED}.
getState() in {ACTIVE}.
BundleActivator.start() has been called and did not
throw an exception.
getState() not in {STARTING}, {
ACTIVE}.
BundleException - If this bundle could not be started. This could
be because a code dependency could not be resolved or the
specified BundleActivator could not be loaded or
threw an exception.
java.lang.IllegalStateException - If this bundle has been
uninstalled or this bundle tries to change its own state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,EXECUTE], and the
Java Runtime Environment supports permissions.
public void stop()
throws BundleException
The following steps are required to stop a bundle:
UNINSTALLED then an
IllegalStateException is thrown.
STARTING or
STOPPING then this method must wait for this bundle to
change state before continuing. If this does not occur in a reasonable
time, a BundleException is thrown to indicate this bundle
was unable to be stopped.
ACTIVE then this method
returns immediately.
STOPPING.
BundleEvent.STOPPING is fired. This event is only delivered to
SynchronousBundleListeners. It is not delivered to BundleListeners.
BundleActivator.stop(org.osgi.framework.BundleContext) method of this bundle's
BundleActivator, if one is specified, is called. If that
method throws an exception, this method must continue to stop this
bundle. A BundleException must be thrown after completion
of the remaining steps.
UNINSTALLED, because the
bundle was uninstalled while the BundleActivator.stop
method was running, a BundleException must be thrown.
RESOLVED.
BundleEvent.STOPPED is fired.
getState() in {ACTIVE}.
getState() not in {ACTIVE,
STOPPING}.
BundleActivator.stop has been called and did not
throw an exception.
BundleException - If this bundle's BundleActivator
could not be loaded or threw an exception.
java.lang.IllegalStateException - If this bundle has been
uninstalled or this bundle tries to change its own state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,EXECUTE], and the
Java Runtime Environment supports permissions.
public void update()
throws BundleException
If this bundle's state is ACTIVE, it must be stopped
before the update and started after the update successfully completes.
If the bundle being updated has exported any packages, these packages
must not be updated. Instead, the previous package version must remain
exported until the PackageAdmin.refreshPackages method has
been has been called or the Framework is relaunched.
The following steps are required to update a bundle:
UNINSTALLED then an
IllegalStateException is thrown.
ACTIVE,
STARTING or STOPPING, the bundle is
stopped as described in the Bundle.stop method. If
Bundle.stop throws an exception, the exception is rethrown
terminating the update.
Constants.BUNDLE_UPDATELOCATION Manifest header (if available) or
the bundle's original location.
BundleException must be
thrown after completion of the remaining steps.
BundleException must be thrown after completion of the
remaining steps.
INSTALLED.
BundleEvent.UPDATED is fired.
ACTIVE, the
updated bundle is started as described in the Bundle.start
method. If Bundle.start throws an exception, a Framework
event of type FrameworkEvent.ERROR is fired containing the
exception.
getState() not in {UNINSTALLED}.
getState() in {INSTALLED,
RESOLVED,ACTIVE}.
getState() in {INSTALLED,
RESOLVED,ACTIVE}.
BundleException - If the update fails.
java.lang.IllegalStateException - If this bundle has been
uninstalled or this bundle tries to change its own state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,LIFECYCLE] for both
the current bundle and the updated bundle, and the Java Runtime
Environment supports permissions.stop(),
start()
public void update(java.io.InputStream in)
throws BundleException
InputStream.
This method performs all the steps listed in Bundle.update(),
except the bundle must be read from the supplied InputStream,
rather than a URL.
This method must always close the InputStream when it is
done, even if an exception is thrown.
in - The InputStream from which to read the new
bundle.
BundleException - If the provided stream cannot be read or the
update fails.
java.lang.IllegalStateException - If this bundle has been
uninstalled or this bundle tries to change its own state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,LIFECYCLE] for both
the current bundle and the updated bundle, and the Java Runtime
Environment supports permissions.update()
public void uninstall()
throws BundleException
This method causes the Framework to notify other bundles that this bundle
is being uninstalled, and then puts this bundle into the
UNINSTALLED state. The Framework must remove any resources
related to this bundle that it is able to remove.
If this bundle has exported any packages, the Framework must continue to
make these packages available to their importing bundles until the
PackageAdmin.refreshPackages method has been called or the
Framework is relaunched.
The following steps are required to uninstall a bundle:
UNINSTALLED then an
IllegalStateException is thrown.
ACTIVE,
STARTING or STOPPING, this bundle is
stopped as described in the Bundle.stop method. If
Bundle.stop throws an exception, a Framework event of type
FrameworkEvent.ERROR is fired containing the exception.
UNINSTALLED.
BundleEvent.UNINSTALLED is fired.
getState() not in {UNINSTALLED}.
getState() in {UNINSTALLED}.
getState() not in {UNINSTALLED}.
BundleException - If the uninstall failed. This can occur if
another thread is attempting to change the bundle's state and
does not complete in a timely manner.
java.lang.IllegalStateException - If this bundle has been
uninstalled or this bundle tries to change its own state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,LIFECYCLE], and the
Java Runtime Environment supports permissions.stop()public java.util.Dictionary getHeaders()
Manifest header names are case-insensitive. The methods of the returned
Dictionary object must operate on header names in a
case-insensitive manner.
If a Manifest header value starts with "%", it must be
localized according to the default locale.
For example, the following Manifest headers and values are included if they are present in the Manifest file:
Bundle-Name
Bundle-Vendor
Bundle-Version
Bundle-Description
Bundle-DocURL
Bundle-ContactAddress
This method must continue to return Manifest header information while
this bundle is in the UNINSTALLED state.
Dictionary object containing this bundle's
Manifest headers and values.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,METADATA], and the
Java Runtime Environment supports permissions.Constants.BUNDLE_LOCALIZATIONpublic long getBundleId()
A bundle's unique identifier has the following attributes:
long.
This method must continue to return this bundle's unique identifier while
this bundle is in the UNINSTALLED state.
public java.lang.String getLocation()
The bundle location identifier is the location passed to
BundleContext.installBundle when a bundle is installed.
The bundle location identifier does not change while the bundle remains
installed, even if the bundle is updated.
This method must continue to return this bundle's location identifier
while this bundle is in the UNINSTALLED state.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,METADATA], and the
Java Runtime Environment supports permissions.public ServiceReference[] getRegisteredServices()
ServiceReference list for all
services it has registered or null if this bundle has no
registered services.
If the Java runtime supports permissions, a ServiceReference
object to a service is included in the returned list only if the caller
has the ServicePermission to get the service using at
least one of the named classes the service was registered under.
The list is valid at the time of the call to this method, however, as the Framework is a very dynamic environment, services can be modified or unregistered at anytime.
ServiceReference objects or
null.
java.lang.IllegalStateException - If this bundle has been
uninstalled.ServiceRegistration,
ServiceReference,
ServicePermissionpublic ServiceReference[] getServicesInUse()
ServiceReference list for all
services it is using or returns null if this bundle is not
using any services. A bundle is considered to be using a service if its
use count for that service is greater than zero.
If the Java Runtime Environment supports permissions, a
ServiceReference object to a service is included in the
returned list only if the caller has the ServicePermission
to get the service using at least one of the named classes the service
was registered under.
The list is valid at the time of the call to this method, however, as the Framework is a very dynamic environment, services can be modified or unregistered at anytime.
ServiceReference objects or
null.
java.lang.IllegalStateException - If this bundle has been
uninstalled.ServiceReference,
ServicePermissionpublic boolean hasPermission(java.lang.Object permission)
If the Java Runtime Environment does not support permissions, this method
always returns true.
permission is of type Object to avoid
referencing the java.security.Permission class directly.
This is to allow the Framework to be implemented in Java environments
which do not support permissions.
If the Java Runtime Environment does support permissions, this bundle and
all its resources including embedded JAR files, belong to the same
java.security.ProtectionDomain; that is, they must share
the same set of permissions.
permission - The permission to verify.
true if this bundle has the specified permission
or the permissions possessed by this bundle imply the specified
permission; false if this bundle does not have the
specified permission or permission is not an
instanceof java.security.Permission.
java.lang.IllegalStateException - If this bundle has been
uninstalled.public java.net.URL getResource(java.lang.String name)
INSTALLED, this method must
attempt to resolve the bundle before attempting to get the specified resource.
If this bundle cannot be resolved, then only this bundle
must be searched for the specified resource. Imported packages cannot be
searched when a bundle has not been resolved. If this bundle is a
fragment bundle then null is returned.
name - The name of the resource. See
java.lang.ClassLoader.getResource for a description
of the format of a resource name.
null if the
resource could not be found or if this bundle is a fragment
bundle or if the caller does not have the appropriate
AdminPermission[this,RESOURCE], and the Java Runtime
Environment supports permissions.
java.lang.IllegalStateException - If this bundle has been
uninstalled.getEntry(java.lang.String),
findEntries(java.lang.String, java.lang.String, boolean)public java.util.Dictionary getHeaders(java.lang.String locale)
This method performs the same function as
Bundle.getHeaders() except the manifest header values are
localized to the specified locale.
If a Manifest header value starts with "%", it must be localized according to the specified locale. If a locale is specified and cannot be found, then the header values must be returned using the default locale. Localizations are searched for in the following order:
bn + "_" + Ls + "_" + Cs + "_" + Vs bn + "_" + Ls + "_" + Cs bn + "_" + Ls bn + "_" + Ld + "_" + Cd + "_" + Vd bn + "_" + Ld + "_" + Cd bn + "_" + Ld bnWhere
bn is the bundle localization basename, Ls,
Cs and Vs are the specified locale (language,
country, variant) and Ld, Cd and Vd
are the default locale (language, country, variant).
If null is specified as the locale string, the header
values must be localized using the default locale. If the empty string
("") is specified as the locale string, the header values must
not be localized and the raw (unlocalized) header values, including any
leading "%", must be returned.
This method must continue to return Manifest header information while
this bundle is in the UNINSTALLED state, however the
header values must only be available in the raw and default locale
values.
locale - The locale name into which the header values are to be
localized. If the specified locale is null then the
locale returned by java.util.Locale.getDefault is
used. If the specified locale is the empty string, this method
will return the raw (unlocalized) manifest headers including any
leading "%".
Dictionary object containing this bundle's
Manifest headers and values.
java.lang.SecurityException - If the caller does not have the
appropriate AdminPermission[this,METADATA], and the
Java Runtime Environment supports permissions.getHeaders(),
Constants.BUNDLE_LOCALIZATIONpublic java.lang.String getSymbolicName()
Bundle-SymbolicName manifest header. The name must be
unique, it is recommended to use a reverse domain name naming convention
like that used for java packages. If the bundle does not have a specified
symbolic name then null is returned.
This method must continue to return this bundle's symbolic name while
this bundle is in the UNINSTALLED state.
public java.lang.Class loadClass(java.lang.String name)
throws java.lang.ClassNotFoundException
If the bundle is a fragment bundle then this method must throw a
ClassNotFoundException.
If this bundle's state is INSTALLED, this method must
attempt to resolve the bundle before attempting to load the class.
If the bundle cannot be resolved, a Framework event of type
FrameworkEvent.ERROR is fired containing a
BundleException with details of the reason the bundle
could not be resolved. This method must then throw a
ClassNotFoundException.
If this bundle's state is UNINSTALLED, then an
IllegalStateException is thrown.
name - The name of the class to load.
java.lang.ClassNotFoundException - If no such class can be found or
if this bundle is a fragment bundle or if the caller does not
have the appropriate AdminPermission[this,CLASS], and
the Java Runtime Environment supports permissions.
java.lang.IllegalStateException - If this bundle has been
uninstalled.
public java.util.Enumeration getResources(java.lang.String name)
throws java.io.IOException
INSTALLED, this method must
attempt to resolve the bundle before attempting to get the specified resources.
If this bundle cannot be resolved, then only this bundle
must be searched for the specified resources. Imported packages cannot be
searched when a bundle has not been resolved. If this bundle is a
fragment bundle then null is returned.
name - The name of the resource. See
java.lang.ClassLoader.getResources for a
description of the format of a resource name.
null if the resource could not be found or if this
bundle is a fragment bundle or if the caller does not have the
appropriate AdminPermission[this,RESOURCE], and the
Java Runtime Environment supports permissions.
java.lang.IllegalStateException - If this bundle has been
uninstalled.
java.io.IOException - If there is an I/O error.public java.util.Enumeration getEntryPaths(java.lang.String path)
String objects)
to entries within the bundle whose longest sub-path matches the supplied
path argument. The bundle's classloader is not used to search for
entries. Only the contents of the bundle is searched. A specified path of
"/" indicates the root of the bundle.
Returned paths indicating subdirectory paths end with a "/". The returned paths are all relative to the root of the bundle.
path - The path name for which to return entry paths.
String
objects) or null if no entry could be found or if
the caller does not have the appropriate
AdminPermission[this,RESOURCE] and the Java Runtime
Environment supports permissions.
java.lang.IllegalStateException - If this bundle has been
uninstalled.public java.net.URL getEntry(java.lang.String name)
name - The name of the entry. See
java.lang.ClassLoader.getResource for a description
of the format of a resource name.
null if no entry
could be found or if the caller does not have the appropriate
AdminPermission[this,RESOURCE] and the Java Runtime
Environment supports permissions.
java.lang.IllegalStateException - If this bundle has been
uninstalled.public long getLastModified()
The time value is the number of milliseconds since January 1, 1970, 00:00:00 GMT.
public java.util.Enumeration findEntries(java.lang.String path,
java.lang.String filePattern,
boolean recurse)
INSTALLED, this method must
attempt to resolve the bundle before attempting to find entries.
This method is intended to be used to obtain configuration, setup, localization and other information from this bundle. This method takes into account that the "contents" of this bundle can be extended with fragments. This "bundle space" is not a namespace with unique members; the same entry name can be present multiple times. This method therefore returns an enumeration of URL objects. These URLs can come from different JARs but have the same path name. This method can either return only entries in the specified path or recurse into subdirectories returning entries in the directory tree beginning at the specified path. Fragments can be attached after this bundle is resolved, possibly changing the set of URLs returned by this method. If this bundle is not resolved, only the entries in the JAR file of this bundle are returned.
Examples:
// List all XML files in the OSGI-INF directory and below
Enumeration e = b.findEntries("OSGI-INF", "*.xml", true);
// Find a specific localization file
Enumeration e = b.findEntries("OSGI-INF/l10n",
"bundle_nl_DU.properties",
false);
if (e.hasMoreElements())
return (URL) e.nextElement();
path - The path name in which to look. A specified path of
"/" indicates the root of the bundle. Path is relative
to the root of the bundle and must not be null.filePattern - The file name pattern for selecting entries in the
specified path. The pattern is only matched against the last
element of the entry path and it supports substring matching, as
specified in the Filter specification, using the wildcard
character ("*"). If null is specified, this is
equivalent to "*" and matches all files.recurse - If true, recurse into subdirectories.
Otherwise only return entries from the given directory.
null if an entry could not be found or if the
caller does not have the appropriate
AdminPermission[this,RESOURCE], and the Java Runtime
Environment supports permissions. The URLs are sorted such that
entries from this bundle are returned first followed by the
entries from attached fragments in ascending bundle id order. If
this bundle is a fragment, then only matching entries in this
fragment are returned.
|
OSGi™ Service Platform Release 4 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||