☰
Current Page
Main Menu
Home
Home
Editing
利源SMI-数据集模型扩展问题排查
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# 利源SMI-数据集模型继承扩展调用问题排查 ## 1. 问题描述 项目:利源项目 【利源 测试/生产环境】-SMI应用点击菜单 数据源管理---> 数据集 ,筛选条件选择 类型 type=SQL时,调用查询结果没有数据 http://192.168.174.169:30666/iidp/smi/mi_base_root_menu/mi_base_data_source_menu/mi_base_data_set_menu  ## 2. 问题排查顺序: 1. 在本地测试验证,SMI测试环境验证mijiuye环境验证,都是正常的,我们自己的测试环境问题不能复现。 2. 首页检查利源测试和生产环境mysql版本,字符集是否为 utf8mb4、排序规则是否为 utf8mb4_bin,确认都是正确的,排除数据库字符集问题。 2. 执行SQL排查:将利源环境的表导入到本地,执行SQL成功,SQL是正确的,排查SQL问题。 3. 检查SMI的代码:检查模型`mi_base_data_set`模型的`search`方法,`search`方法没有被重写,代码逻辑是正常的。刚开始怀疑是order by字段的问题,设置order by字段后,使用postman测试接口查询, mijiuye环境和mi环境都是正常的,无法复现,排除`order by`的问题。 4. 到这一步,字符集是正常的,sql是正常的,代码逻辑是正常的,请求参数是正常的, 一切都看着正常。 5. 最后只能怀疑是不是扩展的问题? 点击菜单:开发者中心---模型管理,搜索模型`mi_base_data_set` ,查看模型的继承扩展于: ```java smi-base-datasource.models.dataset.DataSet, smi-base-asset.models.asset.AbstractAsset, smi-base-datasource.models.dataset.ExcelSet, smi-base-datasource.models.dataset.KafkaSet, smi-base-datasource.models.dataset.WebSocketSet, smi-base-datasource.models.dataset.RabbitMQSet, smi-base-datasource.models.dataset.VideoSet, smi-base-datasource.models.dataset.JDBCSet, smi-base-datasource.models.dataset.ApiSet, iiot_datasource.ApiSet, iiot_datasource.DataSet, base.buss_model ```  ,发现IIOT的 iiot_datasource.DataSet扩展了SMI的`mi_base_data_set`,然后查看IIOT的代码 DataSet,发现 IIOT重写了`mi_base_data_set`的search方法,但是重写错误了,导致查询不出结果。 ``` package com.sie.iiot.apps.datasource.model; @SDK.Model(name = "mi_base_data_set", parent = "mi_base_data_set") public class DataSet extends Model { public List<Map<String, Object>> search(RecordSet rs, Filter filter, List<String> properties, Integer limit, Integer offset, String order) {} ``` ## 3. 根本原因: IIOT重写了SMI 模型`mi_base_data_set`的search方法,但是重写错误了,导致查询不出结果。 ## 4. 如何解决: IIOT修改扩展的search方法 ## 5. 如何快速的定位继承扩展问题: 1. 如何避免跨产品线的扩展,跨产品线的扩展是否需要专门的记录和维护? 2. 是否可以提供final声明,标明这个方法或者模型不允许扩展。 3. 如何快速的查看模型的继承链路,模型的扩展链路?方便快速的定位问题,现在查看模型的继承扩展不清晰。 4. 如果扩展了模型的方法,执行方法时,是否可以输出日志打印真正执行的是哪一个APP,哪一个类加载的方法,把具体的className输出? 
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel