On Mon, Mar 30, 2015 at 2:41 PM, BJ Hargrave <hargr...@us.ibm.com> wrote:
> > From: Raymond Auge <raymond.a...@liferay.com> > > > K, so it can't handled Object (or the anything case)? > > DS can handle any type a service is registered under including > java.lang.Object. But it does require you tell DS the service type (either > in the interface element if you write the XML or in the service element of > the Reference annotation which can be inferred from the first argument of > the annotated bind method) and for the service to be registered under that > type. > > What DS cannot handle is a reference to a service with an unspecified > name. You seem to want to bind to any service whose name endsWith MBean > (except for DynamicMBean). And DS is not designed to do that. That is > better for a ServiceTracker. > It was my _hope_ that most things you could do with a service tracker you could do with a DS's bind method. ultimately doesn't a DS component use a service tracker? Anyway.. not arguing.. moving on... Thx everyone, - Ray > > > ok! not a problem. > > > - Ray > > > > On Mon, Mar 30, 2015 at 2:11 PM, BJ Hargrave <hargr...@us.ibm.com> > wrote: > > > From: Raymond Auge <raymond.a...@liferay.com> > > > > > > Does anyone see why this would not be working? > > > > > > > > > @Reference( > > > > I'll assume this is the OSGi annotation. > > > > > cardinality = ReferenceCardinality.MULTIPLE, > > > name = "MBean", > > > policy = ReferencePolicy.DYNAMIC, > > > policyOption = ReferencePolicyOption.GREEDY, > > > target = "(&(jmx.objectname=*)(objectClass=*MBean)(! > > > (objectClass=javax.management.DynamicMBean)))" > > > ) > > > protected void addMBean(ServiceReference<?> serviceReference) { .. } > > > > > The XML generated is: > > > > > > <reference > > > name="MBean" > > > cardinality="0..n" > > > policy="dynamic" > > > interface="org.osgi.framework.ServiceReference" > > > > The generated XML shows that the assumed serivce type is > > ServiceReference. You probably need to set the service element in > > the annotation to set the actual type of the service. This will set > > the interface XML attribute properly. The interface attribute is the > > objectClass of the referenced service. > > > > interface: "Fully qualified name of the class that is used by the > > component to access the service. The service provided to the > > component must be type compatible with this class. That is, the > > component must be able to cast the service object to this class. A > > service must be registered under this name to be considered for the > > set of target services. > > > > The Reference annotation will use the type of the first argument of the > anno- > > tated method or the type of the annotated field to determine the > > service value." > > > > > target="(&(jmx.objectname=*)(objectClass=*MBean)(! > > > (objectClass=javax.management.DynamicMBean)))" > > > > Putting objectClass in the target does not override the objectClass > > stated by the interface attribute and can be in conflict. > > > > > bind="addMBean" > > > unbind="removeMBean" > > > policy-option="greedy" > > > /> > > > > > > > > Shouldn't this work? > > > > DS is not set up for this. It expects you to name a specific service > > type. Not any type whose registered service name ends with something. > > > -- > > *BJ Hargrave* > Senior Technical Staff Member, IBM > OSGi Fellow and CTO of the *OSGi Alliance* <http://www.osgi.org/> > *hargr...@us.ibm.com* <hargr...@us.ibm.com> > > office: +1 386 848 1781 > mobile: +1 386 848 3788 > > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > 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 osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev