[
https://issues.apache.org/jira/browse/DOSGI-20?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13823493#comment-13823493
]
David Bosschaert commented on DOSGI-20:
---------------------------------------
Ok, let's zoom in on the actual problem...
If I'm not mistaken the problem lies in the first line of code in
RemoteServiceAdminCore.proxifyMatchingInterface() where it does:
Class<?> iClass = bctx.getBundle().loadClass(interfaceName);
where interfaceName is the name of the interface of the remote service that
needs to be proxied.
Currently the bctx bundle used to load this class seems to be always the
CXF-DSW bundle, which is why it needs DynamicImport-Package.
If we can get that line of code to use the right bundle (which has an import to
that package) to load the class that would probably fix this issue... (unless
I'm missing something)
One option would be to use PackageAdmin, or better the Bundle Wiring API, to
find the bundle that exports the API in the right version and use its Bundle
Context at the above line in the code. There is an issue here in that if you
find two exporters, who do you pick? If you pick the wrong one the client may
not be able to use the proxy...
Probably a better choice would be to use the bundle of the requesting class.
bq. The problem is that we do not know the bundle at the point in the code
where we need to create the class
this is true at the above line of code. However I think that we could delay the
line of code above to a later point where we do have the client bundle's
context. Later in the proxifyMatchingInterface() you can see that it registers
a Service Factory: ClientServiceFactory. The first time you actually really
need that iClass is inside that ClientServiceFactory.getService(). That method
is invoked by the OSGi Service Registry with the actual requestingBundle as its
first argument. So if we could delay the loadClass to happen inside that
getService() we could simply do requestingBundle.loadClass() and can probably
get rid of the DynamicImport-Package...
Note that proxifyMatchingInterface() also has a requestingContext parameter but
this does actually not contain the right value as it's always set to the
CXF-DSW bundle context. That parameter is confusing and should really be
removed...
Anyway, I might have missed a point or two, but the above might help...
> Get rid of the DynamicImport-Package="*"
> ----------------------------------------
>
> Key: DOSGI-20
> URL: https://issues.apache.org/jira/browse/DOSGI-20
> Project: CXF Distributed OSGi
> Issue Type: Bug
> Reporter: David Bosschaert
>
> The current DOSGi implementation uses DynamicImport-Package="*". While this
> is very convenient, it is potentially unpredictable and could have serious
> performance side effects. Therefore it would be better to remove this
> dependency and potentially use direct OSGi API to find the required package
> potentially via the PackageAdmin only when we need to do this type of thing
> i.e. when a proxy is created.
--
This message was sent by Atlassian JIRA
(v6.1#6144)