Hi all...

I've been having a problem with method overrides in Felix.
Generalized scenario:

Two bundles: BundleA and BundleB.

BundleB's ActivatorB extends BundleA's ActivatorA.  ActivatorB does
not define a start() method.

BundleB's ServiceImplB extends BundleA's ServiceImplA.

ActivatorA is abstract and has an abstract method getServiceImpl(),
which returns a ServiceImplA.  ActivatorB implements this method,
returning an instance of ServiceImplB.

ServiceImplA is abstract and has a non-abstract method showStatus().
ServiceImplB overrides showStatus().

BundleA is resolved and does not have a Bundle-Activator.  BundleB is
resolved and has ActivatorB as a Bundle-Activator.

When BundleB is started, ActivatorA.start() instantiates and starts an
extension of ServiceTracker, myServiceTracker.
myServiceTracker.addingReference() calls getServiceImpl() for a
ServiceImpA and calls showStatus() on it.

If ServiceImplB.showStatus() calls super.showStatus(),
ServiceImplB.showStatus() is called.  If ServiceImplB.showStatus()
does not call super.showStatus(), ServiceImplA.showStatus() is called.

I don't believe this is normal Java behavior.  I believe in a
command-line-JVM situation, ServiceImplB.showStatus() would always be
called, whether or not it called super.showStatus().  So is this an
idiosyncracy of classloaders in Felix?

Don

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

Reply via email to