Activate the application grpc service during registry startup

Change-Id: Id1be2f5f65b021583820a15ca0dc07c290dc60e7
This commit is contained in:
Jian Li 2017-10-17 00:47:53 +09:00
parent 4c703b9ce1
commit fc88978ee1

View File

@ -16,6 +16,7 @@
package org.onosproject.incubator.protobuf.services.nb;
import com.google.common.annotations.Beta;
import io.grpc.BindableService;
import io.grpc.stub.StreamObserver;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@ -37,6 +38,10 @@ import org.onosproject.incubator.protobuf.models.core.ApplicationEnumsProtoTrans
import org.onosproject.incubator.protobuf.models.core.ApplicationIdProtoTranslator;
import org.onosproject.incubator.protobuf.models.core.ApplicationProtoTranslator;
import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator;
import org.onosproject.protobuf.api.GrpcServiceRegistry;
import org.slf4j.Logger;
import static org.slf4j.LoggerFactory.getLogger;
/**
* A server that provides access to the methods exposed by {@link ApplicationService}.
@ -46,17 +51,40 @@ import org.onosproject.incubator.protobuf.models.security.PermissionProtoTransla
@Component(immediate = true)
public class GrpcNbApplicationService {
private final Logger log = getLogger(getClass());
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected GrpcServiceRegistry registry;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ApplicationService applicationService;
private static ApplicationServiceNbServerInternal instance = null;
@Activate
public void activate() {
//TODO this should contact the registry service and register an instance
// of this service.
registry.register(getInnerInstance());
log.info("Started.");
}
@Deactivate
public void deactivate() {
registry.unregister(getInnerInstance());
log.info("Stopped");
}
/**
* Register Application Service, Used for unit testing purposes.
*
* @return An instance of binding Application service
*/
public InProcessServer<BindableService> registerInProcessServer() {
InProcessServer<BindableService> inprocessServer =
new InProcessServer(GrpcNbApplicationService.ApplicationServiceNbServerInternal.class);
inprocessServer.addServiceToBind(getInnerInstance());
return inprocessServer;
}
private class ApplicationServiceNbServerInternal extends ApplicationServiceImplBase {
@ -124,4 +152,11 @@ public class GrpcNbApplicationService {
responseObserver.onCompleted();
}
}
private ApplicationServiceNbServerInternal getInnerInstance() {
if (instance == null) {
instance = new ApplicationServiceNbServerInternal();
}
return instance;
}
}