There are two issues with the resolver of the current OBR implementation:
1) It does not try each possible composition
Suppose we want to install bundle A, and A has a requirement which can be fulfilled by bundle B or C. B itself has a requirement which can be fulfilled by bundle X and bundle C has a requirement which can be fulfilled by bundle Y.
Suppose now that bundle X is not available (or can not be installed on the local platform)
composition A-C-Y is now a correct composition, but the current implementation will notice that bundle B can not be resolved and will then stop. OBR will not always detect the correct composition.
2) Bundles are not always updated
Suppose we want to install bundle A which has a requirement which can be fulfilled by bundle B.
An old version of bundle B is already locally installed on the platform but a newer version is available on the repository server. The current OBR implementation will detect that the requirement of A can be met by the locally installed old version of B and it will not check for a newer version on the repository server.
I attached a fixed version of ResolverImpl.java in which the described issues are fixed.
This is my first issue submit ever. Feedback to make it better is appreciated.