You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Jago de Vreede (JIRA)" <ji...@apache.org> on 2014/01/15 06:49:21 UTC
[jira] [Updated] (FELIX-4384) Difference between inner class and
normal class service
[ https://issues.apache.org/jira/browse/FELIX-4384?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jago de Vreede updated FELIX-4384:
----------------------------------
Description:
Given the following code:
package org.example;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
import org.osgi.framework.BundleContext;
public class Activator extends DependencyActivatorBase {
@Override
public synchronized void init(BundleContext context, DependencyManager manager) throws Exception {
manager.add(createComponent()
.setInterface(A.class.getName(), null)
.setImplementation(A.class)
.add(createServiceDependency().setService(S.class).setRequired(true)));
manager.add(createComponent()
.setInterface(S.class.getName(), null)
.setImplementation(S1.class));
}
@Override
public synchronized void destroy(BundleContext context, DependencyManager manager) throws Exception {}
interface S {}
class A {}
class S1 implements S {}
}
dm will print out:
g! dm
[8] mytest
[0] org.example.Activator$A unregistered
org.example.Activator$S service required unavailable
[1] org.example.Activator$S registered
But when the class S1 is promoted to a real class, dm will print out:
g! dm
[8] mytest
[0] org.example.Activator$A registered
org.example.Activator$S service required available
[1] org.example.Activator$S registered
So the service class S1 is not available if its an inner class but is available if its a normal class.
was:
Given the following code:
{code}package org.example;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
import org.osgi.framework.BundleContext;
public class Activator extends DependencyActivatorBase {
@Override
public synchronized void init(BundleContext context, DependencyManager manager) throws Exception {
manager.add(createComponent()
.setInterface(A.class.getName(), null)
.setImplementation(A.class)
.add(createServiceDependency().setService(S.class).setRequired(true)));
manager.add(createComponent()
.setInterface(S.class.getName(), null)
.setImplementation(S1.class));
}
@Override
public synchronized void destroy(BundleContext context, DependencyManager manager) throws Exception {}
interface S {}
class A {}
class S1 implements S {}
}{code}
dm will print out:
{quote}
g! dm
[8] mytest
[0] org.example.Activator$A unregistered
org.example.Activator$S service required unavailable
[1] org.example.Activator$S registered
{quote}
But when the class S1 is promoted to a real class, dm will print out:
{quote}
g! dm
[8] mytest
[0] org.example.Activator$A registered
org.example.Activator$S service required available
[1] org.example.Activator$S registered
{quote}
So the service class S1 is not available if its an inner class but is available if its a normal class.
> Difference between inner class and normal class service
> -------------------------------------------------------
>
> Key: FELIX-4384
> URL: https://issues.apache.org/jira/browse/FELIX-4384
> Project: Felix
> Issue Type: Bug
> Components: Dependency Manager
> Affects Versions: dependencymanager-3.1.0
> Reporter: Jago de Vreede
> Priority: Minor
>
> Given the following code:
> package org.example;
> import org.apache.felix.dm.DependencyActivatorBase;
> import org.apache.felix.dm.DependencyManager;
> import org.osgi.framework.BundleContext;
> public class Activator extends DependencyActivatorBase {
> @Override
> public synchronized void init(BundleContext context, DependencyManager manager) throws Exception {
> manager.add(createComponent()
> .setInterface(A.class.getName(), null)
> .setImplementation(A.class)
> .add(createServiceDependency().setService(S.class).setRequired(true)));
>
> manager.add(createComponent()
> .setInterface(S.class.getName(), null)
> .setImplementation(S1.class));
> }
> @Override
> public synchronized void destroy(BundleContext context, DependencyManager manager) throws Exception {}
>
> interface S {}
> class A {}
> class S1 implements S {}
> }
> dm will print out:
> g! dm
> [8] mytest
> [0] org.example.Activator$A unregistered
> org.example.Activator$S service required unavailable
> [1] org.example.Activator$S registered
> But when the class S1 is promoted to a real class, dm will print out:
> g! dm
> [8] mytest
> [0] org.example.Activator$A registered
> org.example.Activator$S service required available
> [1] org.example.Activator$S registered
> So the service class S1 is not available if its an inner class but is available if its a normal class.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)