So far it seems Felix's solution would indeed be the only viable solution,
even though it would break the unified DS based architectures.
I fail to see how this breaks the DS architecture ... The reason DS uses XML is only for lazyness, it required us to do the dependency handling without creating a class loader. DS is not Blueprint or Spring DM, where the dependency injection is at the heart of the architecture. In DS, you want to do everything in Java as long as your service dependencies are met.

A solution where you create a component when your service dependencies are met, and then that component registering a Network service when the network is active is perfectly ok and seems a lot less artificial then some of the other solutions. DS is designed to handle service dependencies, and it is very good at that. However, this architecture requires that you have code that turns other dependencies like your network into services, and you really need some Java code for that ...

Kind regards,

        Peter Kriens






On 3 okt 2009, at 17:57, Luciana Alvite wrote:

Firstly I would like to thank you all for your responses.

@Felix and Simon:
Although this solution is viable, my Network component depend on other
services from other

bundles, so registering the service "by hand" in the connect method would
not be very

practical, as Simon mentioned. I would rather use DS, if possible.

@Simon:
to 1) unfortunatelly the bundles are not in the same bundles (I thought
about that too)

to 2) I am not sure I understand ur "factory component" suggestion.
my network component creates one and only one connection and all other
modules interact

with the network through one and only one network component (its a P2P
network, so each

node has an unique ID, based on its IP and port, which is created when the
connection to

the network is established). Creating several connections would be the
equivalent of having

several nodes in the same machine, which would break the application.

to 3) see above

@ Marcel and Simon:
as I said im my first post, I have succesfully changed the component
properties through the

ConfigAdmin, but as I said, using this way the network method is reactivated
when its

properties change and therefore its previous state is lost (incl the
connection state).

I am not really familiar with iPojo, but could I use the "requires field"
(or sth similiar) to declare another component (Login in the example)
depends on a

"isConnected" field (from the Network component) whose value MUST be true?
if yes, what

would happen when the value of the field changes? Would the component that
declares it

(Network) be reactivated or does it maintain its state?
This seems very similar to the properties in OSGi, which when changed using
the ConfigAdmin

will reactivate the component, thus losing its previous state.


I personally also tend to use DS as much as possible and currently the whole
project (there

are several other modules besides these 2) is DS based, which allows for an
easy extendible

architecture, even for people w.o. much knowledge of OSGi. I would like to
maintain that

unified architecture if possible.

The Network and Login bundles provide the basic functions to access the
network and all

other modules depend on then, as it would be expected (the user must be
connected and

logged in to do virtually anything in the platform).

So far it seems Felix's solution would indeed be the only viable solution,
even though it

would break the unified DS based architectures.

Since I plan on using the same mechanism to inform interested bundles about
the login state

too, this would mean I would have to redesign both the Network and Login
bundles using the

standard OSGi API, thus breaking the unified POJO architecture.

I will think about it a little longer.
Any other suggestions are highly appreciated.

thank you and regards,

Luciana
_______________________________________________
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

Reply via email to