On Fri, Dec 19, 2014 at 1:59 PM, Neil Bartlett <[email protected]> wrote: > > Incidentally, if you use the latest bnd(tools) development builds, you can > get some of the nasty Require-Capability syntax generated from Java > annotations. For example, you can define your own annotation and add it to > a class in your bundle: > > @JspTagLib(uri = “foo”) > public class MyTagLib extends … > > Where the annotation is itself annotated as follows: > > @Retention(RetentionPolicy.CLASS) > @RequireCapability( > ns = "osgi.extender", > filter = "(&(osgi.extender=jsp.taglib)(version>=1.0))”, > effective = "active") > public @interface JspTagLib { > String uri(); > } > > > When bnd sees the annotated class in your bundle, it adds the following to > the generated manifest: > > Require-Capability: > osgi.extender;uri=foo;filter:="(&(osgi.extender=jsp.taglib)(version>=1.0))";effective:=active >
Yes this is brilliant stuff that Peter has already submitted as a RFC for R7. https://github.com/osgi/design/blob/master/rfps/rfp-0167-Manifest-Annotations.pdf This brings an exciting ease of use to the req&cap model! - Ray > > Regards > Neil > > > On 19 Dec 2014, at 21:41, Raymond Auge <[email protected]> wrote: > > > > On Fri, Dec 19, 2014 at 1:37 PM, Tim Ward <[email protected]> wrote: >> >> Hi Ray, >> >> Sent from my iPhone >> >> On 19 Dec 2014, at 21:23, Raymond Auge <[email protected]> wrote: >> >> Thanks Tim, I can start with this. >> >> I just want to make it clear that there are 3 actors involved for this >> scenario (perhaps that doesn't matter, let's see): >> >> 1) a JSP client bundle (has jsps) >> Required-Capability: ...jsp.extender... >> Required-Capability: ...jsp.taglib;filter:="(uri=foo)" >> >> 2) a taglib bundle (provides taglib) >> Required-Capability: ...jsp.extender... >> Provide-Capability: ... jsp.taglib;uri="foo"... >> >> 3) jsp extender (provides the JSP servlet to client bundles, ensures the >> client's required taglibs are available to the servlet) >> Provide-Capability: ...jsp.extender... >> >> >> Between the three of these that would do the trick, although unless the >> extender bundle directly interacts with the client bundle (which it may do >> for this case) >> > > it does. > > >> then I would only put the extender requirement in the extendee (providing >> the tag lib) not the client. >> > > Got it! > > Thanks you Tim. Happy Holidays! > > - Ray > > >> >> On Fri, Dec 19, 2014 at 1:11 PM, Tim Ward <[email protected]> wrote: >>> >>> Having just noticed a couple of omissions... >>> >>> To actually match the filter in my previous email the extender would >>> need to specify: >>> >>> Provide-Capability: osgi.extender;osgi.extender=jsp.taglib;version=1.0.0 >>> >>> Also, unless the extendee should be prevented from resolving in the >>> absence of the extender then it should specify effective:=active (as >>> opposed to the default of resolve) >>> >>> And now I'm done - speak to you all next year! >>> >>> Tim >>> >>> >>> Sent from my iPhone >>> >>> On 19 Dec 2014, at 20:55, Tim Ward <[email protected]> wrote: >>> >>> Hi Ray, >>> >>> There is already an osgi.extender namespace declared for this sort of >>> dependency. The extender provides a capability in the osgi.extender >>> namespace, which is required by the extendee. There's a blueprint example >>> in the spec, but this would work for your JSPs. Time for a JSP extender in >>> Enrerprise R7? >>> >>> Apologies for phone-based syntax issues! >>> >>> Extender: >>> >>> Provide-Capability: osgi.extender;osgi.extender=jsp.taglib >>> >>> Extendee: >>> >>> Require-Capability: >>> filter:=(&(osgi.extender=jsp.taglib)(version>=1.0.0)(!(version>=2.0.0))); >>> jsp.taglib.uri="http://my.uri.domain/cooltags_1_0"; >>> jsp.taglib.file="/META-INF/cooltags.tld";uses:="..... >>> >>> Regards, >>> >>> Tim >>> >>> Sent from my iPhone >>> >>> On 19 Dec 2014, at 19:38, Raymond Auge <[email protected]> wrote: >>> >>> Hey All, >>> >>> I'm wondering about modelling an extender pattern using requirements & >>> capabilities header. >>> >>> Hopefully I can explain this in a way that can be understood: >>> >>> In order to implement the extender pattern we often define a new >>> "custom" header which declares the "opt-in" on the extender. >>> >>> However, I'm wondering if instead of using a new "Custom header" if it >>> might not be better to define this "opt-in" using a Provide-Capability. >>> >>> For instance, suppose I wanted to support dynamic provision of JSP >>> taglibs. >>> >>> I could model this using pure java jars with taglibs by adding a header >>> to the jar something like: >>> >>> Provide-Capability: >>> jsp.taglib; >>> jsp.taglib.uri="http://my.uri.domain/cooltags_1_0"; >>> jsp.taglib.file="/META-INF/cooltags.tld";uses:=".....", >>> jsp.taglib; >>> jsp.taglib.uri="http://my.uri.domain/othertags_2_0"; >>> jsp.taglib.file="/META-INF/othertags.tld";uses:=".....", >>> Require-Capability: jsp.extender; filter:="(version=1.0)" >>> >>> This way I don't have to invent a new syntax or header and this can >>> easily be resolved against in both directions. >>> >>> The extender bundle would look for bundles providing jsp.taglib >>> capabilities and make the TLDs available to the JSP servlet it provides to >>> the clients using JSP. >>> >>> A client bundle using both JSP and using the taglib would ask for them >>> by making a Require-Capability against both >>> >>> Require-Capability: jsp.extender; filter:="(version=1.0)" >>> Require-Capability: jsp.taglib; filter:="(jsp.taglib.uri= >>> http://my.uri.domain/cooltags_1_0)" >>> >>> Thoughts? >>> -- >>> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> >>> (@rotty3000) >>> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com/> >>> (@Liferay) >>> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> >>> (@OSGiAlliance) >>> >>> _______________________________________________ >>> OSGi Developer Mail List >>> [email protected] >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>> >>> >>> _______________________________________________ >>> OSGi Developer Mail List >>> [email protected] >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>> >> >> >> -- >> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> >> (@rotty3000) >> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com/> >> (@Liferay) >> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> >> (@OSGiAlliance) >> >> _______________________________________________ >> OSGi Developer Mail List >> [email protected] >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> _______________________________________________ >> OSGi Developer Mail List >> [email protected] >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> > > > -- > *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> > (@rotty3000) > Senior Software Architect *Liferay, Inc.* <http://www.liferay.com/> > (@Liferay) > Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> > (@OSGiAlliance) > _______________________________________________ > OSGi Developer Mail List > [email protected] > https://mail.osgi.org/mailman/listinfo/osgi-dev > > > > _______________________________________________ > OSGi Developer Mail List > [email protected] > https://mail.osgi.org/mailman/listinfo/osgi-dev > -- *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) Senior Software Architect *Liferay, Inc.* <http://www.liferay.com> (@Liferay) Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org> (@OSGiAlliance)
_______________________________________________ OSGi Developer Mail List [email protected] https://mail.osgi.org/mailman/listinfo/osgi-dev
