X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Frestconf%2FRestConnectorProvider.java;h=8205eba6adfcfa0604de47b3c756fd2e28ea437d;hb=a713249be961be184644f4fbce7914a4014cb68b;hp=dedea9b0a6cd15d3edfdea6e08d9d8462da27f6d;hpb=bb7dcf7024a5918e72e2035312205f726189a2c4;p=netconf.git diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java index dedea9b0a6..8205eba6ad 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/RestConnectorProvider.java @@ -5,6 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ + package org.opendaylight.restconf; import com.google.common.base.Preconditions; @@ -16,7 +17,6 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListen import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; import org.opendaylight.controller.sal.core.api.Provider; import org.opendaylight.controller.sal.core.api.model.SchemaService; @@ -41,12 +41,11 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose private static final Logger LOG = LoggerFactory.getLogger(RestConnectorProvider.class); - private final TransactionChainListener transactionListener = new TransactionChainListener() { + public static final TransactionChainListener transactionListener = new TransactionChainListener() { @Override public void onTransactionChainFailed(final TransactionChain chain, final AsyncTransaction transaction, final Throwable cause) { LOG.warn("TransactionChain({}) {} FAILED!", chain, transaction.getIdentifier(), cause); - chain.close(); resetTransactionChainForAdapaters(chain); throw new RestconfDocumentedException("TransactionChain(" + chain + ") not committed correctly", cause); } @@ -58,8 +57,8 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose }; private ListenerRegistration listenerRegistration; - private DOMDataBroker dataBroker; - private DOMTransactionChain transactionChain; + private static TransactionChainHandler transactionChainHandler; + private static DOMDataBroker dataBroker; @Override public void onSessionInitiated(final ProviderSession session) { @@ -73,30 +72,32 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose final DOMMountPointServiceHandler domMountPointServiceHandler = new DOMMountPointServiceHandler( session.getService(DOMMountPointService.class)); - this.dataBroker = session.getService(DOMDataBroker.class); - final DOMDataBrokerHandler brokerHandler = new DOMDataBrokerHandler(this.dataBroker); + RestConnectorProvider.dataBroker = session.getService(DOMDataBroker.class); + final DOMDataBrokerHandler brokerHandler = new DOMDataBrokerHandler(RestConnectorProvider.dataBroker); - this.transactionChain = this.dataBroker.createTransactionChain(this.transactionListener); - final TransactionChainHandler transactionChainHandler = new TransactionChainHandler(this.transactionChain); + RestConnectorProvider.transactionChainHandler = new TransactionChainHandler(RestConnectorProvider.dataBroker + .createTransactionChain(RestConnectorProvider.transactionListener)); final DOMRpcService rpcService = session.getService(DOMRpcService.class); final RpcServiceHandler rpcServiceHandler = new RpcServiceHandler(rpcService); - wrapperServices.setHandlers(schemaCtxHandler, domMountPointServiceHandler, transactionChainHandler, - brokerHandler, rpcServiceHandler); + wrapperServices.setHandlers(schemaCtxHandler, domMountPointServiceHandler, + RestConnectorProvider.transactionChainHandler, brokerHandler, rpcServiceHandler); } /** - * After {@link TransactionChain} failed, this is creating new transaction - * with listener. + * After {@link TransactionChain} failed, this updates {@link TransactionChainHandler} with new transaction chain. * * @param chain * - old {@link TransactionChain} */ - private void resetTransactionChainForAdapaters(final TransactionChain chain) { - LOG.trace("Resetting TransactionChain({}) to {}", chain, this.transactionChain); - this.transactionChain = Preconditions.checkNotNull(this.dataBroker) - .createTransactionChain(this.transactionListener); + public static void resetTransactionChainForAdapaters(final TransactionChain chain) { + LOG.trace("Resetting TransactionChain({})", chain); + chain.close(); + RestConnectorProvider.transactionChainHandler.update( + Preconditions.checkNotNull(RestConnectorProvider.dataBroker).createTransactionChain( + RestConnectorProvider.transactionListener) + ); } @Override @@ -106,11 +107,14 @@ public class RestConnectorProvider implements Provider, RestConnector, AutoClose @Override public void close() throws Exception { + // close registration if (this.listenerRegistration != null) { this.listenerRegistration.close(); } - if (this.transactionChain != null) { - this.transactionChain.close(); + + // close transaction chain + if (RestConnectorProvider.transactionChainHandler != null) { + RestConnectorProvider.transactionChainHandler.get().close(); } } }