On 8/11/10 14:53, Richard S. Hall wrote:
 On 8/11/10 14:46, mhutton86 wrote:
http://felix.apache.org/site/how-to-use-ipojo-annotations.html#howtouseipojoannotatio...@bind http://felix.apache.org/site/how-to-use-ipojo-annotations.html#howtouseipojoannotatio...@requires

Is where I was convinced about the mutual relationship between @Bind/Unbind, and @Requires. But if what you are saying is true, that would be great and
would solve my problem. It is not working when i take away the @Requires
dependency and then the id parameter. Is there any chance you have a
resource of how to accomplish this?

This would be greatly appreciated.

I'm not sure what you're doing wrong, but even the reference card you cited describes the two approaches as field vs method injection. I'm not sure if the iPOJO docs include a method injection example.

If you download the example code for our book (it's big):

    http://code.google.com/p/osgi-in-action/

The example in chapter12/paint-example-ip/ has a component org.foo.paint which uses @Bind/@Unbind without @Requires.

p.s. The component in question is org.foo.paint.PaintFrame...


-> richard

Mark-Anthony


Richard S. Hall wrote:
   On 8/11/10 14:16, mhutton86 wrote:
I am not sure.

I do know that @Requires and @Bind/@Unbind are independent of each
other, although they can be used together. There are basically two ways
to have your dependencies injected:

    1. Field injection (i.e., @Requires)
    2. Method injection (i.e., @Bind/@Unbind)

iPOJO does allow you to use both at the same time, but typically in such situations the bind/unbind methods are more for notification purposes or
for obtaining service properties.

->  richard


Richard S. Hall wrote:
    If you have @Bind/@Unbind and use them to maintain your own list,
then
why do you need @Requires at all?

->   richard

On 8/11/10 13:17, mhutton86 wrote:
I have a service that I require

@Requires(optional=true, id="tidget_devices",
filter="(!(serviceName=file
reader))")
private TidgetSaasmDevice[] initialTidgets;

but these TidgetSaasmDevices are not ready off the bat, and have to be
added
via late-binding
@Bind(id="tidget_devices")
private synchronized void addTidgetSaasmDevice(TidgetSaasmDevice
newTidget)
{...}

@Unbind(id="tidget_devices")
private synchronized void removeTidgetSaasmDevice(TidgetSaasmDevice
newTidget){...}

since TidgetSaasmDevice[] is an array. adding to it is a pain. so I
have
a
List to take care of this.

// dynamic list for adding tidgets
private List<TidgetSaasmDevice>    tidgets = new
ArrayList<TidgetSaasmDevice>();

but the problem when I start felix, is that a tidget is always loaded
twice
(random). due to the initial @Requires dependency trying to be
fulfilled.
@optional = true, won't solve this (not surprising). I can solve this
by
checking if this node is already added before trying to add it again.
but
this does not work ans is more of a hack then a fix.

Any ideas?

Example Output:
adding: tidget-saasm COM22-0
adding: tidget-saasm COM9-0
adding: tidget-saasm COM22-1
adding: tidget-saasm COM29-0
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to