Dear P2 Developer,
I would like first to thank you guys for your help and time you provide, the
following here is my issue with P2
We are developing an OSGI-based project and we use P2 as provisioning framework
for our system.
- To build the project we use Tycho, the results are Eclipse executable
products which we take them and run their executables, after running them, the
osgi console shows for example the bundles are running or installed or resolved
as normal.
- We have our own repository which we add and then we can further install more
bundles and i can say installation (InstallOperation) works fine.
- While the product is running (for example our server product which runs using
Jetty), we want to delete or update some running (active bundles) but neither
delete nor update are working.
- After long research we found out that p2 does not delete a bundle (IU) (even
if it does a certain way) if there is no garbage collector implementation
provided, thus, i have implemented the garbage collector as described in a
forum as follow:
======
private void collectGarbage() throws Exception {
IApplication app = null;
IExtensionRegistry reg = Platform.getExtensionRegistry();
IExtensionPoint ep =
reg.getExtensionPoint(APPLICATION_EXT_POINT);
IExtension[] extensions = ep.getExtensions();
found: for (int i = 0; i < extensions.length; i++) {
System.out.println("Extensions have been found");
IExtension ext = extensions[i];
IConfigurationElement[] ce =
ext.getConfigurationElements();
for (int j = 0; j < ce.length; j++) {
IContributor contributor = ext.getContributor();
String name = contributor.getName();
if (P2_GC_PLUGIN_ID.equals(name)) {
Object obj =
ce[j].createExecutableExtension("run");
app = (IApplication) obj;
System.out.println("The garbage
collector Extension has been found");
break found;
}
}
}
if (app == null) {
System.out.println("Could not find P2 garbage
collection application extension");
throw new RuntimeException(
"Could not find P2 garbage collection
application extension.");
} else {
System.out.println("P2 Garbage Collector started
Execution");
app.start(getP2AppContextForProfile("DefaultProfile"));
System.out.println("P2 Garbage Collector finished
Execution");
}
}
private static IApplicationContext getP2AppContextForProfile(final
String profileName) {
return new IApplicationContext() {
@Override
public Map<?,?> getArguments() {
Map<String, Object> m = new HashMap<String,
Object>();
m.put(IApplicationContext.APPLICATION_ARGS, new
String[] {"-profile", profileName});
return m;
}
......
.....
================
- Even after the implementation of the garbage collector and called it
explicitly after each each delete operation, the bundle is not deleted. Still i
see the bundle active.
- The org.eclipse.update.configurator has been added to the runtime as well as
the "reconcile" configuration run parameter is set to false.
- As most of our bundles are root IUs. So the UpdateOperation is not working as
well, i have read in the eclipse documentation the the IU if it is a root one,
then it should be completely uninstalled from the system and installed again if
i want to update it, and since the delete (uninstall) does not work so i am
struggling with the update as well.
My Questions:
1- According to what i have done, is there a missing in the implementation to
make the uninstall or delete really working?
2- If the manifest of the bundle or IU has exported packages. that means other
IUs depend on it. This IU can be uninstalled? if not, then how we can update it
if the uninstall does not work?
I would be very grateful if you can provide hints or help,
Best Regards,
Abdallah
_______________________________________________
p2-dev mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://dev.eclipse.org/mailman/listinfo/p2-dev