felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Arjun Panday (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-692) OBR should provide an API for resolving bundles dependencies regardless of locally installed bundles
Date Mon, 01 Mar 2010 18:09:06 GMT

    [ https://issues.apache.org/jira/browse/FELIX-692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12839785#action_12839785
] 

Arjun Panday commented on FELIX-692:
------------------------------------

I've tried the new API/Implementation the following way:

final Repository[] repolist = _repoAdmin.listRepositories();
Resolver resolver = _repoAdmin.resolver((Repository[]) (new ArrayList() {{
      add(_repoAdmin.getSystemRepository());
      addAll(Arrays.asList(repolist));
}}).toArray(new Repository[repolist.length + 1]));

It's more verbose than what I had with my URL pattern but at least it's a real API. (Maybe
there's a nicer way to achieve the same result)

Indeed the new implementation is much faster (just about 10 times, as advertized). 

Strangely, on my scenario, it generates a slightly different list of requirements than the
previous implementation; i'll need to investigate further this week.. 

Aside from that, it seems to work nicely (and fast!)

> OBR should provide an API for resolving bundles dependencies regardless of locally installed
bundles
> ----------------------------------------------------------------------------------------------------
>
>                 Key: FELIX-692
>                 URL: https://issues.apache.org/jira/browse/FELIX-692
>             Project: Felix
>          Issue Type: Improvement
>          Components: Bundle Repository (OBR)
>            Reporter: Arjun Panday
>            Assignee: Guillaume Nodet
>            Priority: Minor
>             Fix For: bundlerepository-1.6.0
>
>         Attachments: bundlerepository.tgz
>
>
> Currently the dependencies that are installed locally are stripped from the OBR Resolver
response, because it is assumed that the new bundles are to be installed locally. But i cannot
use the OBR to launch a separate JVM or store the result for later reference... 
> It would be interesting to have a pure Resolver API, distinct from the OBR's "installation
process".
> And/Or, as Richard Hall suggested, the OBR could provide better control over the repositories
used during the resolve process (specifically the local repository).
> (see thread "OBR and the referral tag" in users@felix.apache.org)
> Merely as a hint and for what it's worth, here's how i slightly modified the Resolver
in bundlerepository 1.0.3 to serve my purpose (avoid ignoring locally installed bundles):
> @@ -308,6 +309,7 @@ public class ResolverImpl implements Resolver
>       */
>      private List searchLocalResources(Requirement req)
>      {
> +       String systemPackages = (String) m_context.getBundle(0).getHeaders().get("Export-Package");//
only match system bundle
>          List matchingCandidates = new ArrayList();
>          Resource[] resources = m_local.getResources();
>          for (int resIdx = 0; (resources != null) && (resIdx < resources.length);
resIdx++)
> @@ -315,7 +317,8 @@ public class ResolverImpl implements Resolver
>              Capability[] caps = resources[resIdx].getCapabilities();
>              for (int capIdx = 0; (caps != null) && (capIdx < caps.length);
capIdx++)
>              {
> -                if (req.isSatisfied(caps[capIdx]))
> +                if (req.isSatisfied(caps[capIdx])
> +                   && systemPackages.indexOf(caps[capIdx].getName()) != -1)
// only match system bundle
>                  {
>                      matchingCandidates.add(resources[resIdx]);
>                  }
> @@ -91,7 +91,7 @@ public class LocalRepositoryImpl implements Repository
>          synchronized (this)
>          {
>              m_snapshotTimeStamp = m_currentTimeStamp = new Date().getTime();
> -            bundles = m_context.getBundles();
> +            bundles = new Bundle[]{ m_context.getBundle(0) }; // only match system bundle...
m_context.getBundles();
>          }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message