Am 07.08.2008 um 18:09 schrieb "Stuart McCulloch" <[EMAIL PROTECTED] >:

2008/8/7 Jackson, Bruce <[EMAIL PROTECTED]>

Its not exactly a legacy situation. The problem I have is one that's shared with many object persistence frameworks that would naturally provide that
capability as a service in an OSGi environment.

In my case, the persistence model is based on the ability of any bundle to declare an interface which is suitably annotated, and which the persistence service will automatically construct suitable tables, views etc based on the interface methods, arguments and annotations. An object factory in the provider then generates a "real" object usable in the caller bundle, and
whose methods are interpreted by a dynamic proxy into calls to the
persistence layer.

The problem comes when you wish to extract information from the persistence service. How do you recreate the stored object when the interface which was used to create the dynamic proxy is not in the persistence layer's bundle?


one possible solution that would work with all the current frameworks is to use a service to get the interface class - based on something unique in the
persisted object like the interface name or serialization id

client bundles would register service implementations, which return any interface class(es) they know of that match the request. The persistence bundle can then iterate over the available services until it finds one that can supply the necessary runtime class (or it could use filters to avoid
iterating)

alternatively... client bundles could register services to recreate actual
objects based on given data / schema.

a lot of the classloading issues in OSGi can disappear when you use services to delegate tasks to the bundles that have the required knowledge. The hard part is deciding what to use services for, and what functionality to push into which bundle - but you can often use standard OO techniques like CRC
cards to help brainstorm ideas

imho, services are the best kept secret of OSGi...

+1

regards,

Karl


On 07/08/2008 15:31, "Richard S. Hall" <[EMAIL PROTECTED]> wrote:

Jackson, Bruce wrote:
Does Felix support anything that carries out a similar function to buddy
class loading in Equinox?
I'm aware of the DynamicImport-Package, but that rather supposes that the
bundle who declares this knows the bundles that it needs as "helpers" to
load classes.


Sorry, no, Felix does not support any such option. And you are right,
dynamic imports are probably not exactly what you want either.
Currently, it is possible that the spec will eventually define something like this, but currently there is nothing. However, this should likely
only be used in legacy situations, is that your situation?

-> richard




--
Cheers, Stuart

Reply via email to