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

Reply via email to