summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
62d2f37)
The blueprint XML specifies the "register" and "unregister" methods
for init/destroy however this bypasses the "close" method. Add
explicit init/close methods and call register/unregister.
I also moved the initialization code that was in setDataBroker to the
new init method. The former is a setter and should have code logic side
effects.
Change-Id: Idf46f76913c4400aaef61ff78ad8f57e3db4c4b9
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.SettableFuture;
import java.util.Collection;
import java.util.concurrent.Callable;
import com.google.common.util.concurrent.SettableFuture;
import java.util.Collection;
import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public void setDataBroker(final DataBroker dataBroker) {
this.dataBroker = dataBroker;
public void setDataBroker(final DataBroker dataBroker) {
this.dataBroker = dataBroker;
- dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(CONFIGURATION, TOASTER_IID), this);
+ }
+
+ public void init() {
+ LOG.info("Initializing...");
+
+ Preconditions.checkNotNull(dataBroker, "dataBroker must be set");
+ dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
+ new DataTreeIdentifier<>(CONFIGURATION, TOASTER_IID), this);
setToasterStatusUp(null);
setToasterStatusUp(null);
+
+ // Register our MXBean.
+ register();
}
/**
* Implemented from the AutoCloseable interface.
*/
@Override
}
/**
* Implemented from the AutoCloseable interface.
*/
@Override
- public void close() throws ExecutionException, InterruptedException {
+ public void close() {
+ LOG.info("Closing...");
+
+ // Unregister our MXBean.
+ unregister();
+
// When we close this service we need to shutdown our executor!
executor.shutdown();
// When we close this service we need to shutdown our executor!
executor.shutdown();
- if (dataBroker != null) {
+ if (dataTreeChangeListenerRegistration != null) {
dataTreeChangeListenerRegistration.close();
dataTreeChangeListenerRegistration.close();
+ if (dataBroker != null) {
WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
tx.delete(OPERATIONAL,TOASTER_IID);
Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess(final Void result) {
WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
tx.delete(OPERATIONAL,TOASTER_IID);
Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess(final Void result) {
- LOG.debug("Delete Toaster commit result: " + result);
+ LOG.debug("Successfully deleted the operational Toaster");
}
@Override
public void onFailure(final Throwable failure) {
}
@Override
public void onFailure(final Throwable failure) {
- LOG.error("Delete of Toaster failed", failure);
+ LOG.error("Delete of the operational Toaster failed", failure);
Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess(final Void result) {
Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess(final Void result) {
+ LOG.info("Successfully set ToasterStatus to Up");
<!-- Create the OpendaylightToaster instance and inject its dependencies -->
<bean id="toaster" class="org.opendaylight.controller.sample.toaster.provider.OpendaylightToaster"
<!-- Create the OpendaylightToaster instance and inject its dependencies -->
<bean id="toaster" class="org.opendaylight.controller.sample.toaster.provider.OpendaylightToaster"
- init-method="register" destroy-method="unregister">
+ init-method="init" destroy-method="close">
<argument ref="toasterAppConfig"/>
<property name="dataBroker" ref="dataBroker"/>
<property name="notificationProvider" ref="notificationService"/>
<argument ref="toasterAppConfig"/>
<property name="dataBroker" ref="dataBroker"/>
<property name="notificationProvider" ref="notificationService"/>
import com.google.common.base.Optional;
import java.util.concurrent.Future;
import com.google.common.base.Optional;
import java.util.concurrent.Future;
+import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.junit.Ignore;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
+import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.DisplayString;
import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.DisplayString;
import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
-public class OpenDaylightToasterTest extends AbstractDataBrokerTest {
+public class OpenDaylightToasterTest extends AbstractConcurrentDataBrokerTest {
private static InstanceIdentifier<Toaster> TOASTER_IID = InstanceIdentifier.builder(Toaster.class).build();
private static InstanceIdentifier<Toaster> TOASTER_IID = InstanceIdentifier.builder(Toaster.class).build();
- OpendaylightToaster toaster;
+ private OpendaylightToaster toaster;
- @Override
- protected void setupWithDataBroker(DataBroker dataBroker) {
+ @Before
+ public void setupToaster() {
toaster = new OpendaylightToaster();
toaster = new OpendaylightToaster();
- toaster.setDataBroker(dataBroker);
+ toaster.setDataBroker(getDataBroker());
+ toaster.init();
- /**
- * Doesn't look like we have support for the NotificationProviderService yet, so mock it
- * for now.
- */
+ // We'll mock the NotificationProviderService.
NotificationPublishService mockNotification = mock(NotificationPublishService.class);
toaster.setNotificationProvider(mockNotification);
}
NotificationPublishService mockNotification = mock(NotificationPublishService.class);
toaster.setNotificationProvider(mockNotification);
}