ODL中版本变化引起包位置的变化
碳版本对比钠版本
碳版本
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中版本变化引起包位置的变化相关推荐
- yum安装本地rpm包_在 Fedora 中安装替代版本的 RPM 包
模块化使 Fedora 能够在仓库中提供替代版本的 RPM 软件包.每个 Fedroa 版本可以原生构建不同应用.语言运行时和工具版本的多个版本. -- Adam Šamalík(作者) 模块化 (M ...
- 中标麒麟安装rpm包命令_在 Fedora 中安装替代版本的 RPM 包
模块化使 Fedora 能够在仓库中提供替代版本的 RPM 软件包.每个 Fedroa 版本可以原生构建不同应用.语言运行时和工具版本的多个版本. -- Adam Šamalík(作者) 模块化 (M ...
- 如何用python和pip安装在txt文件中配置好版本的库包
如何用python和pip安装在txt文件中配置好版本的库包 文章目录: 一.建立库包版本的txt配置文件 二.安装txt配置文件中的库包 有时候你自己用python实现一个项目,然后想把它在gith ...
- 更新Pycharm中的pip版本及第三方包的安装问题
参考博客:pip更新及Requirement already up-to-date解决方法 一.更新Pycharm中的pip版本 一开始直接在pycharm中的File–>Settings–&g ...
- 浮动广告(页面中一张广告图片不断的变化位置)
浮动广告(页面中一张广告图片不断的变化位置) <style>#dt{width: 150px;height: 150px;background-color: red;position: a ...
- python二次开发ug_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法
从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...
- python中nx_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法
从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...
- 如何安装旧版本的 R 包
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 我们在安装 R 包的时候,经常会发现某个最新的包与当前 R 的版本不兼容. > inst ...
- 【FPGA】SRIO中的关键问题总结(一)SRIO中的关键数据包格式总结
目录 1 SRIO事务及其类型 2 常用的I/O逻辑操作事务 3 HELLO包格式(重点) 4 SRIO数据包包格式 5 控制符号数据包格式 1 SRIO事务及其类型 SRIO(Serial Rapi ...
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
最新文章
- TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04
- 【 MATLAB 】使用案例研究 DTFT 的对称性
- 树莓派私有云(OwnCloud)搭建(三) OwnCloud安装
- 趋势解读:John D′Ambrosia告诉你下一代以太网路在何方?
- ACM POJ 2192 Zipper
- 数据中心机房常用通信管道塑料管材
- GetOpenFileName的简单使用实例
- 自定义RecyclerView动画——实现remove飞出效果
- oracle实现主键自动增长
- eclipse注释模板_Intellij IDEA设置默认文档注释
- 我的Java设计模式-原型模式
- 计算机技术应用论文参考,计算机技术应用参考论文(2)
- 【To Do】LeetCode 142. Linked List Cycle II
- java 流 改变编码_JAVA IO流中字符串编码不一致问题
- easydarwin 安装_EasyDarwin流媒体服务器
- 腾达Tenda 路由器后门分析
- 线性代数 --- 什么是矩阵的逆?(个人笔记扫描版)
- 1228 序列求和 (伯努利数)
- 5.29 C语言练习(计算数字个数:从键盘输入一串字符,输出字符串里的数字字符数。)
- 潘金莲给武松的最后一封信
热门文章
- Android Janus漏洞修复
- word无法显示下划线
- Mac解决mysql stop报错问题:The /usr/local/mysql/data directory is not owned by the ‘mysql‘ or ‘_mysql‘
- v-text 丶v-html丶v-bind
- 【NOI OJ】1818 红与黑
- 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...
- oom killer java_Linux应用进程消失之谜--Java进程与OOM Killer
- jQuery下载所有版本(实时更新……)
- win10 文件系统错误-2147416359
- java判断移动端和pc端_java判断是移动端还是pc端