简介
现在我们已经熟悉了定制适配器开发的各个方面,我们可以继续进行实际更改以修改适配器的功能。作为一个例子,我们将使用以下文章中描述的需求,并使用自定义适配器实现解决方案。
从文件系统/服务器同步检索动态指定的文件
总之,我们希望通过提供包含文件完整路径的输入有效负载,从PI文件系统同步检索文件的内容。在发送方或接收方模式下,文件适配器当前都不支持此操作。为了达到这个目的,我们将修改自定义适配器的接收器功能为:-
i)从请求有效负载中提取文件的完整路径
ii)提取文件内容
iii)与包含文件内容的有效负载生成同步响应
适配器元数据更改
我们将更新采样器a.xml定义适配器元数据的文件。以下是更改要求:-
i)删除旧的传输协议并替换为新的传输协议
ii)删除旧的消息协议并替换为新的消息协议
iii)添加新的通道属性和相应的详细信息
首先,删除文件。将其替换为以下内容:-
接下来,在文件的Outbound部分删除先前的JCA10消息协议。将其替换为以下内容:-
如下图所示添加通道属性xpathToFile的详细信息。
通过导入此修改的文件更新ESR中的适配器元数据采样器a.xml文件并激活适配器元数据对象。
注意:为了简单起见,尽管之前定义了许多未使用/孤立的属性,
源代码更改
下一步,我们将更新适配器的源代码以修改其功能。不幸的是,阿里大数据应用平台,示例适配器源代码的某些部分的编写方式不便于增强或修改。因此,将有大量的注释和删除现有代码。
此外,我们将使用自定义适配器模块中使用的实用程序库,以重用一些现有逻辑并简化开发。所以,去均衡xpi模块的最新版本并下载com.equalize.xpi公司.实用程序.jar文件。然后将其作为外部JAR添加到项目的构建路径中,如下所示。
i)SPIManagedConnection
首先,我们将注释掉现有示例适配器逻辑使用的一些私有实例属性。
接下来,在类的构造函数中,注释掉trace语句。(实际上,这个语句并没有什么真正的错误,只是它错误地使用了上面注释掉的属性之一–可以选择相应地修改语句,而不是注释掉)。
仍然在构造函数中,注释掉访问旧通道属性(即fileOutDir、fileOutPrefix等)的try-catch块(一直到构造函数结束)。替换为访问新通道属性xpathToFile的try-catch块。
删除以下方法(未显示屏幕截图):-
为私有属性通道创建以下getter方法getChannel()。
在destroy()方法中,注释掉如下语句。
在cleanup()方法中,注释掉if else块,云服务器和服务器,如下所示。
ii)XIConfiguration
与上面类似,注释掉使用旧通道属性的逻辑。这部分逻辑确保适配器框架能够在初始化期间或添加通道时读取通道属性。为简单起见,我们不会更改存储检索到的值的变量的名称(dir&name)。
如下所示,注释掉channelAdded()和init()方法中的旧属性,并使用xpathToFile添加逻辑。
在getChannelStatus()方法中,注释掉使用旧属性的部分,并使用xpathToFile添加逻辑。
iii)CCI交互
删除以下方法(未显示屏幕截图):-
注释掉执行send()或call()方法的现有部分。我们将在这里引入新逻辑的核心部分,以满足上述需求。添加一个使用新方法retrieveFile()的新语句,如下所示。
随后,使用以下命令添加方法retrieveFile()的逻辑代码:-
确保任何缺少的导入语句都被相应地添加。
简而言之,当接收通道处理消息时,将执行上述逻辑。它根据输入负载中Xpath表达式的计算值确定需要检索的动态文件。然后检索文件内容并基于它构造响应负载。
部署描述符更改
以下是对ra.xml文件文件。如前所述,这不会影响功能。
清单文件更改
在部署之前,建议更改SAP中部署的版本号_舱单.MF文件。在下面的示例中,它被更改为1.0.0,以表示基于语义版本控制的此适配器的第一个主要版本。
注意:如果在正确的版本之前需要多次尝试和错误部署,我们可以用额外的第四位数字补充版本控制,并在每次新部署时增加它,大数据的数据库,i、 e.1.0.0.1、1.0.0.2、1.0.0.3.
导出和部署
完成后,我们几乎可以部署了。在此之前,我们需要确保实用程序库的外部JAR文件也包含在RAR项目中。将文件复制并粘贴到如下所示的RAR项目的connectorModule文件夹中。
继续完成部署所需的步骤(请参阅第1部分中的步骤)
配置和测试
我们现在准备好配置适配器并进行测试。
使用自定义适配器配置接收器通道。新的传输协议和消息协议将在选择适配器类型时反映出来。
随后,新的通道属性将可供输入。输入XPath表达式作为如下所示:-
激活通道后,配置使用接收器通道的集成场景(经典、ICO或IFlow)。这一步将不包括在本文中。
为了测试,我将尝试从PI admin用户的主目录中检索一个文件。下面的屏幕截图显示了我想要检索的CSV文件。
使用内置测试功能,一条请求消息被触发到集成场景。该消息包含一个带有CSV文件完整路径的XML有效负载。
消息触发和处理成功后,我们可以在消息日志中查看适配器逻辑生成的以下日志条目。
最后,我们能够在响应消息的有效负载中查看检索到的文件的内容。
源代码
以下GitHub存储库中提供了两个Eclipse项目(adapter和RAR)
GitHub equalize xpi adapter sample存储库
结论
Phew!最后,经过这么多精心设计的步骤,我们已经成功地根据需求定制了适配器的功能。