*/
package org.opendaylight.controller.clustering.it.provider;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
import java.util.HashSet;
import java.util.Set;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.mdsal.binding.api.WriteTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.people.rev140818.people.PersonBuilder;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PeopleProvider implements PeopleService, AutoCloseable {
-
+@Singleton
+@Component(service = { })
+public final class PeopleProvider implements PeopleService, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(PeopleProvider.class);
private final Set<ObjectRegistration<?>> regs = new HashSet<>();
- private DataBroker dataProvider;
- private RpcProviderService rpcProviderService;
- private CarPurchaseService rpcImplementation;
+ private final DataBroker dataProvider;
+ private final RpcProviderService rpcProviderService;
+ private final CarPurchaseService rpcImplementation;
- public void setDataProvider(final DataBroker salDataProvider) {
- this.dataProvider = salDataProvider;
- }
+ @Inject
+ @Activate
+ public PeopleProvider(@Reference final DataBroker dataProvider,
+ @Reference final RpcProviderService rpcProviderService,
+ @Reference final CarPurchaseService rpcImplementation) {
+ this.dataProvider = requireNonNull(dataProvider);
+ this.rpcProviderService = requireNonNull(rpcProviderService);
+ this.rpcImplementation = requireNonNull(rpcImplementation);
- public void setRpcImplementation(final CarPurchaseService rpcImplementation) {
- this.rpcImplementation = rpcImplementation;
+ // Add global registration
+ regs.add(rpcProviderService.registerRpcImplementation(CarPurchaseService.class, rpcImplementation));
}
@Override
.child(Person.class, person.key()).build();
// Place entry in data store tree
WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
- tx.put(LogicalDatastoreType.CONFIGURATION, personId, person, true);
+ tx.put(LogicalDatastoreType.CONFIGURATION, personId, person);
tx.commit().addCallback(new FutureCallback<CommitInfo>() {
@Override
public void onFailure(final Throwable ex) {
LOG.error("RPC addPerson : person addition failed [{}]", person, ex);
futureResult.set(RpcResultBuilder.<AddPersonOutput>failed()
- .withError(RpcError.ErrorType.APPLICATION, ex.getMessage()).build());
+ .withError(ErrorType.APPLICATION, ex.getMessage()).build());
}
}, MoreExecutors.directExecutor());
return futureResult;
}
+ @PreDestroy
+ @Deactivate
@Override
public void close() {
regs.forEach(ObjectRegistration::close);