You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "John Ross (JIRA)" <ji...@apache.org> on 2016/02/25 21:44:18 UTC

[jira] [Commented] (ARIES-1360) ContentHandler must be explicitely imported in SUBSYSTEM.MF

    [ https://issues.apache.org/jira/browse/ARIES-1360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15167841#comment-15167841 ] 

John Ross commented on ARIES-1360:
----------------------------------

I see three things to address here. 

First, the proposed solution cannot be accepted as given because it would break the motivating use case as described by David in his first comment. 

Second, the implementation cannot make any assumptions regarding the sharing policy of composites. This must be specified by the provider, so the need to add the service requirement either manually or through tooling will remain.

Finally, there is the issue of applications, where providers might reasonably expect the required import to be computed for them. I wrote a test where an application containing a custom resource is being installed as a child of root. Given what I said in my first comment, I had expected to see the bundle context of the root subsystem being used to look up the ContentHandler service. Instead, the application's bundle context is being used. The existing tests, which most likely served as the basis for my comment, all use feature subsystems. In those cases, the bundle context of the parent subsystem is used since features are unscoped and have no bundle context of their own. Therefore, it would be most accurate to say that the bundle context of the region's scoped subsystem is currently used to look for ContentHandler services.

When installing a scoped subsystem containing custom content, there appear to be at least four options.

(1) The ContentHandler services are found using the bundle context of the system bundle.

(2) The ContentHandler services are found using the bundle context of the implementation bundle.

(3) The ContentHandler services are found using the bundle context of the parent subsystem.

(4) The ContentHandler services are found using the bundle context of the installing subsystem. This is possible even for scoped subsystems because the ContentHandler provider can listen for the region context bundle registration, which happens before any resources are installed, and register the service then.

Because of the possibility of (2), a wrinkle is introduced with regard to adding application support. Using this option, an application provider would presumably not want the automatic import and risk polluting the region with undesired handlers. This would be a much more involved change for at least two reasons: (a) since there is no resource providing the service capability, checks would need to be made outside of the standard resolution process, and (b) although the installation order prescribed in section 134.14.1 of the specification makes (2) theoretically possible, the current implementation actually computes dependencies and sets the import sharing policy before the region context bundle is installed.

In lieu of adding computational support for applications, we could add a configurable parameter that would specify which bundle context to use. The values might be SYSTEM, IMPL, PARENT, and CURRENT, each corresponding to the four options above. This would also affect composites.

> ContentHandler must be explicitely imported in SUBSYSTEM.MF
> -----------------------------------------------------------
>
>                 Key: ARIES-1360
>                 URL: https://issues.apache.org/jira/browse/ARIES-1360
>             Project: Aries
>          Issue Type: Bug
>          Components: Subsystem
>    Affects Versions: subsystem-2.0.6, subsystem-2.0.8
>            Reporter: Alexandre Roman
>              Labels: easyfix
>
> A custom ContentHandler implementation is not "seen" by a scoped subsystem if the SUBSYSTEM.MF does not include a "Subsystem-ImportService" entry for this interface.
> The problem is located in CustomResources.java. The ContentHandler references are searched in the subsystem context. Such references should be looked up from the system bundle context, removing the need to import this service in subsystems manifest.
> {code:title=CustomResources.java}
> for(ServiceReference<ContentHandler> ref :
>     subsystem.getBundleContext().getServiceReferences(ContentHandler.class,
>                     "(" + ContentHandler.CONTENT_TYPE_PROPERTY + "=" + type + ")")) {
>                 return ref;
>             }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)