Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 81786 Details for
Bug 207505
[registry] order in which registry events are sent vs. bundle dependencies
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch
207505_org.eclipse.osgi.txt (text/plain), 9.81 KB, created by
Thomas Watson
on 2007-10-31 17:21:50 EDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Thomas Watson
Created:
2007-10-31 17:21:50 EDT
Size:
9.81 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.osgi.tests >Index: src/org/eclipse/osgi/tests/bundles/BundleTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/BundleTests.java,v >retrieving revision 1.4 >diff -u -r1.4 BundleTests.java >--- src/org/eclipse/osgi/tests/bundles/BundleTests.java 25 Oct 2007 22:20:29 -0000 1.4 >+++ src/org/eclipse/osgi/tests/bundles/BundleTests.java 31 Oct 2007 21:17:40 -0000 >@@ -16,6 +16,7 @@ > public class BundleTests { > public static Test suite() { > TestSuite suite = new TestSuite(BundleTests.class.getName()); >+ suite.addTest(PackageAdminBundleTests.suite()); > suite.addTest(PlatformAdminBundleTests.suite()); > suite.addTest(ExtensionBundleTests.suite()); > suite.addTest(ClassLoadingBundleTests.suite()); >Index: src/org/eclipse/osgi/tests/bundles/PackageAdminBundleTests.java >=================================================================== >RCS file: src/org/eclipse/osgi/tests/bundles/PackageAdminBundleTests.java >diff -N src/org/eclipse/osgi/tests/bundles/PackageAdminBundleTests.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/osgi/tests/bundles/PackageAdminBundleTests.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,113 @@ >+/******************************************************************************* >+ * Copyright (c) 2007 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.osgi.tests.bundles; >+ >+import java.util.ArrayList; >+import junit.framework.Test; >+import junit.framework.TestSuite; >+import org.eclipse.osgi.tests.OSGiTestsActivator; >+import org.osgi.framework.*; >+ >+public class PackageAdminBundleTests extends AbstractBundleTests { >+ public class TestListener implements SynchronousBundleListener { >+ ArrayList events = new ArrayList(); >+ >+ public synchronized void bundleChanged(BundleEvent event) { >+ events.add(event); >+ } >+ >+ public synchronized BundleEvent[] getEvents() { >+ try { >+ return (BundleEvent[]) events.toArray(new BundleEvent[0]); >+ } finally { >+ events.clear(); >+ } >+ } >+ } >+ >+ public static Test suite() { >+ return new TestSuite(PackageAdminBundleTests.class); >+ } >+ >+ public void testBundleEvents01() throws Exception { >+ Bundle chainTest = installer.installBundle("chain.test"); >+ Bundle chainTestA = installer.installBundle("chain.test.a"); >+ Bundle chainTestB = installer.installBundle("chain.test.b"); >+ Bundle chainTestC = installer.installBundle("chain.test.c"); >+ Bundle chainTestD = installer.installBundle("chain.test.d"); >+ Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD}; >+ Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD}; >+ TestListener testListener = new TestListener(); >+ OSGiTestsActivator.getContext().addBundleListener(testListener); >+ try { >+ installer.resolveBundles(resolveBundles); >+ BundleEvent[] events = testListener.getEvents(); >+ assertEquals("Event count", 10, events.length); >+ int j = 0; >+ for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { >+ assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType()); >+ } >+ j = 5; >+ for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { >+ assertTrue("Lazy Starting Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType()); >+ } >+ } finally { >+ OSGiTestsActivator.getContext().removeBundleListener(testListener); >+ } >+ } >+ >+ public void testBundleEvents02() throws Exception { >+ Bundle chainTest = installer.installBundle("chain.test"); >+ Bundle chainTestA = installer.installBundle("chain.test.a"); >+ Bundle chainTestB = installer.installBundle("chain.test.b"); >+ Bundle chainTestC = installer.installBundle("chain.test.c"); >+ Bundle chainTestD = installer.installBundle("chain.test.d"); >+ Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD}; >+ Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD}; >+ TestListener testListener = new TestListener(); >+ OSGiTestsActivator.getContext().addBundleListener(testListener); >+ try { >+ installer.resolveBundles(resolveBundles); >+ BundleEvent[] events = testListener.getEvents(); >+ // throw away the events. This was already tested >+ installer.refreshPackages(resolveBundles); >+ events = testListener.getEvents(); >+ assertEquals("Event count", 25, events.length); >+ int j = 0; >+ for (int i = 0; i < dependencyOrder.length; i++, j += 2) { >+ assertTrue("Stopping Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Stopping event", BundleEvent.STOPPING, events[j].getType()); >+ assertTrue("Stopped Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j + 1].getBundle()); >+ assertEquals("Expecting Stopping event", BundleEvent.STOPPED, events[j + 1].getType()); >+ } >+ j = 10; >+ for (int i = 0; i < dependencyOrder.length; i++, j++) { >+ assertTrue("Unresolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Unresolved event", BundleEvent.UNRESOLVED, events[j].getType()); >+ } >+ j = 15; >+ for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { >+ assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType()); >+ } >+ j = 20; >+ for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { >+ assertTrue("Lazy Starting Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); >+ assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType()); >+ } >+ >+ } finally { >+ OSGiTestsActivator.getContext().removeBundleListener(testListener); >+ } >+ } >+} >#P org.eclipse.osgi >Index: core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java,v >retrieving revision 1.57 >diff -u -r1.57 PackageAdminImpl.java >--- core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java 5 Oct 2007 15:19:16 -0000 1.57 >+++ core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java 31 Oct 2007 21:17:42 -0000 >@@ -337,8 +337,7 @@ > return bundle; > } > >- private AbstractBundle[] applyDeltas(BundleDelta[] bundleDeltas) throws BundleException { >- ArrayList results = new ArrayList(bundleDeltas.length); >+ private void applyDeltas(BundleDelta[] bundleDeltas) throws BundleException { > for (int i = 0; i < bundleDeltas.length; i++) { > int type = bundleDeltas[i].getType(); > if ((type & (BundleDelta.REMOVAL_PENDING | BundleDelta.REMOVAL_COMPLETE)) != 0) >@@ -354,11 +353,9 @@ > } catch (BundleException e) { > framework.publishFrameworkEvent(FrameworkEvent.ERROR, bundle, e); > } >- results.add(bundle); > } > } > } >- return (AbstractBundle[]) (results.size() == 0 ? null : results.toArray(new AbstractBundle[results.size()])); > } > > private AbstractBundle[] processDelta(BundleDelta[] bundleDeltas, boolean refreshPackages) { >@@ -378,7 +375,6 @@ > // then sort by dependency order > StartLevelManager.sortByDependency(refresh); > boolean[] previouslyResolved = new boolean[refresh.length]; >- AbstractBundle[] resolved = null; > try { > try { > if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) { >@@ -415,11 +411,12 @@ > } > > synchronized (framework.bundles) { >- for (int i = 0; i < refresh.length; i++) >+ for (int i = refresh.length - 1; i >= 0; i--) > refresh[i].refresh(); > } > // send out unresolved events outside synch block (defect #80610) >- for (int i = 0; i < refresh.length; i++) { >+ // send out unresolved events in reverse dependency order (defect #207505) >+ for (int i = refresh.length - 1; i >= 0; i--) { > // send out unresolved events > if (previouslyResolved[i]) > framework.publishBundleEvent(BundleEvent.UNRESOLVED, refresh[i]); >@@ -432,7 +429,7 @@ > Debug.println("refreshPackages: applying deltas to bundles"); //$NON-NLS-1$ > } > synchronized (framework.bundles) { >- resolved = applyDeltas(bundleDeltas); >+ applyDeltas(bundleDeltas); > } > > } finally { >@@ -475,9 +472,9 @@ > // send out any resolved. This must be done after the state change locks have been release. > if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) > Debug.println("refreshPackages: send out RESOLVED events"); //$NON-NLS-1$ >- if (resolved != null) >- for (int i = 0; i < resolved.length; i++) >- framework.publishBundleEvent(BundleEvent.RESOLVED, resolved[i]); >+ for (int i = 0; i < refresh.length; i++) >+ if (refresh[i].isResolved()) >+ framework.publishBundleEvent(BundleEvent.RESOLVED, refresh[i]); > > return refresh; > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 207505
:
81786
|
84225