On 4/9/09 10:14 AM, Pierre De Rop wrote:
Hello everyone,
I just discovered that invoking Bundle.update() method may fire a
framework event PACKAGES_REFRESHED event.
In the trunk, I see, in Felix.java, line 1691, that the "update"
method may invoke the refreshPackage(null) method, which then fires
the event.
To be clear, it only invokes refreshPackages() on the bundle being
updated, not all bundles.
I understand this issue this causes for you, but I am not sure of a
solution. We could possibly add a configuration to turn off
auto-refreshing, but this would really just tie you to Felix since other
implementations may still auto-refresh.
What you really need is for the call to refreshPackages() to return some
sort of request ID so you can check for when your request is finished.
-> richard
Is is a normal behavior ?
So far, I was fairly certain that this event was only fired after
invoking PackageAdmin.refreshPackages() methods.
Actually, we are using our own bundle installer, which install/updates
our bundles.
And our bundle installer does the following, when it updates a bundle:
class BundleInstaller implements FrameworkListener {
boolean refreshing = false;
void update(Bundle([] bundles) {
for (Bundle b : bundles) {
b.stop();
b.update(); // May fire a PACKAGES_REFRESHED event
}
synchronized (this) {
this.refreshing = true;
}
*packageAdmin.refresh(null); // asynchronous *
synchronized (this) {
*while (refreshing) wait(); *// ensure that all bundles are
refreshed before restarting updated bundles.
}
for (Bundle b : bundles) {
b.start();
}
}
// Here, I listen to the framework event "PACKAGES_REFRESHED"
void frameworkEvent(FrameworkEvent event) {
switch (event.getType()) {
case FrameworkEvent.PACKAGES_REFRESHED:
synchronized (this) {
this.refreshing = false;
notify();
}
}
}
}
The problem here, is that the first loop of my method "update" invokes
Bundle.update(), which may fire some unexpected PACKAGES_REFRESHED
events ...
I'm expecting only one, and my waiting loop exits after the first
event received.
So, what can I do in order to ensure that the
PackageAdmin.refreshPackages(null) method has completed ?
Thanks in advance;
/pierre
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org