碳版本对比钠版本

碳版本
import com.google.common.base.Optional;

import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.MountPoint;
import org.opendaylight.controller.md.sal.binding.api.MountPointService;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;


钠版本
import java.util.Optional;

import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.MountPoint;
import org.opendaylight.mdsal.binding.api.MountPointService;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;

碳版本 钠版本
org.opendaylight.controller.md.sal.binding.api.DataBroker; org.opendaylight.mdsal.binding.api.DataBroker;
org.opendaylight.controller.md.sal.binding.api.MountPoint; org.opendaylight.mdsal.binding.api.MountPoint;
org.opendaylight.controller.md.sal.binding.api.MountPointService; org.opendaylight.mdsal.binding.api.MountPointService;
org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; org.opendaylight.mdsal.binding.api.NotificationPublishService;
org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; org.opendaylight.mdsal.common.api.LogicalDatastoreType;
com.google.common.base.Optional; java.util.Optional;

引起的方法变化

1、监听

在Topology节点上注册监听器,在碳版本中是如下实现

DataTreeIdentifier<Topology> nodeDTChangeListener = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, NETCONF_TOPO_IID);

在钠版本中是如下实现

DataTreeIdentifier<Topology> nodeDTChangeListener = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, NETCONF_TOPO_IID);

假如不进行修改,将会出现以下错误


DataTreeIdentifier(org.opendaylight.mdsal.common.api.@org.eclipse.jdt.annotation.NonNull LogicalDatastoreType, org.opendaylight.yangtools.yang.binding.@org.eclipse.jdt.annotation.NonNull InstanceIdentifier) **has private access** in org.opendaylight.mdsal.binding.api.DataTreeIdentifier


意味着这个成员已经变成了私有
打开如下,果然如此

package org.opendaylight.mdsal.binding.api;public final class DataTreeIdentifier <T extends org.opendaylight.yangtools.yang.binding.DataObject> implements org.opendaylight.yangtools.concepts.Immutable, org.opendaylight.yangtools.concepts.Path<org.opendaylight.mdsal.binding.api.DataTreeIdentifier<?>>, java.io.Serializable {private static final long serialVersionUID = 1L;@org.eclipse.jdt.annotation.NonNullprivate final org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> rootIdentifier;@org.eclipse.jdt.annotation.NonNullprivate final org.opendaylight.mdsal.common.api.LogicalDatastoreType datastoreType;private DataTreeIdentifier(@org.eclipse.jdt.annotation.NonNull org.opendaylight.mdsal.common.api.LogicalDatastoreType datastoreType, @org.eclipse.jdt.annotation.NonNull org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> rootIdentifier) { /* compiled code */ }@org.eclipse.jdt.annotation.NonNullpublic static <T extends org.opendaylight.yangtools.yang.binding.DataObject> org.opendaylight.mdsal.binding.api.DataTreeIdentifier<T> create(@org.eclipse.jdt.annotation.NonNull org.opendaylight.mdsal.common.api.LogicalDatastoreType datastoreType, @org.eclipse.jdt.annotation.NonNull org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> rootIdentifier) { /* compiled code */ }@org.eclipse.jdt.annotation.NonNullpublic org.opendaylight.mdsal.common.api.LogicalDatastoreType getDatastoreType() { /* compiled code */ }@org.eclipse.jdt.annotation.NonNullpublic org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> getRootIdentifier() { /* compiled code */ }public boolean contains(org.opendaylight.mdsal.binding.api.DataTreeIdentifier<?> other) { /* compiled code */ }public int hashCode() { /* compiled code */ }public boolean equals(java.lang.Object obj) { /* compiled code */ }public java.lang.String toString() { /* compiled code */ }
}

但是仔细观察,找到一个新的方法提供,create,返回值与之前一样,参数也一致,并且是public static


以下是之前碳版本的内容


package org.opendaylight.controller.md.sal.binding.api;/*** @deprecated*/
@java.lang.Deprecated
public final class DataTreeIdentifier <T extends org.opendaylight.yangtools.yang.binding.DataObject> implements org.opendaylight.yangtools.concepts.Immutable, org.opendaylight.yangtools.concepts.Path<org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier<?>>, java.io.Serializable {private static final long serialVersionUID = 1L;@org.eclipse.jdt.annotation.NonNullprivate final org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> rootIdentifier;@org.eclipse.jdt.annotation.NonNullprivate final org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType datastoreType;public DataTreeIdentifier(org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType datastoreType, org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> rootIdentifier) { /* compiled code */ }@org.eclipse.jdt.annotation.NonNullpublic org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType getDatastoreType() { /* compiled code */ }@org.eclipse.jdt.annotation.NonNullpublic org.opendaylight.yangtools.yang.binding.InstanceIdentifier<T> getRootIdentifier() { /* compiled code */ }public boolean contains(org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier<?> other) { /* compiled code */ }public int hashCode() { /* compiled code */ }public boolean equals(java.lang.Object obj) { /* compiled code */ }public java.lang.String toString() { /* compiled code */ }
}

2、读写

2.1 读操作

钠版本ReadOnlyTransaction已经移除,使用ReadTransaction

钠版本的读操作实现

ReadTransaction xrNodeReadTx = getBrokerTransaction(nodeName);
Optional<Me> meCfg;
try {// Read from a transaction is asynchronous, but a simple// get/checkedGet makes the call synchronousmeCfg = xrNodeReadTx.read(LogicalDatastoreType.OPERATIONAL, iid).get();
} catch (InterruptedException|ExecutionException e) {throw new IllegalStateException("Unexpected error reading data from " + nodeName, e);
}

碳版本的读操作实现

ReadOnlyTransaction xrNodeReadTx = getBrokerTransaction(nodeName);
Optional<Me> meCfg;
try {// Read from a transaction is asynchronous, but a simple// get/checkedGet makes the call synchronousmeCfg = xrNodeReadTx.read(LogicalDatastoreType.OPERATIONAL, iid).checkedGet();
} catch (ReadFailedException e) {throw new IllegalStateException("Unexpected error reading data from " + nodeName, e);
}

2.2 写操作

关于WriteTransaction 的事务操作
钠版本中提交事务为commit()

package org.opendaylight.mdsal.binding.api;
public interface WriteTransaction extends org.opendaylight.mdsal.binding.api.Transaction, org.opendaylight.mdsal.binding.api.WriteOperations {boolean cancel();@edu.umd.cs.findbugs.annotations.CheckReturnValue@org.eclipse.jdt.annotation.NonNullcom.google.common.util.concurrent.FluentFuture<? extends org.opendaylight.mdsal.common.api.CommitInfo> commit();
}

示例:

final Optional<MountPoint> mountPoint = NcmountProvider.getMountPointByNodeName(input.getNodeName());
MountPoint xrNode = mountPoint.get();
DataBroker xrNodeBroker = xrNode.getService(DataBroker.class).get();
WriteTransaction wt = xrNodeBroker.newWriteOnlyTransaction();
InstanceIdentifier<SetManagedElementTimeOutput> aiid = InstanceIdentifier.create(SetManagedElementTimeOutput.class);
SetManagedElementTimeOutputBuilder setManagedElementTimeOutputBuilder = new SetManagedElementTimeOutputBuilder();
wt.put(LogicalDatastoreType.CONFIGURATION, aiid,setManagedElementTimeOutputBuilder.build());
//java.lang.IllegalArgumentException: Can edit only configuration data, not OPERATIONAL
try {wt.commit();
} catch (Exception e) {LOG.error("set alarm mask error with exc:", e);return Futures.immediateFuture(RpcResultBuilder.<RestSetManagedElementTimeOutput>failed().withError(RpcError.ErrorType.RPC,"set alarm mask fail !").build());
}

在碳版本中的提交事务为submit(),并且定位, 例:submit().checkedGet();

  /*** @deprecated*/@java.lang.Deprecateddefault com.google.common.util.concurrent.CheckedFuture<java.lang.Void,org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException> submit() { /* compiled code */ }

示例:

final Optional<MountPoint> mountPoint = NcmountProvider.getMountPointByNodeName(input.getNodeName());
MountPoint xrNode = mountPoint.get();
DataBroker xrNodeBroker = xrNode.getService(DataBroker.class).get();
WriteTransaction wt = xrNodeBroker.newWriteOnlyTransaction();
InstanceIdentifier<SetManagedElementTimeOutput> aiid = InstanceIdentifier.create(SetManagedElementTimeOutput.class);
SetManagedElementTimeOutputBuilder setManagedElementTimeOutputBuilder = new SetManagedElementTimeOutputBuilder();
wt.put(LogicalDatastoreType.CONFIGURATION, aiid,setManagedElementTimeOutputBuilder.build());
//java.lang.IllegalArgumentException: Can edit only configuration data, not OPERATIONAL
try {wt.submit().checkedGet();
} catch (Exception e) {LOG.error("set alarm mask error with exc:", e);return Futures.immediateFuture(RpcResultBuilder.<RestSetManagedElementTimeOutput>failed().withError(RpcError.ErrorType.RPC,"set alarm mask fail !").build());
}

两个版本包内容对比

ODL中版本变化引起包位置的变化相关推荐

  1. yum安装本地rpm包_在 Fedora 中安装替代版本的 RPM 包

    模块化使 Fedora 能够在仓库中提供替代版本的 RPM 软件包.每个 Fedroa 版本可以原生构建不同应用.语言运行时和工具版本的多个版本. -- Adam Šamalík(作者) 模块化 (M ...

  2. 中标麒麟安装rpm包命令_在 Fedora 中安装替代版本的 RPM 包

    模块化使 Fedora 能够在仓库中提供替代版本的 RPM 软件包.每个 Fedroa 版本可以原生构建不同应用.语言运行时和工具版本的多个版本. -- Adam Šamalík(作者) 模块化 (M ...

  3. 如何用python和pip安装在txt文件中配置好版本的库包

    如何用python和pip安装在txt文件中配置好版本的库包 文章目录: 一.建立库包版本的txt配置文件 二.安装txt配置文件中的库包 有时候你自己用python实现一个项目,然后想把它在gith ...

  4. 更新Pycharm中的pip版本及第三方包的安装问题

    参考博客:pip更新及Requirement already up-to-date解决方法 一.更新Pycharm中的pip版本 一开始直接在pycharm中的File–>Settings–&g ...

  5. 浮动广告(页面中一张广告图片不断的变化位置)

    浮动广告(页面中一张广告图片不断的变化位置) <style>#dt{width: 150px;height: 150px;background-color: red;position: a ...

  6. python二次开发ug_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法

    从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...

  7. python中nx_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法

    从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...

  8. 如何安装旧版本的 R 包

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 我们在安装 R 包的时候,经常会发现某个最新的包与当前 R 的版本不兼容. > inst ...

  9. 【FPGA】SRIO中的关键问题总结(一)SRIO中的关键数据包格式总结

    目录 1 SRIO事务及其类型 2 常用的I/O逻辑操作事务 3 HELLO包格式(重点) 4 SRIO数据包包格式 5 控制符号数据包格式 1 SRIO事务及其类型 SRIO(Serial Rapi ...

  10. Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

最新文章

  1. TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04
  2. 【 MATLAB 】使用案例研究 DTFT 的对称性
  3. 树莓派私有云(OwnCloud)搭建(三) OwnCloud安装
  4. 趋势解读:John D′Ambrosia告诉你下一代以太网路在何方?
  5. ACM POJ 2192 Zipper
  6. 数据中心机房常用通信管道塑料管材
  7. GetOpenFileName的简单使用实例
  8. 自定义RecyclerView动画——实现remove飞出效果
  9. oracle实现主键自动增长
  10. eclipse注释模板_Intellij IDEA设置默认文档注释
  11. 我的Java设计模式-原型模式
  12. 计算机技术应用论文参考,计算机技术应用参考论文(2)
  13. 【To Do】LeetCode 142. Linked List Cycle II
  14. java 流 改变编码_JAVA IO流中字符串编码不一致问题
  15. easydarwin 安装_EasyDarwin流媒体服务器
  16. 腾达Tenda 路由器后门分析
  17. 线性代数 --- 什么是矩阵的逆?(个人笔记扫描版)
  18. 1228 序列求和 (伯努利数)
  19. 5.29 C语言练习(计算数字个数:从键盘输入一串字符,输出字符串里的数字字符数。)
  20. 潘金莲给武松的最后一封信

热门文章

  1. Android Janus漏洞修复
  2. word无法显示下划线
  3. Mac解决mysql stop报错问题:The /usr/local/mysql/data directory is not owned by the ‘mysql‘ or ‘_mysql‘
  4. v-text 丶v-html丶v-bind
  5. 【NOI OJ】1818 红与黑
  6. 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...
  7. oom killer java_Linux应用进程消失之谜--Java进程与OOM Killer
  8. jQuery下载所有版本(实时更新……)
  9. win10 文件系统错误-2147416359
  10. java判断移动端和pc端_java判断是移动端还是pc端