Class BundleImpl
- java.lang.Object
-
- org.apache.felix.framework.BundleImpl
-
- All Implemented Interfaces:
java.lang.Comparable<Bundle>
,Bundle
,BundleReference
,BundleRevisions
- Direct Known Subclasses:
Felix
class BundleImpl extends java.lang.Object implements Bundle, BundleRevisions
-
-
Field Summary
Fields Modifier and Type Field Description private Felix
__m_felix
private BundleActivator
m_activator
private BundleArchive
m_archive
private java.util.Map
m_cachedHeaders
private long
m_cachedHeadersTimestamp
private static java.lang.ClassLoader
m_classloader
private BundleContext
m_context
private Bundle
m_installingBundle
private int
m_lockCount
private java.lang.Thread
m_lockThread
private java.util.List<BundleRevisionImpl>
m_revisions
private static SecurityManagerEx
m_smEx
private boolean
m_stale
private int
m_state
private java.util.Map
m_uninstalledHeaders
private boolean
m_useDeclaredActivationPolicy
-
Fields inherited from interface org.osgi.framework.Bundle
ACTIVE, INSTALLED, RESOLVED, SIGNERS_ALL, SIGNERS_TRUSTED, START_ACTIVATION_POLICY, START_TRANSIENT, STARTING, STOP_TRANSIENT, STOPPING, UNINSTALLED
-
-
Constructor Summary
Constructors Constructor Description BundleImpl()
This constructor is used by the system bundle (i.e., the framework), since it needs a constructor that does not throw an exception.BundleImpl(Felix felix, Bundle installingBundle, BundleArchive archive)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
__setState(int i)
(package private) BundleContext
_getBundleContext()
(package private) java.lang.String
_getLocation()
<A> A
adapt(java.lang.Class<A> type)
Adapt this bundle to the specified type.(package private) void
addRevision(BundleRevisionImpl revision)
(package private) <A> void
checkAdapt(java.lang.Class<A> type)
(package private) void
close()
(package private) void
closeAndDelete()
private void
closeRevisions()
int
compareTo(Bundle t)
private static java.util.List<java.lang.String>
createLocalizationResourceList(java.lang.String basename, java.lang.String locale)
private static java.util.List<BundleRevision>
createLocalizationRevisionList(BundleRevision br)
private BundleRevisionImpl
createRevision(boolean isUpdate)
java.util.Enumeration
findEntries(java.lang.String path, java.lang.String filePattern, boolean recurse)
Returns entries in this bundle and its attached fragments.(package private) BundleActivator
getActivator()
(package private) BundleArchive
getArchive()
Bundle
getBundle()
Returns theBundle
object associated with thisBundleReference
.BundleContext
getBundleContext()
Returns this bundle'sBundleContext
.long
getBundleId()
Returns this bundle's unique identifier.(package private) java.util.Map
getCurrentLocalizedHeader(java.lang.String locale)
java.io.File
getDataFile(java.lang.String filename)
Creates aFile
object for a file in the persistent storage area provided for this bundle by the Framework.java.net.URL
getEntry(java.lang.String name)
Returns a URL to the entry at the specified path in this bundle.java.util.Enumeration
getEntryPaths(java.lang.String path)
Returns an Enumeration of all the paths (String
objects) to entries within this bundle whose longest sub-path matches the specified path.(package private) Felix
getFramework()
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.(package private) java.lang.Thread
getLockingThread()
(package private) int
getPersistentState()
(package private) java.security.ProtectionDomain
getProtectionDomain()
ServiceReference[]
getRegisteredServices()
Returns an array of service references corresponding to the bundle's registered services.java.net.URL
getResource(java.lang.String name)
Returns a URL to a named resource in the bundle.java.util.Enumeration
getResources(java.lang.String name)
Find the specified resources from this bundle's class loader.java.util.List<BundleRevision>
getRevisions()
Return the bundle revisions for thereferenced
bundle.ServiceReference[]
getServicesInUse()
Returns this bundle'sServiceReference
list for all services it is using or returnsnull
if this bundle is not using any services.java.util.Map
getSignerCertificates(int signersType)
Return the certificates for the signers of this bundle and the certificate chains for those signers.(package private) int
getStartLevel(int defaultLevel)
int
getState()
Returns this bundle's current state.java.lang.String
getSymbolicName()
Returns the symbolic name of this bundle as specified by itsBundle-SymbolicName
manifest header.Version
getVersion()
Returns the version of this bundle as specified by itsBundle-Version
manifest header.boolean
hasPermission(java.lang.Object obj)
Determines if this bundle has the specified permissions.(package private) boolean
hasRevision(BundleRevision revision)
Determines if the specified module is associated with this bundle.(package private) boolean
isDeclaredActivationPolicyUsed()
(package private) boolean
isExtension()
(package private) boolean
isLockable()
(package private) boolean
isRemovalPending()
(package private) boolean
isStale()
java.lang.Class
loadClass(java.lang.String name)
Loads the specified class using this bundle's class loader.(package private) void
lock()
(package private) void
refresh()
(package private) void
revise(java.lang.String location, java.io.InputStream is)
(package private) boolean
rollbackRevise()
(package private) void
setActivator(BundleActivator activator)
(package private) void
setBundleContext(BundleContext context)
(package private) void
setDeclaredActivationPolicyUsed(boolean b)
(package private) void
setLastModified(long l)
(package private) void
setPersistentStateActive()
(package private) void
setPersistentStateInactive()
(package private) void
setPersistentStateStarting()
(package private) void
setPersistentStateUninstalled()
(package private) void
setStartLevel(int i)
void
start()
Starts this bundle with no options.void
start(int options)
Starts this bundle.void
stop()
Stops this bundle with no options.void
stop(int options)
Stops this bundle.java.lang.String
toString()
void
uninstall()
Uninstalls this bundle.(package private) void
unlock()
void
update()
Updates this bundle.void
update(java.io.InputStream is)
Updates this bundle from anInputStream
.private void
updateHeaderCache(java.lang.String locale, java.util.Map localizedHeaders)
-
-
-
Field Detail
-
__m_felix
private final Felix __m_felix
-
m_archive
private final BundleArchive m_archive
-
m_revisions
private final java.util.List<BundleRevisionImpl> m_revisions
-
m_state
private volatile int m_state
-
m_useDeclaredActivationPolicy
private boolean m_useDeclaredActivationPolicy
-
m_activator
private BundleActivator m_activator
-
m_context
private volatile BundleContext m_context
-
m_cachedHeaders
private final java.util.Map m_cachedHeaders
-
m_uninstalledHeaders
private java.util.Map m_uninstalledHeaders
-
m_cachedHeadersTimestamp
private long m_cachedHeadersTimestamp
-
m_installingBundle
private final Bundle m_installingBundle
-
m_stale
private boolean m_stale
-
m_lockCount
private int m_lockCount
-
m_lockThread
private java.lang.Thread m_lockThread
-
m_smEx
private static final SecurityManagerEx m_smEx
-
m_classloader
private static final java.lang.ClassLoader m_classloader
-
-
Constructor Detail
-
BundleImpl
BundleImpl()
This constructor is used by the system bundle (i.e., the framework), since it needs a constructor that does not throw an exception.
-
BundleImpl
BundleImpl(Felix felix, Bundle installingBundle, BundleArchive archive) throws java.lang.Exception
- Throws:
java.lang.Exception
-
-
Method Detail
-
getFramework
Felix getFramework()
-
getArchive
BundleArchive getArchive()
-
close
void close()
-
closeAndDelete
void closeAndDelete() throws java.lang.Exception
- Throws:
java.lang.Exception
-
closeRevisions
private void closeRevisions()
-
refresh
void refresh() throws java.lang.Exception
- Throws:
java.lang.Exception
-
isDeclaredActivationPolicyUsed
boolean isDeclaredActivationPolicyUsed()
-
setDeclaredActivationPolicyUsed
void setDeclaredActivationPolicyUsed(boolean b)
-
getActivator
BundleActivator getActivator()
-
setActivator
void setActivator(BundleActivator activator)
-
getBundleContext
public BundleContext getBundleContext()
Description copied from interface:Bundle
Returns this bundle'sBundleContext
. The returnedBundleContext
can be used by the caller to act on behalf of this bundle.If this bundle is not in the
Bundle.STARTING
,Bundle.ACTIVE
, orBundle.STOPPING
states or this bundle is a fragment bundle, then this bundle has no validBundleContext
. This method will returnnull
if this bundle has no validBundleContext
.- Specified by:
getBundleContext
in interfaceBundle
- Returns:
- A
BundleContext
for this bundle ornull
if this bundle has no validBundleContext
.
-
setBundleContext
void setBundleContext(BundleContext context)
-
getBundleId
public long getBundleId()
Description copied from interface:Bundle
Returns this bundle's unique identifier. This bundle is assigned a unique identifier by the Framework when it was installed in the OSGi environment.A bundle's unique identifier has the following attributes:
- Is unique and persistent.
- Is a
long
. - Its value is not reused for another bundle, even after a bundle is uninstalled.
- Does not change while a bundle remains installed.
- Does not change when a bundle is updated.
This method must continue to return this bundle's unique identifier while this bundle is in the
UNINSTALLED
state.- Specified by:
getBundleId
in interfaceBundle
- Returns:
- The unique identifier of this bundle.
-
getEntry
public java.net.URL getEntry(java.lang.String name)
Description copied from interface:Bundle
Returns a URL to the entry at the specified path in this bundle. This bundle's class loader is not used to search for the entry. Only the contents of this bundle are searched for the entry.The specified path is always relative to the root of this bundle and may begin with "/". A path value of "/" indicates the root of this bundle.
Note: Jar and zip files are not required to include directory entries. URLs to directory entries will not be returned if the bundle contents do not contain directory entries.
-
getEntryPaths
public java.util.Enumeration getEntryPaths(java.lang.String path)
Description copied from interface:Bundle
Returns an Enumeration of all the paths (String
objects) to entries within this bundle whose longest sub-path matches the specified path. This bundle's class loader is not used to search for entries. Only the contents of this bundle are searched.The specified path is always relative to the root of this bundle and may begin with a "/". A path value of "/" indicates the root of this bundle.
Returned paths indicating subdirectory paths end with a "/". The returned paths are all relative to the root of this bundle and must not begin with "/".
Note: Jar and zip files are not required to include directory entries. Paths to directory entries will not be returned if the bundle contents do not contain directory entries.
- Specified by:
getEntryPaths
in interfaceBundle
- Parameters:
path
- The path name for which to return entry paths.- Returns:
- An Enumeration of the entry paths (
String
objects) ornull
if no entry could be found or if the caller does not have the appropriateAdminPermission[this,RESOURCE]
and the Java Runtime Environment supports permissions.
-
findEntries
public java.util.Enumeration findEntries(java.lang.String path, java.lang.String filePattern, boolean recurse)
Description copied from interface:Bundle
Returns entries in this bundle and its attached fragments. This bundle's class loader is not used to search for entries. Only the contents of this bundle and its attached fragments are searched for the specified entries. If this bundle's state isINSTALLED
, this method must attempt to resolve this 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();
URLs for directory entries must have their path end with "/".
Note: Jar and zip files are not required to include directory entries. URLs to directory entries will not be returned if the bundle contents do not contain directory entries.
- Specified by:
findEntries
in interfaceBundle
- Parameters:
path
- The path name in which to look. The path is always relative to the root of this bundle and may begin with "/". A path value of "/" indicates the root of this bundle.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. If the entry is a directory then the trailing "/" is not used for pattern matching. Substring matching is supported, as specified in the Filter specification, using the wildcard character ("*"). If null is specified, this is equivalent to "*" and matches all files.recurse
- Iftrue
, recurse into subdirectories. Otherwise only return entries from the specified path.- Returns:
- An enumeration of URL objects for each matching entry, or
null
if no matching entry could be found or if the caller does not have the appropriateAdminPermission[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 attachment order. If this bundle is a fragment, then only matching entries in this fragment are returned.
-
getHeaders
public java.util.Dictionary getHeaders()
Description copied from interface:Bundle
Returns this bundle's Manifest headers and values. This method returns all the Manifest headers and values from the main section of this bundle's Manifest file; that is, all lines prior to the first blank line.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. If no localization is found for a header value, the header value without the leading "%" is returned.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.- Specified by:
getHeaders
in interfaceBundle
- Returns:
- An unmodifiable
Dictionary
object containing this bundle's Manifest headers and values. - See Also:
Constants.BUNDLE_LOCALIZATION
-
getHeaders
public java.util.Dictionary getHeaders(java.lang.String locale)
Description copied from interface:Bundle
Returns this bundle's Manifest headers and values localized to the specified 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 bn
Wherebn
is this bundle's localization basename,Ls
,Cs
andVs
are the specified locale (language, country, variant) andLd
,Cd
andVd
are the default locale (language, country, variant). Ifnull
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. If no localization is found for a header value, the header value without the leading "%" is 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.- Specified by:
getHeaders
in interfaceBundle
- Parameters:
locale
- The locale name into which the header values are to be localized. If the specified locale isnull
then the locale returned byjava.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 "%".- Returns:
- An unmodifiable
Dictionary
object containing this bundle's Manifest headers and values. - See Also:
Bundle.getHeaders()
,Constants.BUNDLE_LOCALIZATION
-
getCurrentLocalizedHeader
java.util.Map getCurrentLocalizedHeader(java.lang.String locale)
-
updateHeaderCache
private void updateHeaderCache(java.lang.String locale, java.util.Map localizedHeaders)
-
createLocalizationRevisionList
private static java.util.List<BundleRevision> createLocalizationRevisionList(BundleRevision br)
-
createLocalizationResourceList
private static java.util.List<java.lang.String> createLocalizationResourceList(java.lang.String basename, java.lang.String locale)
-
getLastModified
public long getLastModified()
Description copied from interface:Bundle
Returns the time when this bundle was last modified. A bundle is considered to be modified when it is installed, updated or uninstalled.The time value is the number of milliseconds since January 1, 1970, 00:00:00 UTC.
- Specified by:
getLastModified
in interfaceBundle
- Returns:
- The time when this bundle was last modified.
-
setLastModified
void setLastModified(long l)
-
getLocation
public java.lang.String getLocation()
Description copied from interface:Bundle
Returns this bundle's location identifier.The location identifier is the location passed to
BundleContext.installBundle
when a bundle is installed. The location identifier does not change while this bundle remains installed, even if this bundle is updated.This method must continue to return this bundle's location identifier while this bundle is in the
UNINSTALLED
state.- Specified by:
getLocation
in interfaceBundle
- Returns:
- The string representation of this bundle's location identifier.
-
_getLocation
java.lang.String _getLocation()
-
getResource
public java.net.URL getResource(java.lang.String name)
Returns a URL to a named resource in the bundle.- Specified by:
getResource
in interfaceBundle
- Parameters:
name
- The name of the resource. SeeClassLoader.getResource
for a description of the format of a resource name.- Returns:
- a URL to named resource, or null if not found.
- See Also:
Bundle.getEntry(String)
,Bundle.findEntries(String, String, boolean)
-
getResources
public java.util.Enumeration getResources(java.lang.String name) throws java.io.IOException
Description copied from interface:Bundle
Find the specified resources from this bundle's class loader. This bundle's class loader is called to search for the specified resources. If this bundle's state isINSTALLED
, this method must attempt to resolve this 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 thennull
is returned.Note: Jar and zip files are not required to include directory entries. URLs to directory entries will not be returned if the bundle contents do not contain directory entries.
- Specified by:
getResources
in interfaceBundle
- Parameters:
name
- The name of the resource. SeeClassLoader.getResources
for a description of the format of a resource name.- Returns:
- An enumeration of URLs to the named resources, or
null
if the resource could not be found or if this bundle is a fragment bundle or if the caller does not have the appropriateAdminPermission[this,RESOURCE]
, and the Java Runtime Environment supports permissions. - Throws:
java.io.IOException
- If there is an I/O error.
-
getRegisteredServices
public ServiceReference[] getRegisteredServices()
Returns an array of service references corresponding to the bundle's registered services.- Specified by:
getRegisteredServices
in interfaceBundle
- Returns:
- an array of service references or null.
- See Also:
ServiceRegistration
,ServiceReference
,ServicePermission
-
getServicesInUse
public ServiceReference[] getServicesInUse()
Description copied from interface:Bundle
Returns this bundle'sServiceReference
list for all services it is using or returnsnull
if this bundle is not using any services. A bundle is considered to be using a service if it has any unreleased service objects.If the Java Runtime Environment supports permissions, a
ServiceReference
object to a service is included in the returned list only if the caller has theServicePermission
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.
- Specified by:
getServicesInUse
in interfaceBundle
- Returns:
- An array of
ServiceReference
objects ornull
. - See Also:
ServiceReference
,ServicePermission
-
getState
public int getState()
Description copied from interface:Bundle
Returns this bundle's current state.A bundle can be in only one state at any time.
-
__setState
void __setState(int i)
-
getPersistentState
int getPersistentState()
-
setPersistentStateInactive
void setPersistentStateInactive()
-
setPersistentStateActive
void setPersistentStateActive()
-
setPersistentStateStarting
void setPersistentStateStarting()
-
setPersistentStateUninstalled
void setPersistentStateUninstalled()
-
getStartLevel
int getStartLevel(int defaultLevel)
-
setStartLevel
void setStartLevel(int i)
-
isStale
boolean isStale()
-
isExtension
boolean isExtension()
-
getSymbolicName
public java.lang.String getSymbolicName()
Description copied from interface:Bundle
Returns the symbolic name of this bundle as specified by itsBundle-SymbolicName
manifest header. The bundle symbolic name should be based on the reverse domain name naming convention like that used for java packages.This method must continue to return this bundle's symbolic name while this bundle is in the
UNINSTALLED
state.- Specified by:
getSymbolicName
in interfaceBundle
- Returns:
- The symbolic name of this bundle or
null
if this bundle does not have a symbolic name.
-
getVersion
public Version getVersion()
Description copied from interface:Bundle
Returns the version of this bundle as specified by itsBundle-Version
manifest header. If this bundle does not have a specified version thenVersion.emptyVersion
is returned.This method must continue to return this bundle's version while this bundle is in the
UNINSTALLED
state.- Specified by:
getVersion
in interfaceBundle
- Returns:
- The version of this bundle.
-
hasPermission
public boolean hasPermission(java.lang.Object obj)
Description copied from interface:Bundle
Determines if this bundle has the specified permissions.If the Java Runtime Environment does not support permissions, this method always returns
true
.permission
is of typeObject
to avoid referencing thejava.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.- Specified by:
hasPermission
in interfaceBundle
- Parameters:
obj
- The permission to verify.- Returns:
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 orpermission
is not aninstanceof
java.security.Permission
.
-
getSignerCertificates
public java.util.Map getSignerCertificates(int signersType)
Description copied from interface:Bundle
Return the certificates for the signers of this bundle and the certificate chains for those signers.- Specified by:
getSignerCertificates
in interfaceBundle
- Parameters:
signersType
- IfBundle.SIGNERS_ALL
is specified, then information on all signers of this bundle is returned. IfBundle.SIGNERS_TRUSTED
is specified, then only information on the signers of this bundle trusted by the framework is returned.- Returns:
- The
X509Certificate
s for the signers of this bundle and theX509Certificate
chains for those signers. The keys of theMap
are theX509Certificate
s of the signers of this bundle. The value for a key is aList
containing theX509Certificate
chain for the signer. The first item in theList
is the signer'sX509Certificate
which is then followed by the rest of theX509Certificate
chain. The returnedMap
will be empty if there are no signers. The returnedMap
is the property of the caller who is free to modify it.
-
loadClass
public java.lang.Class loadClass(java.lang.String name) throws java.lang.ClassNotFoundException
Description copied from interface:Bundle
Loads the specified class using this bundle's class loader.If this 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 this bundle before attempting to load the class.If this bundle cannot be resolved, a Framework event of type
FrameworkEvent.ERROR
is fired containing aBundleException
with details of the reason this bundle could not be resolved. This method must then throw aClassNotFoundException
.If this bundle's state is
UNINSTALLED
, then anIllegalStateException
is thrown.- Specified by:
loadClass
in interfaceBundle
- Parameters:
name
- The name of the class to load.- Returns:
- The Class object for the requested class.
- Throws:
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 appropriateAdminPermission[this,CLASS]
, and the Java Runtime Environment supports permissions.
-
start
public void start() throws BundleException
Description copied from interface:Bundle
Starts this bundle with no options.This method performs the same function as calling
start(0)
.- Specified by:
start
in interfaceBundle
- Throws:
BundleException
- If this bundle could not be started. BundleException types thrown by this method include:BundleException.NATIVECODE_ERROR
,BundleException.RESOLVE_ERROR
,BundleException.STATECHANGE_ERROR
, andBundleException.ACTIVATOR_ERROR
.- See Also:
Bundle.start(int)
-
start
public void start(int options) throws BundleException
Description copied from interface:Bundle
Starts this bundle.If this bundle's state is
UNINSTALLED
then anIllegalStateException
is thrown.If the current start level is less than this bundle's start level:
- If the
Bundle.START_TRANSIENT
option is set, then aBundleException
is thrown indicating this bundle cannot be started due to the Framework's current start level. - Otherwise, the Framework must set this bundle's persistent autostart
setting to Started with declared activation if the
Bundle.START_ACTIVATION_POLICY
option is set or Started with eager activation if not set.
When the Framework's current start level becomes equal to or more than this bundle's start level, this bundle will be started.
Otherwise, the following steps are required to start this bundle:
- If this bundle is in the process of being activated or deactivated
then this method must wait for activation or deactivation to complete
before continuing. If this does not occur in a reasonable time, a
BundleException
is thrown to indicate this bundle was unable to be started. - If the
Bundle.START_TRANSIENT
option is not set then set this bundle's autostart setting to Started with declared activation if theBundle.START_ACTIVATION_POLICY
option is set or Started with eager activation if not set. When the Framework is restarted and this bundle's autostart setting is not Stopped, this bundle must be automatically started. - If this bundle's state is
ACTIVE
then this method returns immediately. - If this bundle's state is not
RESOLVED
, an attempt is made to resolve this bundle. If the Framework cannot resolve this bundle, aBundleException
is thrown. - If the
Bundle.START_ACTIVATION_POLICY
option is set and this bundle's declared activation policy islazy
then:- If this bundle's state is
STARTING
then this method returns immediately. - This bundle's state is set to
STARTING
. - A bundle event of type
BundleEvent.LAZY_ACTIVATION
is fired. - This method returns immediately and the remaining steps will be followed when this bundle's activation is later triggered.
- If this bundle's state is
- This bundle's state is set to
STARTING
. - A bundle event of type
BundleEvent.STARTING
is fired. - The
BundleActivator.start(BundleContext)
method of this bundle'sBundleActivator
, if one is specified, is called. If theBundleActivator
is invalid or throws an exception then:- This bundle's state is set to
STOPPING
. - A bundle event of type
BundleEvent.STOPPING
is fired. - Any services registered by this bundle must be unregistered.
- Any services used by this bundle must be released.
- Any listeners registered by this bundle must be removed.
- This bundle's state is set to
RESOLVED
. - A bundle event of type
BundleEvent.STOPPED
is fired. - A
BundleException
is then thrown.
- This bundle's state is set to
- This bundle's state is set to
ACTIVE
. - A bundle event of type
BundleEvent.STARTED
is fired.
getState()
in {INSTALLED
,RESOLVED
} or {INSTALLED
,RESOLVED
,STARTING
} if this bundle has a lazy activation policy.
- Bundle autostart setting is modified unless the
Bundle.START_TRANSIENT
option was set. getState()
in {ACTIVE
} unless the lazy activation policy was used.BundleActivator.start()
has been called and did not throw an exception unless the lazy activation policy was used.
- Depending on when the exception occurred, bundle autostart setting is
modified unless the
Bundle.START_TRANSIENT
option was set. getState()
not in {STARTING
,ACTIVE
}.
- Specified by:
start
in interfaceBundle
- Parameters:
options
- The options for starting this bundle. SeeBundle.START_TRANSIENT
andBundle.START_ACTIVATION_POLICY
. The Framework must ignore unrecognized options.- Throws:
BundleException
- If this bundle could not be started. BundleException types thrown by this method include:BundleException.START_TRANSIENT_ERROR
,BundleException.NATIVECODE_ERROR
,BundleException.RESOLVE_ERROR
,BundleException.STATECHANGE_ERROR
, andBundleException.ACTIVATOR_ERROR
.
- If the
-
update
public void update() throws BundleException
Description copied from interface:Bundle
Updates this bundle.This method performs the same function as calling
Bundle.update(InputStream)
with anull
InputStream.- Specified by:
update
in interfaceBundle
- Throws:
BundleException
- If this bundle could not be updated. BundleException types thrown by this method include:BundleException.READ_ERROR
,BundleException.DUPLICATE_BUNDLE_ERROR
,BundleException.MANIFEST_ERROR
,BundleException.NATIVECODE_ERROR
,BundleException.RESOLVE_ERROR
,BundleException.STATECHANGE_ERROR
, andBundleException.ACTIVATOR_ERROR
.- See Also:
Bundle.update(InputStream)
-
update
public void update(java.io.InputStream is) throws BundleException
Description copied from interface:Bundle
Updates this bundle from anInputStream
.If the specified
InputStream
isnull
, the Framework must create theInputStream
from which to read the updated bundle by interpreting, in an implementation dependent manner, this bundle'sBundle-UpdateLocation
Manifest header, if present, or this bundle's original location.If this bundle's state is
ACTIVE
, it must be stopped before the update and started after the update successfully completes.If this bundle has exported any packages that are imported by another bundle, these packages must remain exported until the
FrameworkWiring.refreshBundles
method has been has been called or the Framework is relaunched.The following steps are required to update a bundle:
- If this bundle's state is
UNINSTALLED
then anIllegalStateException
is thrown. - If this bundle's state is
ACTIVE
,STARTING
orSTOPPING
, this bundle is stopped as described in theBundle.stop
method. IfBundle.stop
throws an exception, the exception is rethrown terminating the update. - The updated version of this bundle is read from the input stream and
installed. If the Framework is unable to install the updated version of
this bundle, the original version of this bundle must be restored and a
BundleException
must be thrown after completion of the remaining steps. - This bundle's state is set to
INSTALLED
. - If the updated version of this bundle was successfully installed, a
bundle event of type
BundleEvent.UPDATED
is fired. - If this bundle's state was originally
ACTIVE
, the updated bundle is started as described in theBundle.start
method. IfBundle.start
throws an exception, a Framework event of typeFrameworkEvent.ERROR
is fired containing the exception.
getState()
not in {UNINSTALLED
}.
getState()
in {INSTALLED
,RESOLVED
,ACTIVE
}.- This bundle has been updated.
getState()
in {INSTALLED
,RESOLVED
,ACTIVE
}.- Original bundle is still used; no update occurred.
- Specified by:
update
in interfaceBundle
- Parameters:
is
- TheInputStream
from which to read the new bundle ornull
to indicate the Framework must create the input stream from this bundle'sBundle-UpdateLocation
Manifest header, if present, or this bundle's original location. The input stream must always be closed when this method completes, even if an exception is thrown.- Throws:
BundleException
- If this bundle could not be updated. BundleException types thrown by this method include:BundleException.READ_ERROR
,BundleException.DUPLICATE_BUNDLE_ERROR
,BundleException.MANIFEST_ERROR
,BundleException.NATIVECODE_ERROR
,BundleException.RESOLVE_ERROR
,BundleException.STATECHANGE_ERROR
, andBundleException.ACTIVATOR_ERROR
.- See Also:
Bundle.stop()
,Bundle.start()
- If this bundle's state is
-
stop
public void stop() throws BundleException
Description copied from interface:Bundle
Stops this bundle with no options.This method performs the same function as calling
stop(0)
.- Specified by:
stop
in interfaceBundle
- Throws:
BundleException
- BundleException types thrown by this method include:BundleException.STATECHANGE_ERROR
andBundleException.ACTIVATOR_ERROR
.- See Also:
Bundle.start(int)
-
stop
public void stop(int options) throws BundleException
Description copied from interface:Bundle
Stops this bundle.The following steps are required to stop a bundle:
- If this bundle's state is
UNINSTALLED
then anIllegalStateException
is thrown. - If this bundle is in the process of being activated or deactivated
then this method must wait for activation or deactivation to complete
before continuing. If this does not occur in a reasonable time, a
BundleException
is thrown to indicate this bundle was unable to be stopped. - If the
Bundle.STOP_TRANSIENT
option is not set then then set this bundle's persistent autostart setting to to Stopped. When the Framework is restarted and this bundle's autostart setting is Stopped, this bundle must not be automatically started. - If this bundle's state is not
STARTING
orACTIVE
then this method returns immediately. - This bundle's state is set to
STOPPING
. - A bundle event of type
BundleEvent.STOPPING
is fired. - If this bundle's state was
ACTIVE
prior to setting the state toSTOPPING
, theBundleActivator.stop(BundleContext)
method of this bundle'sBundleActivator
, if one is specified, is called. If that method throws an exception, this method must continue to stop this bundle and aBundleException
must be thrown after completion of the remaining steps. - Any services registered by this bundle must be unregistered.
- Any services used by this bundle must be released.
- Any listeners registered by this bundle must be removed.
- If this bundle's state is
UNINSTALLED
, because this bundle was uninstalled while theBundleActivator.stop
method was running, aBundleException
must be thrown. - This bundle's state is set to
RESOLVED
. - A bundle event of type
BundleEvent.STOPPED
is fired.
getState()
in {ACTIVE
}.
- Bundle autostart setting is modified unless the
Bundle.STOP_TRANSIENT
option was set. getState()
not in {ACTIVE
,STOPPING
}.BundleActivator.stop
has been called and did not throw an exception.
- Bundle autostart setting is modified unless the
Bundle.STOP_TRANSIENT
option was set.
- Specified by:
stop
in interfaceBundle
- Parameters:
options
- The options for stopping this bundle. SeeBundle.STOP_TRANSIENT
. The Framework must ignore unrecognized options.- Throws:
BundleException
- BundleException types thrown by this method include:BundleException.STATECHANGE_ERROR
andBundleException.ACTIVATOR_ERROR
.
- If this bundle's state is
-
uninstall
public void uninstall() throws BundleException
Description copied from interface:Bundle
Uninstalls this bundle.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
FrameworkWiring.refreshBundles
method has been called or the Framework is relaunched.The following steps are required to uninstall a bundle:
- If this bundle's state is
UNINSTALLED
then anIllegalStateException
is thrown. - If this bundle's state is
ACTIVE
,STARTING
orSTOPPING
, this bundle is stopped as described in theBundle.stop
method. IfBundle.stop
throws an exception, a Framework event of typeFrameworkEvent.ERROR
is fired containing the exception. - This bundle's state is set to
UNINSTALLED
. - A bundle event of type
BundleEvent.UNINSTALLED
is fired. - This bundle and any persistent storage area provided for this bundle by the Framework are removed.
getState()
not in {UNINSTALLED
}.
getState()
in {UNINSTALLED
}.- This bundle has been uninstalled.
getState()
not in {UNINSTALLED
}.- This Bundle has not been uninstalled.
- Specified by:
uninstall
in interfaceBundle
- Throws:
BundleException
- If the uninstall failed. This can occur if another thread is attempting to change this bundle's state and does not complete in a timely manner. BundleException types thrown by this method include:BundleException.STATECHANGE_ERROR
- See Also:
Bundle.stop()
- If this bundle's state is
-
checkAdapt
<A> void checkAdapt(java.lang.Class<A> type)
-
adapt
public <A> A adapt(java.lang.Class<A> type)
Description copied from interface:Bundle
Adapt this bundle to the specified type.Adapting this bundle to the specified type may require certain checks, including security checks, to succeed. If a check does not succeed, then this bundle cannot be adapted and
null
is returned.- Specified by:
adapt
in interfaceBundle
- Type Parameters:
A
- The type to which this bundle is to be adapted.- Parameters:
type
- Class object for the type to which this bundle is to be adapted.- Returns:
- The object, of the specified type, to which this bundle has been
adapted or
null
if this bundle cannot be adapted to the specified type.
-
getDataFile
public java.io.File getDataFile(java.lang.String filename)
Description copied from interface:Bundle
Creates aFile
object for a file in the persistent storage area provided for this bundle by the Framework. This method will returnnull
if the platform does not have file system support or this bundle is a fragment bundle.A
File
object for the base directory of the persistent storage area provided for this bundle by the Framework can be obtained by calling this method with an empty string asfilename
.If the Java Runtime Environment supports permissions, the Framework will ensure that this bundle has the
java.io.FilePermission
with actionsread
,write
,delete
for all files (recursively) in the persistent storage area provided for this bundle.- Specified by:
getDataFile
in interfaceBundle
- Parameters:
filename
- A relative name to the file to be accessed.- Returns:
- A
File
object that represents the requested file ornull
if the platform does not have file system support or this bundle is a fragment bundle.
-
compareTo
public int compareTo(Bundle t)
- Specified by:
compareTo
in interfacejava.lang.Comparable<Bundle>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
isRemovalPending
boolean isRemovalPending()
-
getBundle
public Bundle getBundle()
Description copied from interface:BundleReference
Returns theBundle
object associated with thisBundleReference
.- Specified by:
getBundle
in interfaceBundleReference
- Returns:
- The
Bundle
object associated with thisBundleReference
.
-
getRevisions
public java.util.List<BundleRevision> getRevisions()
Description copied from interface:BundleRevisions
Return the bundle revisions for thereferenced
bundle.The result is a list containing the current bundle revision, if there is one, and all in use bundle revisions. The list may also contain intermediate bundle revisions which are not in use.
The list is ordered in reverse chronological order such that the first item is the most recent bundle revision and last item is the oldest bundle revision.
Generally the list will have at least one bundle revision for the bundle: the current bundle revision. However, for an uninstalled bundle with no in use bundle revisions, the list may be empty.
- Specified by:
getRevisions
in interfaceBundleRevisions
- Returns:
- A list containing a snapshot of the
BundleRevision
s for the referenced bundle.
-
hasRevision
boolean hasRevision(BundleRevision revision)
Determines if the specified module is associated with this bundle.- Parameters:
revision
- the module to determine if it is associate with this bundle.- Returns:
- true if the specified module is in the array of modules associated with this bundle, false otherwise.
-
revise
void revise(java.lang.String location, java.io.InputStream is) throws java.lang.Exception
- Throws:
java.lang.Exception
-
rollbackRevise
boolean rollbackRevise() throws java.lang.Exception
- Throws:
java.lang.Exception
-
addRevision
void addRevision(BundleRevisionImpl revision) throws java.lang.Exception
- Throws:
java.lang.Exception
-
createRevision
private BundleRevisionImpl createRevision(boolean isUpdate) throws java.lang.Exception
- Throws:
java.lang.Exception
-
getProtectionDomain
java.security.ProtectionDomain getProtectionDomain()
-
isLockable
boolean isLockable()
-
getLockingThread
java.lang.Thread getLockingThread()
-
lock
void lock()
-
unlock
void unlock()
-
_getBundleContext
BundleContext _getBundleContext()
-
-