Hi,

I have a problem with immediate services and hoped that you guys maybe can help.

I'm currently trying to implement several services within one bundle (see below for code). I have set all of them to be immediate (by immediate=true), but still, when I start the OSGi container with my bundle in it, only Con1, InDataPort1 and OutDataPort1 are active. The rest is satisfied but not active according to felix.scr console output:

g! list
BundleId Component Name Default State
   Component Id State      PIDs (Factory PID)
[  10]   test.Con1  enabled
   [   0] [active      ]
[  10]   test.InDataPort1  enabled
   [   1] [active      ]
[  10]   test.OutDataPort1  enabled
   [   2] [active      ]
[  10]   test.Process1  enabled
   [   3] [satisfied   ]
[  10]   test.Thread1_1  enabled
   [   4] [satisfied   ]
[  10]   test.Thread1_2  enabled
   [   5] [satisfied   ]

Am I doing something wrong?
I assumed that all services should be started as soon as they are satisfied.

Any advice is highly appreciated.

Kind regards,
Thomas


@Component(immediate = true, service = IProcess.class, property = "de.uniaugsburg.smds.aadl2osgi.component.uid=test.Process1")
public class Process1 implements IProcess {

 @Reference(target = "(uid=test.Thread1_1)")
 private volatile IPeriodicThread thread1;

 @Reference(target = "(uid=test.Thread1_2)")
 private volatile IPeriodicThread thread2;
}


@Component(service = IPeriodicThread.class, property = "de.uniaugsburg.smds.aadl2osgi.component.uid=test.Thread1_1", immediate = true)
public class Thread1_1 implements IPeriodicThread {

 @Reference(target = "(uid=test.OutDataPort1)")
 private volatile IOutDataPort outport;

 @Activate
 public void initialize_FW() {
   init();
 }

 @Deactivate
 public void finalize_FW() {
   deinit();
 }
}


@Component(service = IPeriodicThread.class, property = "de.uniaugsburg.smds.aadl2osgi.component.uid=test.Thread1_2", immediate = true)
public class Thread1_2 implements IPeriodicThread {

 @Reference(target = "(uid=test.InDataPort1)")
 private volatile IOutDataPort outport;

 @Activate
 public void initialize_FW() {
   init();
 }

 @Deactivate
 public void finalize_FW() {
   deinit();
 }
}


@Component(service = IOutDataPort.class, property = "uid=test.OutDataPort1", immediate = true)
public class OutDataPort1 implements IOutDataPort {

@Reference(target = "(target=test.OutDataPort1)", cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
 private volatile IPortConnection incomingPortConnections;

private volatile Set<IPortConnection> outgoingPortConnections = new ConcurrentSkipListSet();

@Reference(target = "(source=test.OutDataPort1)", cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
 public void addOutgoingPortConnection(final IPortConnection con) {
   outgoingPortConnections.add(con);
 }

 public void removeOutgoingPortConnection(final IPortConnection con) {
   outgoingPortConnections.remove(con);
 }
}


@Component(service = IInDataPort.class, property = "uid=test.InDataPort1", immediate = true)
@SuppressWarnings("all")
public class InDataPort1 implements IInDataPort {

@Reference(target = "(target=test.InDataPort1)", cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
 private volatile IPortConnection incomingPortConnections;

private volatile Set<IPortConnection> outgoingPortConnections = new ConcurrentSkipListSet();

@Reference(target = "(source=test.InDataPort1)", cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
 public void addOutgoingPortConnection(final IPortConnection con) {
   outgoingPortConnections.add(con);
 }

 public void removeOutgoingPortConnection(final IPortConnection con) {
   outgoingPortConnections.remove(con);
 }
}


@Component(service = IPortConnection.class, property = { "source=test.OutDataPort1", "target=test.InDataPort1" }, immediate = true)
public class Con1 implements IPortConnection {
@Reference(cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY, target = "(uid=test.OutDataPort1)")
 private volatile IOutDataPort source;

@Reference(cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY, target = "(uid=test.InDataPort1)")
 private volatile IInDataPort target;
}
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to