清除过滤器
文章
Shanshan Yu · 四月 18, 2023
随着生活水平的提高,人们越来越注重身体健康。 而孩子的健康成长也越来越成为家长关心的话题。 孩子的身体发育可以从孩子的身高和体重反映出来。 因此,及时预测身高和体重具有重要意义。 通过科学的预测和比较,关注孩子的发育状态。
该项目使用InterSystems IRIS Cloud SQL通过输入大量体重和身高相关数据来支持,并建立基于IntegratedML的AutoML进行预测分析。 根据输入的父母身高,可以快速预测孩子未来的身高,并根据当前的身高和体重状况判断孩子的体重指数。 在正常范围内。
功能:
通过应用该程序,可以快速预测处于正常发育状态的儿童的身高。 通过结果,家长可以判断孩子发育是否正常,是否需要临床干预,有助于了解孩子未来的身高; 通过当前体重状态判断当前孩子的BMI是否正常,了解孩子当前的健康状况
应用场景
1.儿童身高预测
2. 监测儿童发育
文章
Meng Cao · 五月 10, 2023
今天从官网下载了IRISHealth-2023.1.0.229.0-lnxrh9x64版本的数据库安装包,在RHEL9.0上进行安装配置测试,遇到一个问题,趁热记录下来。
测试环境及软件版本:
操作系统——Red Hat Enterprise Linux release 9.0 (Plow)
数据库——IRISHealth-2023.1.0.229.0-lnxrh9x64
测试创建镜像时,配置好虚拟IP,点击保存。
保存后发现数据库没有变成主成员状态,一直是等待的状态,如下图所示:
这时查看控制台日志发现有大量报错,如下图所示:
从控制台日志看出,此时矛头指向了virtualIP.sh,经过查找发现这个脚本位置在安装目录下的bin目录中。
这里只是创建了MIRROR的配置,然后出现了问题,大概可以猜到可能是添加VIP的方法有什么问题,开启脚本的DEBUG,测试运行添加VIP的方法。
果然,发现了一处报错,如下图所示:
打开脚本文件,查看第588行代码。
研究发现RHEL9.0中,ID=`id | grep uid= | awk -F"=" '{print $2}' | awk -F"(" '{print $1}'`,$ID返回是空,不是数字,所以报错了,修改脚本,注释掉其中六行代码,并关闭DEBUG,如下:
保存脚本后,再次执行添加IP方法测试,IP可以正常添加。PS:不要忘记把测试添加的IP移除掉。
重启数据库,发现MIRROR状态恢复正常。
大家是否有遇到这个问题,可在评论区交流~~~
公告
Claire Zheng · 十月 24, 2022
各位开发者社区的同学们,大家好!
我们的🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与!
以下是获奖名单!
1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出
🥇一等奖1名,Apple iPad
@Zhe Wang
获奖作品:IRIS如何进行CRUD操作
🥈二等奖2名,Beats Fit Pro
@姚 鑫
获奖作品:IRIS与Caché的23种设计模式
@聆严 周
获奖作品:使用Prometheus监控Cache集群
🥉三等奖3名,WD 固态硬盘
@John Pan
获奖作品:如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例
@he hf
获奖作品:10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用
@sun yao
获奖作品:前端操作自动生成BS、BP、BO
2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品
🥇第一名,HUAWEI WATCH 3智能手表
@Meng Cao
获奖作品:Caché数据库私有apache版本升级
🥈第二名,罗技(Logitech)ERGO键盘
@lizw lizw
获奖作品:关于%Dictionary.CompiledClass类在实际业务中的一些应用
🥉第三名-第五名,KEEP 运动智能手环
@Chang Liu
获奖作品:在国产系统上安装Healthconnect2021
@shaosheng shengshao
获奖作品:HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密
@Guangliang Zhang
获奖作品:基于cconsole.log的cache数据库的实时监控
3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。
@water huang
获奖作品:对 %XML.PropertyParameters类的探索
@zhanglianzhu zhanglianzhu
获奖作品:Cache死循环检测和申明式事务
@li wang
获奖作品:HealthConnect访问HTTPS开头地址
@bai hongtao
获奖作品:第三方HA软件结合MIRROR使用方法探讨
@Liu Tangh
获奖作品:在Cache系统中使用负载均衡服务的探讨
@yaoguai wan
获奖作品:IRIS架构的浅显理解以及windows10、docker安装IRIS Health详解流程及部分问题浅析
@li dong
获奖作品:实现Cache/IRIS中zip文件的下载、解压及读取
@Yuxiang Niu
获奖作品:Cache中不同类型锁的理解与分析
@Vincent Wu
获奖作品:TrakCare Lab之延伸应用-护理站自动采检备管系统(NSAD)之开发
感谢大家的积极参与!
请获奖嘉宾及时通过此链接提交相关信息,以便我们及时与您联系奖品寄送事宜。
文章
Jingwei Wang · 十一月 2, 2021
InterSystems 技术概要
技术概要(First Look)是为用户提供InterSystems IRIS的关键技术和选项的实践经验的简短文档,其中涉及到的许多技术都可以在免费的评估实例上体验。所有这些技术都可以在已授权的InterSystems IRIS实例上完成。
部署
技术概要:InterSystems 云管理器(First Look: InterSystems Cloud Manager)
介绍InterSystems 云管理器,为您展示如何利用它在公有云上部署InterSystems产品。
技术概要: 容器中的InterSystems 产品(First Look: InterSystems Products in Containers)
介绍Docker容器和在容器中运行InterSystems产品。
InterSystems IRIS 基础:安装(InterSystems IRIS Basics: Installation
指导用户完成InterSystems IRIS的单实例安装,以便与其它技术概要(First Looks)一起使用。
架构
技术概要:使用InterSystems分布式缓存扩展系统的用户容量
介绍了使用由ECP支持的分布式缓存来扩展用户容量。
技术概要:部署InterSystems分片集群
介绍分片(sharding),以及如何使用分片扩展基于InterSystems的应用程序的数据量。
技术概要:数据弹性和镜像
介绍InterSystems产品的故障恢复、高可用性和灾备功能。
开发环境
InterSystems IRIS基础: 连接一个IDE
介绍如何将一个IDE连接到InterSystems IRIS上。
Java和JDBC
技术概要:JDBC 和 InterSystems数据库
介绍如何通过JDBC连接到InterSystems数据库:快速入门,并有机会自己尝试
技术概要: InterSystems IRIS Native API for Java
介绍如何使用InterSystems IRIS Native从Java应用程序中访问InterSystems globals。
技术概要:用XEP实现Java对象持久化
介绍如何使用XEP对象持久化API存储和检索持久化的Java对象。
技术概要:Java 网关和 InterSystems 产品
介绍InterSystems产品通过Java 网关与Java组件进行互操作的能力。
.NET和ODBC
技术概要: ODBC 和 InterSystems数据库
介绍如何通过ODBC连接到InterSystems数据库。
技术概要:InterSystems IRIS Native API for .NET
演示如何通过使用了IRIS Native的.NET应用程序访问InterSystems globals
技术概要:ADO.NET 和InterSystems产品
介绍了如何通过InterSystems ADO.NET Managed Provider连接到InterSystems产品
技术概要: 用XEP实现.Net对象持久化
介绍如何使用XEP对象持久化API存储和检索持久化的.NET对象
技术概要:InterSystems .NET网关
介绍如何使用InterSystems . NET网关(Gateway)。
嵌入式语言
技术概要: ObjectScript
介绍ObjectScript语言,演示如何使用它以多种方式访问数据。
技术概要: Globals
介绍Globals概念,这是InterSystems IRIS数据平台的底层存储结构。.
技术概要:InterSystems SQL
介绍InterSystems SQL、InterSystems产品中常用SQL语句的使用,以及优化查询性能的独特方法。
技术概要:使用InterSystems产品优化SQL性能
介绍InterSystems SQL查询优化技术。
技术概要:在InterSystems产品中开发REST接口
介绍在InterSystems产品中开发REST接口,以提供对数据库和应用程序的访问。
互操作Production
技术概要:使用带有互操作性的Production连接系统
Production介绍。
技术概要:使用 Production 进行大文件传输(Managed File Transfer,MFT)
介绍了大文件传输(MFT)特性,该特性允许用户将第三方文件传输服务直接轻松地包含到InterSystems互操作性产品中。
技术概要:数据转换
介绍DTL编辑器以及如何在互操作性产品中将数据转换为不同的格式。
分析
技术概要:使用InterSystems产品进行SQL搜索
介绍对SQL文本搜索的支持,它为非结构化文本数据提供了语义上下文搜索。
技术概要:InterSystems产品文本分析功能
介绍了对自然语言处理(NLP)文本分析的支持,它为各种自然语言中的非结构化文本数据提供语义分析。
技术概要:InterSystems IRIS 和 UIMA
介绍InterSystems IRIS如何实现并补充了UIMA分析管道.
安全
技术概要:基于角色的访问控制
介绍InterSystems产品中基于角色的访问控制:快速了解并尝试。
技术概要:LDAP和InterSystems产品
介绍如何使用LDAP服务器对InterSystems产品的用户进行身份验证和分配特权。
技术概要:数据加密
技术概要:数据加密
提供对InterSystems数据库加密工具的简要的实际操作介绍。
技术概要:InterSystems公开密钥基础设施 (PKI)
技术概要:InterSystems公开密钥基础设施 (PKI)
介绍了在InterSystems产品中可用的公钥加密、证书颁发机构(CAs)和PKI。
文档目录里面的链接打不开,请看看,谢谢!
文章
Lele Yang · 七月 13, 2021
与Windows上默认安装为服务随机自启动不同,我们在Linux上安装完InterSystems IRIS后,默认是没有配置系统服务的,需要做手动配置。本文提供使用systemd方式来配置InterSystems IRIS服务随机自启动的简单示例,供大家参考。
假设我们已经安装了InterSystems IRIS产品,安装完成后您可以通过iris list来来查看实例信息,包括安装路径,如:"/intersystems/iris"
[root@RHEL8-64-001 ~]# iris list
Configuration 'IRIS' (default)
directory: /intersystems/iris
versionid: 2021.2.0L.546.0
datadir: /intersystems/iris
conf file: iris.cpf (SuperServer port = 51773, WebServer = 52773)
status: running, since Mon May 31 05:03:09 2021
state: ok
product: InterSystems IRIS
在安装完成后,用以下方式搜索不到iris.service,
[root@RHEL8-64-001 ~]# systemctl list-unit-files --type=service|grep iris.service
如何将其配置为系统服务呢,下面是一个简单示例及操作步骤,供大家参考。注意:请使用root用户或者拥有root权限的用户来进行。
1. 创建systemd service,1) 在/usr/lib/systemd/system下创建文件,iris.service,内容如下,
[root@RHEL8-64-001 system]# cat iris.service
[Unit]
Description=InterSystems IRIS
[Service]
Type=forking
ExecStart=/bin/bash -c '/intersystems/iris/irisstart 2>&1 | logger -t iris_start'
ExecStop=/bin/bash -c '/intersystems/iris/irisstop quietly 2>&1 | logger -t iris_stop'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
其中,/intersystems/iris为实例安装目录。2) 创建后,更改文件的属性,
[root@RHEL8-64-001 system]# chmod 755 iris.service
更改后,文件属性如下,-rwxr-xr-x. 1 root root 225 May 31 07:32 iris.service
2. 启用该Service。1)启用,创建系统service的link,
[root@RHEL8-64-001 system]# systemctl enable iris.service
Created symlink /etc/systemd/system/multi-user.target.wants/iris.service → /usr/lib/systemd/system/iris.service.
2)确认状态,确保已经enabled
[root@RHEL8-64-001 system]# systemctl list-unit-files --type=service|grep iris.service
iris.service enabled
3. 测试该Service,1)进行到这个步骤,查看状态应为inactive(dead)。
[root@RHEL8-64-001 system]# systemctl status iris
● iris.service - InterSystems IRIS
Loaded: loaded (/usr/lib/systemd/system/iris.service; enabled; vendor preset>
Active: inactive (dead)
lines 1-3/3 (END)
2) 下面来启动iris服务,
[root@RHEL8-64-001 system]# systemctl start iris.service
3) 再次查看服务状态已经为active(running),启动成功。
[root@RHEL8-64-001 system]# systemctl status iris
● iris.service - InterSystems IRIS
Loaded: loaded (/usr/lib/systemd/system/iris.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-05-31 07:57:43 EDT; 1min 37s ago
Process: 1704 ExecStart=/bin/bash -c /intersystems/iris/irisstart 2>&1 | logger -t iris_start (code=exited, status=0/SUCCE>
Tasks: 52 (limit: 11442)
Memory: 246.0M
CGroup: /system.slice/iris.service
├─2076 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr/ -w/intersystems/iris/mgr/ -cc -B -C/intersystems/i>
├─2085 /intersystems/iris/bin/irisdb WD >
├─2086 /intersystems/iris/bin/irisdb GC >
├─2087 /intersystems/iris/bin/irisdb JD >
├─2088 /intersystems/iris/bin/irisdb AUX7 >
├─2089 /intersystems/iris/bin/irisdb AUX6 >
├─2090 /intersystems/iris/bin/irisdb AUX5 >
├─2091 /intersystems/iris/bin/irisdb AUX4 >
├─2092 /intersystems/iris/bin/irisdb AUX3 >
├─2093 /intersystems/iris/bin/irisdb AUX2 >
├─2094 /intersystems/iris/bin/irisdb AUX1 >
├─2095 /intersystems/iris/bin/irisdb DBXD >
├─2098 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 START^MONITOR
├─2102 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 START^CLNDMN
├─2105 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 stumonitor^JRNRESTO
├─2109 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 ^RECEIVE
4)最后重启操作系统,测试iris可以随机自启动。
注:以上测试在Red Hat Linux Enterprise 8版本上进行。
文章
Johnny Wang · 二月 11, 2022
Hello 家人们,
InterSystems 学习网站有许多非常棒的课程。 因此,如果您想了解 InterSystems 并开始使用 InterSystems,希望这些资源可以帮到你:
概述:
InterSystems 产品和技术简介
基础知识:
InterSystems ObjectScript 基础知识
InterSystems SQL 概述
InterSystems IRIS 对象介绍
迁移到 IRIS
后端开发:
设置 RESTful 服务
在 InterSystems IRIS 中使用 JSON
面向开发人员的 InterSystems API Manager 动手实践
构建数据驱动的 Web 应用程序
集成开发:
集成架构
构建 BPL 业务流程
建立自定义业务运营
构建定制业务服务
数据转换基础
非常好的外部资源
互操作性课程
分析开发:
IRIS BI 架构师
IRIS BI 分析器
BI 数据模型
InterSystems IRIS 自适应分析基础
InterSystems 报告入门
IntegratedML 动手实践
来自 learning.intersystems.com 的资源:
如果你想开始,您还可以根据您想要做的事情来个性化选择你需要的资源:
使用 InterSystems 构建服务器端应用程序
使用 InterSystems IRIS 构建业务集成
使用 InterSystems IRIS BI 分析数据
使用自适应分析构建数据模型
使用 InterSystems 报告以可视方式交付数据
在 InterSystems IRIS 中使用 IntegratedML 预测结果
或者,我们在这里为实施合作伙伴(或将做所有事情的其他人,资源对所有人开放)提供了一些更大的资源
文章
Jeff Liu · 九月 22, 2021
本文档介绍了如何使用 InterSystems JDBC 驱动程序连接到 InterSystems IRIS®数据平台实例,这样您就可以在 InterSystems IRIS 中使用 Java。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
JDBC:如何在 InterSystems IRIS 中使用它
InterSystems 提供了完全兼容的(JDBC 4.2)、纯 Java、type 4 JDBC 驱动程序,它是一个独立的 JAR 文件,没有任何依赖性。如果您已经熟悉 JDBC,并且安装了 JDK 1.8,那么您需要做的就是将 JDBC 驱动程序添加到本地 CLASSPATH 中(请参见 JDBC:Exploring It [《JDBC:探索它》] )。JDBC URL(连接字符串)是:
jdbc:IRIS://ipAddress:superserverPort/namespace
其中的变量表示 InterSystems IRIS 实例主机的 IP 地址、实例的超级服务器端口和实例上的命名空间。
如果您连接到本地计算机上的一个实例(使用主机名 localhost 或 IP 地址 127.0.0.1),该连接可以使用一种特殊的、高性能的本地连接,称为共享内存连接(shared memory connection)。有关共享内存连接(shared memory connection)的更多信息,请参见 "JDBC:What's Unique about Shared Memory Connections(《JDBC: 共享内存连接的独特之处》)"。
本文档的重点是让您体验一下在 InterSystems IRIS 中使用 JDBC,而不是让您陷入细节困境 ,所以我们保持了简单的探索。但是,当您把 InterSystems IRIS 引入您的生产系统时,您需要做很多不同的事情,例如(但不限于)安全性方面。所以请确保不要把这种对 InterSystems IRIS 的探索与真实的情况相混淆! 本文档末尾提供的参考资料将使您对在生产中使用 JDBC 与 InterSystems IRIS 的情况有一个很好的了解。
JDBC:InterSystems IRIS Java 连接选项的一部分
InterSystems IRIS JDBC 驱动程序是 InterSystems IRIS 的核心 Java 组件,支持传统的关系(SQL)访问。它还为使用 InterSystems IRIS Native API for Java 的 Java 调用提供连接机制,这些调用可以访问本机存储格式中的数据。对于基于对象的 Java 集成,InterSystems IRIS 还提供一个单独的功能------InterSystems IRIS XEP 组件(InterSystems IRIS XEP component)。
综上所述,InterSystems IRIS 提供了一组独特的功能,可以使用相同的物理连接和事务环境来使用多个范例(本机[native]、关系[relational]和面向对象[object-oriented])操作数据。对于更复杂的应用程序,InterSystems 完全支持 Hibernate。支持所有这些连接形式的------InterSystems IRIS XEP、Hibernate 以及 InterSystems IRIS Spark 连接器(Connector)------是 InterSystems IRIS JDBC 驱动程序。
技术概要: JDBC 和 InterSystems 数据库 1
JDBC:探索它
JDBC: 共享内存连接(Shared Memory Connections)的独特之处
与其他数据库平台一样,到远程 InterSystems IRIS 实例的 JDBC 连接是通过 TCP/IP 进行的。为了最大限度地提高性能,InterSystems IRIS 还提供了 Java 共享内存连接(shared memory connection)。与 InterSystems IRIS 实例在同一计算机上运行的许多 Java 应用程序都可以使用共享内存连接(shared memory connection)。
共享内存连接(shared memory connection)是一个临时设备,支持虚拟内存,由 JDBC 客户端和运行在同一物理计算机上的 InterSystems IRIS 实例共享。此外,这些连接不需要对内核网络堆栈进行潜在的昂贵调用。通过使用直接从 JDBC 客户端到 InterSystems IRIS 的通道,它们最终为 JDBC 操作提供了低延迟和高吞吐量。
有关共享内存(shared memory connection)的详细信息,请参见 Using Java with the InterSystems JDBC Driver(《在 InterSystems JDBC 驱动程序中使用 Java》)中的 "Shared Memory Connections(共享内存连接)"。
JDBC:探索它
我们开发了一个演示,向您展示如何使用 JDBC 和 InterSystems IRIS------以及这是多么地简单。
请注意,这段代码并没有演示 InterSystems Java 共享内存连接(shared memory connection)的性能提升,因为它无法处理共享内存连接(shared memory connection)可以高效处理的大量数据。
想试试 InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
用前须知
要使用该程序,您需要在一个系统上工作,安装 JDK 1.8 版本和您选择的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。有关如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Java IDE 中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。对于这个演示,您可以连接到 USERnamespace,如下面的代码所示,或者您可以指定在已安装的实例中创建的另一个命名空间。
您还需要将 InterSystems IRIS JDBC 驱动程序 intersystems-jdbc-3.0.0.jar 添加到您的本地 CLASSPATH。您可以从 https://github.com/intersystems/quickstarts-java/tree/master/lib 下载这个文件。如果您已经在您的本地计算机或您能访问的另一台计算机上安装了 InterSystems IRIS,您可以在 install-dirdevjavalibJDK18 中找到该文件,其中 install-dir 是 InterSystems IRIS 的安装目录。
尝试示例代码
将示例代码剪切并粘贴到您的 IDE 中,使用 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE 》)中的connection settings described for your instance(为您的实例描述的连接设置)更新 url 和连接(connecttion)变量以及用户名和密码。 .
import java.sql.*;
public class JDBCSample {
public static void main(String[] str) throws Exception {
String url = "jdbc:IRIS://127.0.0.1:1972/USER";
Class.forName("com.intersystems.jdbc.IRISDriver");
Connection connection = DriverManager.getConnection(url,"_SYSTEM","SYS");
// Replace _SYSTEM and SYS with a username and password on your system
String createTable = "CREATE TABLE People(ID int, FirstName varchar(255), LastName varchar(255))"; String insert1 = "INSERT INTO People VALUES (1, 'John', 'Smith')";
String insert2 = "INSERT INTO People VALUES (2, 'Jane', 'Doe')"; String query = "SELECT * FROM People";
Statement statement = connection.createStatement(); statement.executeUpdate(createTable); statement.executeUpdate(insert1); statement.executeUpdate(insert2);
ResultSet resultSet = statement.executeQuery(query); System.out.println("Printing out contents of SELECT query: "); while (resultSet.next()) {
System.out.println(resultSet.getString(1) + ", " + resultSet.getString(2) + ", " + resultSet.getString(3));
}
resultSet.close(); statement.close(); connection.close();
}
}
如果连接和查询已经成功完成,您应该会看到一个控制台窗口(console window),其中包含 SELECT 查询的结果。
4 了解有关 JDBC 的更多信息
要了解有关 JDBC、InterSystems IRIS 中的其他 Java 互操作性技术和其他相关主题的更多信息,请参见:
Using Java JDBC with InterSystems IRIS(《在 InterSystems IRIS 中使用 Java JDBC》)中的 "InterSystems Java Connectivity Options(InterSystems Java 连接选项)"------对JDBC 驱动程序支持的所有 InterSystems IRIS Java 技术的概述。
Using Java with the InterSystems JDBC Driver(《在 InterSystems JDBC 驱动程序中使用 Java》)------InterSystems 文档:step-by-step instructions for using JDBC(《使用 JDBC 的详细说明》)。
First Look: XEP Object Persistence with InterSystems IRIS(《技术概要: 使用 InterSystems IRIS 持久化 XEP 对象》)------InterSystems 文档:Java XEP First Look(《Java XEP 技术概要》)
First Look:InterSystems IRIS Native API for Java(《技术概要: InterSystems IRIS Native API for Java》)------InterSystems 文档:InterSystems IRIS Native API First Look(《InterSystems IRIS Native API 技术概要》)
Java Overview(《Java 概述》)------InterSystems 在线学习:介绍视频
Persisting Java Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 Java 对象》)------InterSystems 文档:step-by-step instructions for using XEP(《使用 XEP 的详细说明》)
InterSystems Implementation Reference for Java Third Party APIs (《Java 第三方 API 的 InterSystems 实施参考》)------InterSystems 文档:connecting to InterSystems IRIS using JDBC, Hibernate, and Spark(《使用 JDBC、Hibernate 和 Spark 连接 InterSystems IRIS》)。
Using the InterSystems Spark Connector(《使用 InterSystems Spark 连接器》)------InterSystems 文档:using InterSystems IRIS as an Apache data source(《使用 InterSystems IRIS 作为 Apache 数据源》)
Hibernate and JDBC compared(《Hibernate 和 JDBC 的比较》)------栈溢出(Stack Overflow)的文章
文章
Michael Lei · 四月 17, 2022
# 在IRIS容器里添加VSCode
设置可重复的开发环境的最简单的方法之一是使用容器。我发现在快速迭代时,在我的开发环境容器里托管一个vscode实例是非常方便的。因此,我创建了一个快速的容器脚本,将一个基于浏览器的vscode添加到IRIS容器中。这应该适用于大多数2021.1以上的容器。[我的代码库可以在这里找到](https://github.com/nickmitchko/Hosting-vscode-in-a-container)
> 带VSCode 且预连接好的InterSystems IRIS 容器
| Cred | Value |
|--------------|:--------:|
| User | _SYSTEM |
| Password | SYS |

## 概要
这个项目创建了一个IRIS容器,在同一个IRIS容器中提供了vscode的托管(web-based)版本。这提供了:
* 同样的容器代码编辑
* 预连接到容器内的IRIS 实例
* 管理门户里的链接
* 自动启动IDE
# 快速启动
1. [下载](https://github.com/nickmitchko/Hosting-vscode-in-a-container/archive/refs/heads/master.zip) 或者 `git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git`
2. 在项目根目录下, 运行 `docker build . -t vscode-irishealth-ml:latest --no-cache`
3. 执行 `docker-compose up`
* 不使用 docker compose? 请看 [这里](#No-Docker-Compose)
4. 浏览 [管理门户](http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen)
5. 用用户名和密码登陆
6. 在Favorites 面板里点击 VSCODE 链接 on the favorites pane
7. 依据提示在VScode里使用相同的用户名/密码 来连接到IRIS 实例
```bash
# New folder for project
mkdir vscode-iris
cd vscode-iris
# Clone repo here
git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git .
# Build image
docker build . -t vscode-irishealth-ml:latest --no-cache
# Only Run (A) or (B)
#
# (A) Run compose file
docker-compose up
# OR (B) if you want a daemon
docker-compose up -d
```
## 添加持久化
如果想要一个持久化IRIS实例, 去掉docker-compose.yml 文件中16-20行里的注释 . 这样就在容器上增加了一个持久化存储的挂载。
```yml
volumes:
- "./durable/:/durable/"
environment:
- ISC_DATA_DIRECTORY=/durable/iconfig
```
## 改变基础镜像Base Image
这个镜像是建立在 InterSystems 开发者社区 zpm 镜像上 ([看这里](https://hub.docker.com/r/intersystemsdc/iris-community/tags)). 这些镜像包括了让我们从package repo 安装的zpm命令,只是仅有一个90天的社区版 license。
用于这个builds上的镜像标签image tag:
```dockerfile
FROM intersystemsdc/irishealth-ml-community:latest
```
如果你想改变镜像, 把docker 文件里的第一行改成你想要的镜像标签image tag (可以是一个自定义的IRIS instance 或者 [官方支持的](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_containerregistry#PAGE_containerregistry_public)). 例如:
```dockerfile
FROM containers.intersystems.com/intersystems/irishealth-community:2021.2.0.651.0
```
# 无 Docker-Compose
如果你没有用 docker compose, 你仍然可以如下运行容器:
```bash
# After building the container
# --after command is required
docker run --name vscode -d \
--publish 1972:1972 \
--publish 52773:52773 \
--publish 51773:51773 \
--publish 53773:53773 \
--publish 8080:8080 \
--publish 8888:8888 \
vscode-irishealth-ml:latest \
--after "/bin/bash /install/boot.sh"
```
文章
Frank Ma · 六月 13, 2022
孕产妇风险可以通过一些医学界众所周知的参数来测量。这样,为了帮助医学界和计算机系统,特别是人工智能,科学家Yasir Hussein Shakir发布了一个非常有用的数据集,用于训练检测/预测孕产妇风险的机器学习(ML)算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是 https://www.kaggle.com/code/yasserhessein/classification-maternal-health-5-algorithms-ml.
关于数据集
由于缺乏怀孕期间和怀孕后的孕产妇保健信息,许多孕妇死于怀孕问题。这在农村地区和新兴国家的中下层家庭中更为常见。在怀孕期间,应时刻注意观察,以确保婴儿的正常成长和安全分娩 (来源: https://www.kaggle.com/code/yasserhessein/classification-maternal-health-5-algorithms-ml).
数据是通过基于物联网的风险监测系统,从不同的医院、社区诊所、孕产妇保健机构收集而来。
Age(年龄): 妇女怀孕时的年龄,以岁为单位。
SystolicBP (收缩压): 血压的最高值(mmHg),这是怀孕期间的另一个重要属性。
DiastolicBP(舒张压): 血压的较低值(mmHg),这是怀孕期间的另一个重要属性。
BS(血糖): 血糖水平是以摩尔浓度为单位,即mmol/L。
HeartRate(心率): 正常的静息心率,单位是每分钟的心跳次数。
Risk Level(风险等级): 基于前边的属性所预测的孕期风险强度水平。
从Kaggle获取孕产妇的风险数据
来自Kaggle的孕产妇风险数据可以通过Health-Dataset(健康数据集)应用程序加载到IRIS表中: https://openexchange.intersystems.com/package/Health-Dataset. 要做到这一点,在你的module.xml项目中,设置依赖关系(Health Dataset的ModuleReference):
Module.xml with Health Dataset application reference
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
<Document name="predict-diseases.ZPM">
<Module>
<Name>predict-diseases</Name>
<Version>1.0.0</Version>
<Packaging>module</Packaging>
<SourcesRoot>src/iris</SourcesRoot>
<Resource Name="dc.predict.disease.PKG"/>
<Dependencies>
<ModuleReference>
<Name>swagger-ui</Name>
<Version>1.*.*</Version>
</ModuleReference>
<ModuleReference>
<Name>dataset-health</Name>
<Version>*</Version>
</ModuleReference>
</Dependencies>
<CSPApplication
Url="/predict-diseases"
DispatchClass="dc.predict.disease.PredictDiseaseRESTApp"
MatchRoles=":{$dbrole}"
PasswordAuthEnabled="1"
UnauthenticatedEnabled="1"
Recurse="1"
UseCookies="2"
CookiePath="/predict-diseases"
/>
<CSPApplication
CookiePath="/disease-predictor/"
DefaultTimeout="900"
SourcePath="/src/csp"
DeployPath="${cspdir}/csp/${namespace}/"
MatchRoles=":{$dbrole}"
PasswordAuthEnabled="0"
Recurse="1"
ServeFiles="1"
ServeFilesTimeout="3600"
UnauthenticatedEnabled="1"
Url="/disease-predictor"
UseSessionCookie="2"
/>
</Module>
</Document>
</Export>
Web Frontend and Backend Application to Predict Maternal Risk
Go to Open Exchange app link (https://openexchange.intersystems.com/package/Disease-Predictor) and follow these steps:
使用Clone/git 把repo拉到任一本地目录中:
$ git clone https://github.com/yurimarx/predict-diseases.git
在该文件夹中打开Docker 终端并运行:
$ docker-compose build
运行IRIS容器:
$ docker-compose up -d
进入管理门户执行查询,训练AI模型: http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER
创建用于训练的VIEW(视图):
CREATE VIEW MaternalRiskTrain AS SELECT BS, BodyTemp, DiastolicBP, HeartRate, RiskLevel, SystolicBP, age FROM dc_data_health.MaternalHealthRisk
使用视图创建AI模型:
CREATE MODEL MaternalRiskModel PREDICTING (RiskLevel) FROM MaternalRiskTrain
训练模型:
TRAIN MODEL MaternalRiskModel
访问 http://localhost:52773/disease-predictor/index.html ,使用 Disease Predictor(疾病预测器)前端进行疾病预测,如下:
幕后工作
预测孕产妇风险疾病的后端类方法
InterSystems IRIS允许你执行SELECT,使用之前创建的模型进行预测。
Backend ClassMethod to predict Maternal Risk
/// Predict Maternal Risk
ClassMethod PredictMaternalRisk() As %Status
{
Try {
Set data = {}.%FromJSON(%request.Content)
Set %response.Status = 200
Set %response.Headers("Access-Control-Allow-Origin")="*"
Set qry = "SELECT PREDICT(MaternalRiskModel) As PredictedMaternalRisk, "
_"age, BS, BodyTemp, DiastolicBP, HeartRate, SystolicBP "
_"FROM (SELECT "_data.BS_" AS BS, "
_data.BodyTemp_" As BodyTemp, "
_data.DiastolicBP_" AS DiastolicBP, "
_data.HeartRate_" AS HeartRate, "
_data.SystolicBP_" As SystolicBP, "
_data.Age_" AS age)"
Set tStatement = ##class(%SQL.Statement).%New()
Set qStatus = tStatement.%Prepare(qry)
If qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
Set rset = tStatement.%Execute()
Do rset.%Next()
Set Response = {}
Set Response.PredictedMaternalRisk = rset.PredictedMaternalRisk
Set Response.Age = rset.Age
Set Response.SystolicBP = rset.SystolicBP
Set Response.DiastolicBP = rset.DiastolicBP
Set Response.BS = rset.BS
Set Response.BodyTemp = rset.BodyTemp
Set Response.HeartRate = rset.HeartRate
Write Response.%ToJSON()
Return 1
} Catch err {
write !, "Error name: ", ?20, err.Name,
!, "Error code: ", ?20, err.Code,
!, "Error location: ", ?20, err.Location,
!, "Additional data: ", ?20, err.Data, !
Return 0
}
}
现在,任何web应用都可以进行预测并显示结果。请在预测疾病应用程序的前端文件夹中查看源代码。
文章
姚 鑫 · 七月 15, 2022
# 第六章 使用嵌入式 Python (三)
# 从 ObjectScript 调用嵌入式 Python 代码
## 使用 Python 库
嵌入式 `Python` 让可以轻松访问数以千计的有用库。通常称为“包”,它们需要从 `Python` 包索引 `(PyPI)` 安装到 `/mgr/python` 目录中,然后才能使用。
例如,`ReportLab Toolkit` 是一个用于生成 `PDF` 和图形的开源库。以下命令使用软件包安装程序 `irispip` 在 `Windows` 系统上安装 `ReportLab`:
```java
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python reportlab
```
在基于 `UNIX` 的系统上,使用:
```java
$ pip3 install --target /InterSystems/IRIS/mgr/python reportlab
```
安装包后,可以使用 `%SYS.Python` 类的 `Import()` 方法在` ObjectScript` 代码中使用它。
给定一个文件位置,以下 `ObjectScript` 方法 `CreateSamplePDF()` 创建一个示例 `PDF` 文件并将其保存到该位置。
```java
Class Demo.PDF
{
ClassMethod CreateSamplePDF(fileloc As %String) As %Status
{
set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
set canvas = canvaslib.Canvas(fileloc)
do canvas.drawImage("C:\Sample\isc.png", 150, 600)
do canvas.drawImage("C:\Sample\python.png", 150, 200)
do canvas.setFont("Helvetica-Bold", 24)
do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
do canvas.save()
}
}
```
该方法的第一行从 `ReportLab` 的 `pdfgen` 子包中导入 `canvas.py` 文件。第二行代码实例化一个 `Canvas` 对象,然后继续调用它的方法,这与调用任何 `IRIS` 对象的方法很相似。
然后,可以以通常的方式调用该方法:
```java
do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")
```
## 调用用 `Python` 编写的 `IRIS` 类的方法
可以使用嵌入式 `Python` 在 `IRIS` 类中编写方法,然后从 `ObjectScript` 调用它,就像调用用 `ObjectScript` 编写的方法一样。
下一个示例使用 `usaddress-scourgify` 库,可以从 `Windows` 上的命令行安装,如下所示:
```java
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python usaddress-scourgify
```
在基于 `UNIX` 的系统上,使用:
```java
$ pip3 install --target /InterSystems/IRIS/mgr/python usaddress-scourgify
```
下面的演示类包含美国地址部分的属性和一个用 `Python` 编写的方法,该方法使用 `usaddress-scourgify` 根据美国邮政服务标准对地址进行规范化。
```java
Class Demo.Address Extends %Library.Persistent
{
Property AddressLine1 As %String;
Property AddressLine2 As %String;
Property City As %String;
Property State As %String;
Property PostalCode As %String;
Method Normalize(addr As %String) [ Language = python ]
{
from scourgify import normalize_address_record
normalized = normalize_address_record(addr)
self.AddressLine1 = normalized['address_line_1']
self.AddressLine2 = normalized['address_line_2']
self.City = normalized['city']
self.State = normalized['state']
self.PostalCode = normalized['postal_code']
}
}
```
给定地址字符串作为输入,类的 `Normalize()` 实例方法规范化地址并将每个部分存储在 `Demo.Address` 对象的各种属性中。
可以按如下方式调用该方法:
```java
USER>set a = ##class(Demo.Address).%New()
USER>do a.Normalize("One Memorial Drive, 8th Floor, Cambridge, Massachusetts 02142")
USER>zwrite a
a=3@Demo.Address
+----------------- general information ---------------
| oref value: 3
| class name: Demo.Address
| reference count: 2
+----------------- attribute values ------------------
| %Concurrency = 1
| AddressLine1 = "ONE MEMORIAL DR"
| AddressLine2 = "FL 8TH"
| City = "CAMBRIDGE"
| PostalCode = "02142"
| State = "MA"
+-----------------------------------------------------
```
## 运行用 `Python` 编写的 `SQL` 函数或存储过程
当使用嵌入式 `Python` 创建 `SQL` 函数或存储过程时, `IRIS` 会投影一个具有可从 `ObjectScript` 调用的方法的类,就像使用任何其他方法一样。
例如,本文档前面示例中的 `SQL` 函数会生成一个类 `User.functzconvert`,它有一个 `tzconvert()` 方法。从 `ObjectScript` 调用它,如下所示:
```java
USER>zwrite ##class(User.functzconvert).tzconvert($zdatetime($h,3),"US/Eastern","UTC")
"2021-10-20 15:09:26"
```
这里,`$zdatetime($h,3)` 用于将当前日期和时间从 `$HOROLOG` 格式转换为 `ODBC` 日期格式。
## 运行任意 Python 命令
有时,当开发或测试嵌入式 `Python` 代码时,从 `ObjectScript` 运行任意 `Python` 命令会很有帮助。可以使用 `%SYS.Python` 类的 `Run()` 方法来执行此操作。
也许想测试本文档前面使用的 `usaddress_scourgify` 包中的 `normalize_address_record()` 函数,但不记得它是如何工作的。可以使用 `%SYS.Python.Run()` 方法从终端输出函数的帮助,如下所示:
```java
USER>set rslt = ##class(%SYS.Python).Run("from scourgify import normalize_address_record")
USER>set rslt = ##class(%SYS.Python).Run("help(normalize_address_record)")
Help on function normalize_address_record in module scourgify.normalize:
normalize_address_record(address, addr_map=None, addtl_funcs=None, strict=True)
Normalize an address according to USPS pub. 28 standards.
Takes an address string, or a dict-like with standard address fields
(address_line_1, address_line_2, city, state, postal_code), removes
unacceptable special characters, extra spaces, predictable abnormal
character sub-strings and phrases, abbreviates directional indicators
and street types. If applicable, line 2 address elements (ie: Apt, Unit)
are separated from line 1 inputs.
.
.
.
```
`%SYS.Python.Run()` 方法在成功时返回 `0`,在失败时返回 `-1`。
文章
Hao Ma · 九月 17, 2022
因为篇幅太长, 我把它分为3篇贴在社区
# 配置前的准备
配置Mirror前要准备三件事儿:
1. 规划网络连接。
2. 在所有的服务器中启动ISCAgent服务。
3. 准备服务器的SSL/TLS证书。可选, 但非常推荐。
我假设您在动手前一定已经对Mirror的原理和架构已经不陌生了,对镜像成员,DR(灾备)成员, Arbiter, ISCAgent等术语已经自动切换的概念有大概的认识。如果不是这样,请先阅读在线文档,或者这篇文章。
## 规划网络连接
Mirror应该配置两个网段:一个用于IRIS和外部的通信;另一个用于两个Mirror成员间的内部通信,也就是数据的同步。 尽管不是必须的,但Mirror作为一个高可用方案,为了保证服务器之间的内部通信不受和外部连接的干扰,把内部通信放在单独的网段是通常的做法,尤其是在生产环境。
下图来自IRIS的在线文档:其中绿色所示的是IRIS提供服务的网段,IRIS到所有外部系统的连接,ECP应用服务器,和Arbiter在工作在这个网段。紫色的“Data Center Private LAN for Mirror Communication"用于内部通信,准确的说, 用于journal的同步。为了方便, 我会在后面的步骤中简单的把这两个网段简单的称为**外网网段**和**内网网段**。

也是来自在线文档,上图的IP地址配置像这个样子。(请忽略C栏和D栏,它们是DR服务器的地址)

在安装配置Mirror之前, 您需要检查的是:
( Agent address用的是公网地址,但书上有句话:When attempting to contact this member’s agent, other members try this address first. Critical agent functions (such as those involved in failover decisions) will retry on the mirror private and superserver addresses (if different) when this address is not accessible. Because the agent can send journal data to other members, journal data may travel over this network. )
- ServerA, ServerB, Arbiter三台机器的在绿色网段可以相互访问。ServerA, ServerB的1972端口可以访问,Arbiter的2188端口可以访问。
- ServerA, ServerB在紫色网段可以互相访问2188端口。
- Virtual IP绑定在Server A, 并且IRIS的服务和连接通过Virtual IP提供。
下面是我用的两个服务器的网络配置,因为不方便使用(懒的修改)上图的地址,我自己做的地址配置如下
| Virtual IP Address | | |
| ------------------------------ | -------------- | -------------- |
| Arbiter Address | 172.16.58.100 | |
| Member-Specific Mirror Address | serverA | serverB |
| SuperServer Address | 172.16.58.101 | 172.16.58.102 |
| Mirror Private Address | 172.16.159.101 | 172.16.159.102 |
| Agent Address | 172.16.58.101 | 172.16.58.102 |
其中172.16.58.0网段为外网网段; 172.16.159.0网段为内网网段。 在操作系统上查看IP, 是这个样子:
**servera**
```sh
#servera上的端口配置
[root@servera mgr]# ip -4 -br addr
lo UNKNOWN 127.0.0.1/8
ens33 UP 172.16.58.101/24
ens36 UP 172.16.159.101/24
[root@servera mgr]# firewall-cmd --list-ports
1972/tcp 52773/tcp 2188/tcp
[root@servera ~]#
#serverb上的端口配置
[root@serverb isc]# ip -4 -br addr
lo UNKNOWN 127.0.0.1/8
ens33 UP 172.16.58.102/24
ens36 UP 172.16.159.102/24
[root@serverb isc]# # firewall-cmd --list-ports
1972/tcp 52773/tcp 2188/tcp
```
## 在所有的镜像成员启动ISCAgent服务
无论是同步成员,异步成员,还是Arbiter,它们之间的通信都依赖ISCAgent服务。在操作系统上,它是一个独立于IRIS的服务,IRIS的默认安装也没有把它设置为自动启动,所以您需要在安装IRIS的机器,也就是同步,异步成员上手工启动这个服务。至于Arbiter,您可以理解Arbiter就是一个装了ISCAgent服务的机器,可以是任何一台客户的机器,装上ISCAgent, 能帮助IRIS主备成员自动切换判断,它就是Arbiter了。简单说, 您需要
1. 在Mirror的所有成员上启动ISCAgent
2. 在一台机器上安装ISCAgent并启动,它从此就是这个Mirror的Arbiter了。
Arbiter需要和IRIS服务器用相同的操作系统吗?没必要。很多客户的IRIS装在Linux上,而Arbiter是一个Windows机器, 跑着和IRIS无关的业务, 都不用是Server版的Windows。
默认配置下, ISCAgent通过TCP的2188端口和远端连接,启动ISC Agent后请检查防火墙,保证2188端口访问是可以访问的。
下面是具体的配置细节。
### 在Mirror的所有成员上启动ISCAgent
IRIS服务器不需要单独安装ISCAgent。 你需要做的是启动服务,并服务器重启后ISCAgent能自动启动。
- Windows: 进入管理工具—服务,选择ISCAgent,将启动类型改为自动。点启动ISCAgent,并确认服务已启动。
- Linux: 使用systemctl启动ISCAgent, 并加入系统自启动列表。
```sh
[root@servera isc]# systemctl start ISCAgent
[root@servera isc]# systemctl status ISCAgent
● ISCAgent.service - InterSystems Agent
Loaded: loaded (/etc/systemd/system/ISCAgent.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2022-04-15 10:26:20 CST; 11s ago
Process: 3651 ExecStart=/usr/local/etc/irissys/ISCAgent (code=exited, status=0/SUCCESS)
Main PID: 3653 (ISCAgent)
CGroup: /system.slice/ISCAgent.service
├─3653 /usr/local/etc/irissys/ISCAgent
└─3654 /usr/local/etc/irissys/ISCAgent
Apr 15 10:26:20 servera systemd[1]: Starting InterSystems Agent...
Apr 15 10:26:20 servera systemd[1]: Started InterSystems Agent.
Apr 15 10:26:20 servera ISCAgent[3653]: Starting
Apr 15 10:26:20 servera ISCAgent[3654]: Starting ApplicationServer on *:2188
[root@servera isc]#systemctl enable ISCAgent
Created symlink from /etc/systemd/system/multi-user.target.wants/ISCAgent.service to /etc/systemd/system/ISCAgent.service.
[root@servera isc]#
```
### Arbiter(仲裁服务)
你需要到WRC的下载网址下载ISCAgent的软件。下面是在Linux下安装ISCAgent的过程。
```sh
[root@serverc isc]# cd ISCAgent-2022.1.0.164.0-lnxrh7x64
[root@serverc ISCAgent-2022.1.0.164.0-lnxrh7x64]# ls
agentinstall cplatname dist package tools
[root@serverc ISCAgent-2022.1.0.164.0-lnxrh7x64]# ./agentinstall
Your system type is 'Red Hat Enterprise Linux (x64)'.
Please review the installation options:
------------------------------------------------------------------
ISCAgent version to install: 2022.1.0.164.0
------------------------------------------------------------------
Do you want to proceed with the installation ? yes
Starting installation...
Installation completed successfully
[root@serverc ISCAgent-2022.1.0.164.0-lnxrh7x64]
```
安装后同上一小节使用systemctl命令启动。
## 准备服务器的SSL/TLS证书
您的每个服务器需要准备两个证书:一个本机的证书, 一个是CA的证书。(如果是公开证书也要吗,openssl应该是没有,除非自己去下载)。 如果您使用的是IRIS自带的PKI签发的self-signed证书,那么每台服务器不仅仅要自己的证书,非CA所在的服务器要:“获取证书颁发机构证书”(‘Get Certificate Authority Certificate’)。这个选项“证书颁发机构客户端的”从证书颁发机构获取证书页面。
举例: servera, serverb为镜像成员。
```sh
[root@servera mgr]# ls *.cer *.key
iris.key iscCA.cer iscCASigned.cer iscCASigned.key
```
忽略iris.key。 其他的iscCA.cer是CA的证书, iscCASigned.cer是servera的证书, iscCASigned.key是servera的私钥。
同样, 在serverb:
```sh
[root@serverb ~]# cd /isc/iris/mgr
[root@serverb mgr]# ls *.cer *.key
iris.key iscCA.cer iscCASignedserverb.cer iscCASignedserverb.key
[root@serverb mgr]#
```
## 增加gmheap的大小
Mirror成员间的数据同步默认使用“Parallel dejournaling", 也就是多个进程并行处理同步数据,而这要求增大gmheap资源。
gmheap又被称为shared memory heap(SMH)。它的默认配置是38MB, 但在实际的生产系统中,gmheap通常配置比这要大。
每一个"parallel dejournalling job"需要增加200M的gmheap。比如说, 为了支持4个并行的同步任务, gmheap至少需要800M。如果系统资源足够,最多可以有16个并行同步任务。
**折中的考虑,当您配置镜像时,请将您系统的gmheap值增加为1GB。**
后面我们进入正式的Mirror的配置工作。Mirror的配置和把数据库添加入镜像。
文章
Hao Ma · 九月 22, 2021
InterSystems IRIS 基础:连接一个 IDE
本文档告诉您如何快速连接您的集成开发环境(IDE),用于 ObjectScript、Java、.NET、Python 或 JavaScript/Node.js 的集成开发环境连接到 InterSystems IRIS® 的一个实例,并使用从 GitHub 下载的模板文件验证您是否已经成功连接。此外,接下来的两节还包括以下内容:• 部署 InterSystems IRIS列出用于部署 InterSystems IRIS 的已授权和免费评估实例的选项。如果您还没有一个可以使用的实例,请查看本节。• InterSystems IRIS 连接信息详细介绍了将 IDE 连接到已授权或免费的 InterSystems IRIS 实例,以及以其他方式与之进行交互所需的信息 ,并解释了如何获得实例的信息。无论您想用哪个 IDE 连接到 InterSystems IRIS,都要查看涉及您所使用的实例类型的部分。
1 部署 InterSystems IRIS本节涵盖了已授权的实例和免费的评估实例。
1.1 部署已授权的实例如果您已经从 InterSystems 购买了一个或多个许可证,您可以使用以下方法之一来部署一个已授权的 InterSystems IRIS 实例:• InterSystems 云管理器• InterSystems Kubernetes Operator• InterSystems IRIS 容器镜像• InterSystems IRIS 安装套件
当从容器镜像或安装套件进行部署时,您可以使用配置合并功能 来支持自动部署。
1.1.1 InterSystems 云管理器InterSystems 云管理器(ICM)是 InterSystems IRIS 的端到端配置和部署解决方案。使用 ICM,您可以在公共云平台(如谷歌云平台、亚马逊网络服务和微软 Azure)或您的私有 VMware vSphere 云中配置基础设施和部署容器化服务,您也可以在现有的虚拟或硬件系统中部署服务。您可以将您的自定义和第三方容器与 InterSystems 的容器一起部署,而且 ICM 还可以从 InterSystems IRIS 安装套件中安装。 部署 InterSystems IRIS
关于 ICM 的详细文档,请参见 InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)。您可以通个First Look: InterSystems Cloud Manager(《技术概要:InterSystems 云管理器》)试用 ICM。关于如何获得和部署 ICM 镜像的信息, 请参见InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)中的Launch ICM(启动 ICM)。
1.1.2 InterSystems Kubernetes OperatorKubernetes 是一个开源的编配引擎,用于自动化部署、扩展和管理容器化工作负载和服务。您可定义您想要部署的容器化服务和想要使用的治理策略;Kubernetes 以最有效的方式透明地提供所需的资源,在部署偏离规格时修复或恢复,并自动或按需扩展。InterSystems Kubernetes Operator(IKO)通过 IrisCluster 自定义资源扩展了 Kubernetes API,该资源可以在任何 Kubernetes 平台上作为 InterSystems IRIS 分片集群、分布式缓存集群或独立实例(所有可选镜像)进行部署。IKO 还为 Kubernetes 增加了 InterSystems IRIS 特定的集群管理功能,实现了任务的自动化 ,如向集群添加节点,否则您必须通过与实例直接交互来手动完成。关于使用 IKO 的信息,请参见Using the InterSystems Kubernetes Operator(《使用 InterSystems Kubernetes Operator》)。
1.1.3 InterSystems IRIS 容器镜像InterSystems 的 Docker 镜像让您可以使用自己的工具和方法将 InterSystems IRIS 部署到 Linux 主机——云、虚拟或物理主机上的容器中。对特定实例数据的持久性存储使容器化的 InterSystems IRIS 易于升级,因此您可以随时将现有的配置转移到最新版本的 InterSystems IRIS 中,而几乎不存在任何问题,停机时间也很少。关于使用 InterSystems IRIS 镜像的详细指南,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)。如果想亲身体验一下 InterSystems IRIS 镜像和容器,请尝试First Look: InterSystems Products in Containers(《技术概要:容器中的 InterSystems 产品》)。关于如何获得 InterSystems IRIS 镜像的信息,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems产品》)中的Downloading the InterSystems IRIS Image(《下载 InterSystems IRIS 镜像》)。您可以使用安装在谷歌云平台、微软 Azure 或亚马逊网络服务公共云平台上的 InterSystems IRIS 容器镜像和 Docker 来配置 BYOL(自带许可证)云节点, 然后添加您的许可并按照Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)或First Look: InterSystems Products in Containers(《技术概要:容器中的 InterSystems 产品》)中的描述,从该镜像中运行 InterSystems IRIS 容器。欲了解更多信息,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Deploy InterSystems IRIS BYOL on a Cloud Node(《在云节点上部署 InterSystems IRIS BYOL》)。(您也可以使用免费的 InterSystems IRIS 社区版镜像来使用这些文档。)
1.1.4 InterSystems IRIS 安装套件您可以通过从 InterSystems 全球响应中心 (WRC)下载区获得您的平台的最新安装套件,在您的本地机器或网络上的另一台机器上安装和许可 InterSystems IRIS 的开发实例。有关基本的安装说明,请参见 InterSystems IRIS Basics: Installation (《InterSystems IRIS 基础:安装》);详细信息请参见安装指南。
1.1.5 使用配置合并进行部署配置合并功能在 Linux 和 UNIX®系统上可用,让您可以改变从同一镜像部署的 InterSystems IRIS 容器的配置,或从同一套件安装的本地实例,只需简单地将所需的声明性配置合并文件应用于部署的每个实例。这个合并文件, 也可以在重启现有实例或使用 iris 合并命令时应用,更新实例的配置参数文件 (CPF), 其中包含了大部分的配置设置;这些设置在每次启动时都会从 CPF 读取,包括实例部署后的第一次启动。当您在部署过程中应用配置合并时,实际上是用您自己的更新版本替换了随实例提供的默认 CPF。InterSystems 云管理器 和 InterSystems Kubernetes Operator 都包含了配置合并功能。 InterSystems IRIS 连接信息
有关使用配置合并的信息,请参见Configuration Parameter File Reference.(配置参数文件参考)中的Using Configuration Merge to Deploy and Reconfigure InterSystems IRIS(使用配置合并来部署和重新配置 InterSystems IRIS)和Create and Use a Configuration Merge File(创建和使用配置合并文件)。
1.2 部署免费的评估实例如果您还不是 InterSystems IRIS 的用户,您可以通过部署一个免费的评估实例,来探索它的许多功能,并使用您喜欢的语言和工具以及您自己的代码来试用它。有以下几个选项可以做到这一点:• 在云或者您自己的系统上部署 InterSystems IRIS 社区版实例。• 在网上启动一个 InterSystems 学习实验室(Learning Labs)实例。
1.2.1 InterSystems IRIS 社区版InterSystems IRIS 社区版有一个免费的内置 13 个月的许可证(和一些功能限制)。您可以通过两种方式部署社区版:• 在谷歌云平台、微软 Azure 或亚马逊网络服务公共云平台上提供一个托管运行社区版容器的云节点。• 从 InterSystems Container Registry (ICR)或 Docker Store 中提取社区版镜像,并使用它在您选择的系统上部署容器。
有关在云或自己的系统上部署和使用 InterSystems IRIS 社区版的说明,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)。
1.2.2 InterSystems 学习实验室(Learning Labs)InterSystems 学习实验室(Learning Labs)网页可以让您快速、轻松地启动 InterSystems IRIS 实验室实例,用于培训、开发和测试,并有 30 天的免费许可。您的 InterSystems 学习实验室实例包括一个集成的 IDE 和大量的示例,您可以连接您自己的 IDE。要启动 InterSystems 学习实验室实例,您必须登录 learning.intersystems.com;如果您没有账户,可以轻松创建一个。(与社区版一样,学习实验室实例有一些功能限制。)
2 InterSystems IRIS 连接信息(Connection Information)要将一个 IDE 连接到一个 InterSystems IRIS 实例,首先需要选择实例,然后确定所需的连接信息,如下所示:• 主机标识符:实例主机的 IP 地址或主机名。• 实例的超级服务器和 web 服务器端口号。• 实例的有效凭证。• 实例上现有命名空间的名称。
了解实例基于 Web 管理门户的 URL,以及如何在实例上打开 InterSystems 终端 (这需要实例的名称),这也是很有帮助的。如何确定这些信息取决于您如何部署您正在使用的实例,如下所示:• InterSystems 云管理器(Cloud Manager) InterSystems IRIS 连接信息
• 在一个容器中部署 InterSystems IRIS• 从套件中安装 InterSystems IRIS• InterSystems IRIS 社区版• InterSystems 学习实验室(Learning Labs)
2.1 InterSystems 云管理器(Cloud Manager)对于由 ICM 部署的容器中的 InterSystems IRIS 实例,主机标识符是容器所部署的配置或现有节点的 IP 地址或主机名。您可以随时使用 icm inventory 命令查看您部署的节点的主机名和 IP 地址。默认的超级服务器和 Web 服务器端口号分别为 1972 和 52773;您可以通过在 defaults.json 文件中加入 SuperServerPort 和 WebServerPort 属性来指定不同的端口号。管理门户的 URL 门户包含了主机标识符和 web 服务器端口,例如 http://40.122.36.160:52773/csp/sys/UtilHome.csp。IDE 连接或管理门户的凭证是您在基础设施上用 icm run 命令部署服务时设置的预定义用户账户之一和默认密码,或者是您先前添加到实例的账户和密码。要打开 ICM 部署的实例的终端,可以使用带有-interactive 选项和 -machine 选项的 icm session 命令 ,指定托管实例的节点;不需要验证。您始终可以将您的 IDE 连接到所有 InterSystems IRIS 实例中存在的 USERnamespace,但是如果您在部署时使用了 definitions.json 文件中的 Namespace 属性或 -namespace 选项以指定不同的默认执行命名空间, 您可能希望连接到该namespace。您还可以连接到以前使用管理门户创建的其他名称空间。
2.2 在一个容器中部署 InterSystems IRIS对于您从 InterSystems 镜像(包括在 BYOL 云节点上)部署的容器中的 InterSystems IRIS 实例,主机标识符是容器所运行的系统的 IP 地址或主机名。超级服务器和 Web 服务器的端口号取决于您在用 docker run 命令创建和启动容器时如何发布实例的端口;更多信息,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Running InterSystems IRIS Containers(运行 InterSystems IRIS 容器)。举个例子,如果您把实例的 Web 服务器端口(始终是 52773)发布为 52773(如引用部分所述),并且您的浏览器与容器在同一个系统上运行,那么管理门户的 URL 是 http:/localhost:52773/csp/sys/UtilHome.csp。IDE 连接或管理门户的凭证是您在创建容器时设置的预定义用户账户之一和默认密码 [请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Authentication and Passwords(验证和密码)],或者是您先前添加到实例中的账户和密码。要为容器中的实例打开Terminal,您可以使用 docker exec 命令在容器中运行 iris terminal命令,您也可以使用 docker exec 在容器中打开一个 shell,并从那里运行 iris ternimal ;有关示例,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Interacting Using the InterSystems Terminal(使用 InterSystems Terminal进行交互)。要使用 iris terminal,您需要实例名称,在 InterSystems 的任何容器中,该名称始终为 IRIS。如Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Ownership and Directories(所有权和目录)所述,使用 docker exec 从 InterSystems IRIS 容器外发出的命令在容器内以 irisowner 身份执行,不需要身份验证,因此您无需登录Terminal。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的 USER namespace,但您也可以连接到您先前使用管理门户创建的不同的namespace。 InterSystems IRIS 连接信息
2.3 从套件中安装 InterSystems IRIS对于从套件中安装的 InterSystems IRIS 实例,主机标识符是该实例运行的系统的主机名或 IP 地址;如果是本地安装,可以使用 localhost 。InterSystems IRIS 的安装将超级服务器和 web 服务器的端口号默认设置为 1972 和 52773。但是,如果您在系统中安装了一个以上的 InterSystems IRIS 实例,那么这些实例的超级服务器和 web 服务器的端口是不同的;要显示所有实例的端口号,您可以在操作系统的命令行中使用 iris list 命令。在 Windows 系统中,您可以通过点击系统托盘中的 InterSystems IRIS 图标并选择 Management Portal 来打开管理门户。在所有系统上,您都可以使用 URL http://host:webserverport/csp/sys/UtilHome.csp, 其中 host 是主机标识符, port 是 web 服务器端口号, 例如 http://localhost:52773/csp/sys/UtilHome.csp。要打开已安装实例的终端: • 在 Windows 系统上, 您可以选择 InterSystems IRIS 启动菜单上的 Terminal 选项。• 在所有的系统上,您可以在操作系统的命令行上使用 iris terminal命令,把实例名称作为参数。实例名称是在您安装实例时设置的,不能更改;您可以使用 iris list 命令来显示它。
用于所有目的的凭证是预定义用户账户(predefined user accounts)之一和默认密码 SYS(这样做后会提示您立即更改账户的密码),或者是您先前添加到实例的账户和密码。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的 USER namespace,但您也可以连接到您先前使用管理门户创建的不同的namespace。
2.4 InterSystems IRIS 社区版您可以通过以下两种方式之一部署社区版:• 当您在公共云平台上配置托管运行的 InterSystems IRIS 社区版容器的云节点时, 云节点的 IP 地址(主机标识符)、实例的超级服务器和 Web 服务器端口号(始终分别为 1972 和 52773),以及实例的管理门户 URL 在您首次使用 SSH 连接到节点时显示,并且可以通过在 Linux 命令行上输入 iris info 随时显示。门户网站的 URL 包含了 IP 地址和 web 服务器端口,例如 http://40.122.36.160:52773/csp/sys/UtilHome.csp。• 当您从 InterSystems Container Registry 或 Docker Store 提取社区版镜像并在您选择的系统上部署 InterSystems IRIS 社区版容器时,主机标识符是容器运行所在系统的 IP 地址或主机名。超级服务器和 Web 服务器的端口号取决于您在用 docker run 命令创建和启动容器时如何发布实例的端口,如在Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Deploying InterSystems IRIS Community Edition on Your Own System(在您自己的系统上部署 InterSystems IRIS 社区版)中所述。举个例子,如果您把实例的 web 服务器端口(始终是 52773)发布为 52773(如引用部分所述),并且您的浏览器与容器在同一个系统上运行,那么管理门户的 URL 是 http:/localhost:52773/csp/sys/UtilHome.csp。
有关为任何社区版实例打开终端的信息,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Interacting Using InterSystems Terminal(使用 InterSystems 终端进行交互)。IDE 连接和管理门户的凭证是预定义用户账户之一,以及您在第一次连接云节点修改密码时提供的新的默认密码[请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Change the Default Passwords(修改默认密码)],或者默认密码 SYS,如果您在自己的系统上或者在没有先连接到节点的情况下登录到云实例。当您使用 SYS 时,系统会提示您 ObjectScript IDE
立即修改您所使用的账户的密码。您也可以使用您以前在实例上创建的账户。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的USER namespace,但您也可以连接到您以前使用管理门户创建的不同namespace。
2.5 InterSystems 学习实验室(Learning Labs)到容器化 InterSystems IRIS 实例的所有连接都是您的 InterSystems 学习实验室(learning labs)配置的一部分,在学习实验室启动期间,您需要的所有连接信息都显示在启动页面上,如下所示:• 集成 IDE 的 URL。• 一套用于所有目的的凭证。• 管理门户 URL。• Web 服务器端口号(始终是 80)。• 在外部连接下,服务器的 IP 地址和超级服务器的端口号(标记为 InterSystems IP 和 InterSystems 端口);您可以用它们将 IDE(如 InterSystems Studio 或 Visual Studio Code)与 ObjectScript 扩展连接到实例。
在集成 IDE 的 InterSystems 菜单上有一个Terminal选项(Management Portal 选项也是如此),所以您不需要跟踪实例名称。
3 ObjectScript IDE本节介绍了您可以用来在 InterSystems IRIS 实例上开发 ObjectScript 代码的 IDE:带有 ObjectScript 扩展的 Visual Studio Code (VS Code),以及 Studio。
3.1 Visual Studio CodeVisual Studio Code(VS Code)是微软为 Windows、Linux 和 macOS 制作的一个免费源代码编辑器。虽然它可以作为带有 InterSystems IRIS 的.NET、Python 或 JavaScript IDE 开箱即用,但可用的扩展功能使您能够使用 VS Code 开发 ObjectScript 代码,这些代码在客户端系统上存储和版本化,在 InterSystems IRIS 服务器上编译、运行和调试。关于安装扩展,连接到一个或多个 InterSystems IRIS 实例,以及使用 VS Code for ObjectScript 的信息,请访问 https://intersystems-community.github.io/vscode- objectscript/。 VS Code 可以连接到任何 InterSystems IRIS 实例,无论该实例在哪个平台上运行,使用主机的 DNS 名称或 IP 地址、实例的名称和实例的超级服务器端口号,默认为 1972(但如果系统上安装了多个实例,则可能不同)。
3.2 StudioInterSystems IRIS 应用程序开发人员还可以使用 Studio IDE,这是一个在 Windows 系统上运行的客户端应用程序;详细信息请参见使用 Studio 。Studio 可以连接到任何 InterSystems IRIS 实例,无论该实例在哪个平台上运行,使用主机的 DNS 名称或 IP 地址、实例的名称和实例的超级服务器端口号,默认为 1972(但如果系统上安装了多个实例,则可能有所不同)。 Java IDE
4 Java IDE本节提供了 Visual Studio Code (带有 Java 编码包或 Java 扩展包)、Eclipse、IntelliJ 和 NetBeans 的连接说明,您可以用它们来开发 Java 代码,使用 InterSystems Native API、JDBC 和 Java 网关与 InterSystems IRIS 交互。
4.1 Visual Studio Code要将 Visual Studio Code 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。)1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-java-helloworld。2. 在 Visual Studio Code 中,使用 File > Open Folder 来打开您最近从 GitHub 下载或克隆的文件夹。3. 选择并打开 src/main/java.com.intersystems.samples.helloworld.java。4. 在主要方法的顶部的变量声明中,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:51773/USER。5. 使用 View > Terminal 来打开终端并执行以下命令:
javac -cp ".:intersystems-jdbc-3.2.0.jar" HelloWorld.java java -cp ".:intersystems-jdbc-3.2.0.jar" HelloWorld
6. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS via JDBC.
4.2 Eclipse要将 Eclipse 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,导入示例包,1. 选择 File > Import > Git > Projects from Git。2. 选择 Clone URI。将 https://github.com/intersystems/Samples-java-helloworld 复制并粘贴到 URI 字段中。3. 选择 master 分支,配置本地存储,然后选择 Import existing Eclipse projects。4. 点击 Finish 确认导入。
接下来,更新示例代码并运行它。1. 打开 samples-java-helloworld > src > main.java.com.intersystems.samples > HelloWorld.java 并做如下修改:a. 将顶层包声明更改为 package main.java.com.intersystems.samples;.b. 在主要方法的顶部变量声明中,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。
2. 通过选择 Run > Run 来运行代码。 Java IDE
3. Console 标签显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC.
如果您没有成功,请通过以下操作确认 Java 执行环境设置正确:1. 右键点击 Package Explorer 窗格中的 samples-java-helloworld 项目,然后选择 Build Path > Configure Build Path...。2. 在 Libraries 标签上,选择 Add Library > JRE System Library > Execution environment >并选择一个执行环境,如 JRE-1.1 (jre 1.8.0_172)。点击 Finish,然后点击 Apply and Close。
4.3 IntelliJ要将 IntelliJ 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,创建示例项目。1. 选择 VCS > Checkout from Version Control > Git。2. 在克隆存储库对话框中,a. 将 https://github.com/intersystems/Samples-java-helloworld 复制并粘贴到 Clone URI 字段中。b. 对于 Directory 字段,输入要创建本地 GitHub 存储库的位置的路径。
3. 点击 Clone,然后在弹出的窗口中选择 Yes ,以创建一个基于此源的项目。
接下来,更新示例代码并运行它。1. 在主要方法的顶部的变量声明中,打开 src/main/java.com.intersystems.samples.helloworld.java 并为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。2. 在 Project 窗格中,右键单击 HelloWorld.java 并选择 Run ‘HelloWorld.main()’。3. Output 窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC.
如果您没有成功,请通过以下操作确认 Java 执行环境设置正确:1. 选择 Build Path > Build Project。2. 编辑配置并添加一个新的应用程序配置,选择 com.intersystems.samples.HelloWorld 作为主类。3. 如果错误 Error:java: invalid source release: 9 显现,在以下位置将项目 SDK 和项目语言级别修改为 1.8 :• File > Project Structure > Project Settings• File > Project Structure > Module Settings > Sources: Language Level 标签• File > Project Structure > Module Settings > Dependencies: Module SDK 标签 .NET IDE
4.4 NetBeans要将 NetBeans 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,创建示例项目。1. 选择 Team > Git > Clone。2. 将 https://github.com/intersystems/Samples-java-helloworld 复制粘贴到 Repository URL 字段中。3. 选择 Master 作为要提取的分支,选择创建本地 GitHub 存储库的位置,然后点击 Finish。
接下来,更新示例代码并运行它。1. 在主要方法的顶部的变量声明中,打开 HelloWorld.java 并为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。2. 在 Project 窗格中,打开 Dependencies 文件夹,然后右键点击 intersystems-jdbc-3.0.0.jar 并选择 Manually install artifact。导航到您最近克隆的文件夹,选择 intersystems-jdbc-3.0.0.jar,然后点击 Install Locally。3. 在 Project 窗格中,右键单击 HelloWorld.java 并选择 Run File。4. Output 窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC.
5 .NET IDE本节为微软的 Visual Studio 和 Visual Studio Code 提供连接说明,您可以用它来开发.NET 代码,这些代码通过 InterSystems Native API、ADO.NET Managed Provider for .NET、InterSystems XEP 和.NET 网关与 InterSystems IRIS 交互。
5.1 Visual Studio要将 Visual Studio 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。) 首先,创建示例解决方案。1. 选择 View > Team Explorer。2. 在 Team Explorer – Connect 窗格中, 选择 Local Git Repositories > Clone, 将 https://github.com/inter- systems/Samples-dotnet-helloworld 复制粘贴到 URL 框中, 并点击 Clone。
接下来,更新示例代码并运行它。1. 双击 HelloWorld.sln 来查看解决方案中的文件,然后打开 helloworld.cs。2. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》),3. 按 F5 键,运行该程序。 Python IDE
4. 命令窗口显示的信息是 Hello World! You have successfully connected to InterSystems IRIS. Press any key to continue.
5.2 Visual Studio Code通过 ObjectScript 扩展,Visual Studio Code 可以用来在 InterSystems IRIS 上开发 ObjectScript 代码;请参见ObjectScript IDE。要将 Visual Studio Code 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。)1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-dotnet-helloworld。2. 在 Visual Studio Code 中,使用 File > Open Folder 来打开您最近从 GitHub 下载或克隆的文件夹。3. 拓展 samples-dotnet-helloworld 并选择 helloworld.cs。4. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。5. 使用 View > Terminal 来打开终端并执行以下命令:
csc /reference:InterSystems.Data.IRISClient.dll helloworld.cs.\helloworld.exe
6. 输出窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS.Press any key to continue.
6 Python IDE本节提供了将您最喜欢的以 Python 为中心的 IDE(如 Visual Studio Code、PyCharm、Spyder、IDLE/IdleX 或 Vim)连接到 InterSystems IRIS 的说明。当您使用以下步骤连接后(如有必要,请登录 GitHub),您可以使用技术概要:InterSystems IRIS Native API for Python 来探索 InterSystems IRIS Native API for Python。1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-python-helloworld。2. 在您的 IDE 中,打开您最近从 GitHub 下载或克隆的文件夹,然后打开 hello_world.py。3. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。4. 在您的 IDE 的终端,做如下操作:a. 使用以下命令之一安装 InterSystems Native API for Python:• 微软 Windows:pip install wheel\irisnative-1.0.0-cp34.cp35.cp36.cp37-none-win_amd64.whl
• UNIX®/Linux:pip install wheel/irisnative-1.0.0-cp34-abi3-linux_x86_64.whl
• Apple macOS:pip install wheel/irisnative-1.0.0-cp34-abi3-macosx_10_13_x86_64.macosx_10_14_x86_64.whl
b. 使用命令 python hello_world.py 运行代码。 Javascript IDE
5. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS.
注意: Python 代码示例和支持轮文件是为 Python 3 设计的,因为 Python 2 将在 2020 年退休;Python 2 版本可从 InterSystems Learning Services 获得。
7 Javascript IDE本节提供了将您最喜欢的 JavaScript 和 Node.js 的 IDE(如 Visual Studio Code、Vim 或 Webstorm)连接到 InterSystems IRIS 的说明。当您使用以下步骤连接后(如有必要,请登录 GitHub),您可以使用技术概要:InterSystems IRIS Native API for Node.js 来探索 InterSystems IRIS Native API for Node.js。1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-nodejs-helloworld。2. 在您的 IDE 中,打开您最近从 GitHub 下载或克隆的文件夹,然后打开 hello_world.js。3. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。4. 在您的 IDE 的终端,做如下操作:a. 使用命令 npm install ––save intersystems-iris-native 安装 InterSystems Native API for Node.js。b. 使用命令 node hello_world.js 运行代码。
5. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS.
文章
Jingwei Wang · 一月 19, 2023
Python 已成为世界上使用最广泛的编程语言(来源:https://www.tiobe.com/tiobe-index/),SQL 作为数据库语言继续引领潮流。 Python 和 SQL 一起工作以提供 SQL 单独无法提供的新功能不是很好吗?毕竟,Python 拥有超过 380,000 个已发布的库(来源:https://pypi.org/),它们具有非常有趣的功能,可以在 Python 中扩展您的 SQL 查询。本文详细介绍了如何使用嵌入式 Python 在 InterSystems IRIS 数据库中创建新的 SQL 存储过程。
用作示例的 Python 库
本文将使用两个非常有用的库:Geopy 和 Chronyk。
Geopy 是一个用于将地理编码(地址和地理坐标的限定)应用于地址数据的库。有了它,就可以从街道名称中获取邮局格式的邮政编码和完整地址。非常有用,因为许多记录都有地址。
Chronyk 用于使用人类语言处理日期和时间。这非常有用,因为在内部,对于 IRIS 和 Python,日期是一个数字,表示自初始日期以来经过的时间量。对于人类来说,日期是 7 月 20 日,或者昨天,或者明天,或者两个小时前。 Chronyk 接受接收这样的日期,然后将其转换为通用日期格式。
InterSystems IRIS 中的 Python 支持
从 2021.1 版开始,可以使用 Python 以双向方式在 Python 和 IRIS (ObjectScript) 之间创建类方法、存储过程、互操作产品和Native调用。我不知道有任何其他数据平台可以如此深入地使用 Python。这个工作的要求是 Python 安装在与 IRIS 相同的物理或虚拟机或容器上。 更多详情请见:https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython。对于安装 python 运行:
# install libraries required for python and pip
RUN apt-get -y update \
&& apt-get -y install apt-utils \
&& apt-get install -y build-essential unzip pkg-config wget \
&& apt-get install -y python3-pip
Python 库支持 InterSystems IRIS
为了使 InterSystems IRIS 能够使用 Python 库,必须将其安装在 <installdir>/mgr/python 中。其中 installdir 是安装 IRIS 的文件夹。要安装新包运行:
# use pip3 (the python zpm) to install geopy and chronyk packages
RUN pip3 install --upgrade pip setuptools wheel
RUN pip3 install --target /usr/irissys/mgr/python geopy chronyk
Pip3 是 Python 最受欢迎的包管理器和安装程序 Pip。
Python语言创建存储过程
在 InterSystems IRIS 中使用 Python 的一种可能性是使用 Python 创建存储过程。有两种可能性:
Python使用Create Function or Procedure的SQL语句创建存储过程;
使用 sqlProc 和 language=Python 标记在 ObjectScript 类中创建 ClassMethod。
Python使用Create Procedure的SQL语句创建存储过程
根据 InterSystems 文档,您还可以通过在 CREATE 语句中指定 LANGUAGE PYTHON 参数,使用嵌入式 Python 编写 SQL 函数或存储过程,如下所示(来源:https://docs.intersystems.com/iris20221/csp/ docbook/DocBook.UI.Page.cls?KEY=AEPYTHON#AEPYTHON_runpython_sql):
CREATE FUNCTION tzconvert(dt TIMESTAMP, tzfrom VARCHAR, tzto VARCHAR)
RETURNS TIMESTAMP
LANGUAGE PYTHON
{
from datetime import datetime
from dateutil import parser, tz
d = parser.parse(dt)
if (tzfrom is not None):
tzf = tz.gettz(tzfrom)
d = d.replace(tzinfo = tzf)
return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S")
}
当您运行这个新的 SQL 函数时:
SELECT tzconvert(now(), 'US/Eastern', 'UTC')
该函数返回如下内容:
2022-07-20 15:10:05
使用 sqlProc 和 language=Python 标记在 ObjectScript 类中创建 ClassMethod
我承认我最喜欢这种方法:使用 sqlProc 和 language=Python 标记创建一个 ClassMethod。在我看来,它更容易维护,文档更好,明显并且源代码版本管理更好。对于这种方法,我发布了一个示例应用程序:https://openexchange.intersystems.com/package/Python-IRIS-SQL-Procedures-Sample。我将用它来详细演示第二种方法。
示例应用程序安装
要安装示例应用程序,请按照以下步骤操作:
clone/git 将 repo 拉入任何本地目录
$ git clone https://github.com/yurimarx/iris-sql-python-sample.git
在此目录中打开一个 Docker 终端并运行:
$ docker-compose build
运行 IRIS 容器:
$ docker-compose up -d
另一种安装可能性是使用 ZPM:
zpm "install iris-sql-python-sample"
使用 Python 的存储过程示例
第一个示例是处理地址地理编码的存储过程,请参阅源代码:
ClassMethod GetFullAddress(Street As %String, City As %String, State As %String)
As %String [ Language = python, SqlName = GetFullAddress, SqlProc ]
{
import geopy.geocoders
from geopy.geocoders import Nominatim
geopy.geocoders.options.default_timeout = 7
geolocator = Nominatim(user_agent="intersystems_iris")
location = geolocator.geocode(Street + ", " + City + ", " + State, country_codes="US")
return location.address
}
看到使用 [Language = python, SqlProc] 标记声明了一个 ClassMethod(在 dc.pythonsql.Company 类中)。SqlName 标签允许在 SQL 语句中为新的存储过程设置一个名称。
转到管理门户,系统 > SQL 并运行以下代码:
SELECT
ID, City, Name, State, Street, Zip, dc_pythonsql.GetFullAddress(Street, City, State) As FullAddress
FROM dc_pythonsql.Company
现在不完整的地址返回为“完整”地址(完整且合格)。
注意:如果没有返回执行#class(dc.pythonsql.Company).CreateFiveCompanies()。它将创建五家公司用于测试。
该软件包可以与主要的开放和市场地理编码服务一起使用。在此示例中,我们使用开放服务 Nominatim,但也可以使用 Bing、Google、ArcGIS 等。在 https://geopy.readthedocs.io/en/stable/#module-geopy.geocoders 上查看可能性。
第二个例子是人性化格式的日期和时间包,Chronyk。
它允许您发送“明天”、“昨天”、“4 小时后”、“2022 年 7 月 4 日”等句子,并以通用日期格式获取结果。查看存储过程的创建:
类方法 GetHumanDate (语句 作为 %字符串) 作为 %细绳 [ 语言 = 蟒蛇, 数据库名称 = 获取人类日期, SQLProc ]
ClassMethod GetHumanDate(Sentence As %String) As %String [ Language = python, SqlName = GetHumanDate, SqlProc ]
{
from chronyk import Chronyk
t = Chronyk(Sentence)
return t.ctime()
}
在管理门户 > 系统 > SQL 中执行以下调用:
SELECT
ID, City, Name, State, Street, Zip, dc_pythonsql.GetHumanDate('yesterday') As Datetime
FROM dc_pythonsql.Company
如果你只想调用存储过程,你可以使用这个 SQL 语句:
select dc_pythonsql.GetHumanDate('yesterday') as Datetime
该库具有多种人性化日期和时间的可能性,请参阅 https://github.com/KoffeinFlummi/Chronyk。
所以,很容易创建 Python 存储过程,尽情享受吧!
文章
Botai Zhang · 一月 26, 2021
利用Intersystems IRIS医疗版数据平台内置多模型整合
医院信息查询业务解决方案
概述:
随着医院信息化建设的逐步完善,医院子系统越来越多,系统间接口越来越多,同时接口费用不断增加,管理工作变得越来越复杂。其中,查询类业务接口根据业务类型分化,数量也是逐步递增,带来接口量大、开发工作繁重、代码冗余、维护困难等等问题。针对这一困境,我们利用Intersystems IRIS数据平台内置多模型整合医院信息查询业务解决方案。该应用程序可通过内置模型应用完成查询业务,大大缩小开发、维护、实施等项目关键运转周期。
应用链接:HealthInfoQueryLayer
关键应用:IRIS for Health、REST API、ObjectScript、Globals 、SQL、DATA LOOKUP TABLES
应用程序采用模型及应用介绍:
1.采用模型
1.1. Globals (key-value)
Globals是可以在IRIS数据库中存储和管理的稀疏多维数组。您可以使用ObjectScript和本机API处理Globals。
工具:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_MANAGING
应用:
应用程序根据Globals的键值对、访问速度快的特性。应用在本次程序的Rest分派类与BP流程管理中取值应用,解决了频繁取值速度慢、实现在查找表前端页面配置操作,如:存储了SQL模型、服务配置信息等等。
1.2. SQL访问
InterSystems IRIS通过 ObjectScript、REST API及JDBC提供对数据的SQL访问.
工具:
https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GSQL_smp
应用:
在查询业务中,三方系统不配合接口改造,导致接口实现困难问题。此时,我们采用IRIS内嵌模型ObjectScript、REST API及JDBC来实现对数据的SQL访问,来建立业务接口。
1.3. Object访问
通过ObjectScript、REST API,InterSystems IRIS提供了在Globals 存储和更改对象实例的途径。
文档:
https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_multimodel_object
应用:
在整个交互过程中,直接操纵InterSystems IRIS对象。ObjectScript类定义通常用作创建对象(例如患者,科室或医护人员)的模板。
建立应用案例(此应用程序以患者为例)
2.1应用搭建:
2.1.2基本环境
IRIS版本信息:IRIS for Windows (x86-64) 2020.1 (Build 215U) Mon Mar 30 2020 20:14:33 EDT [HealthConnect:2.1.0]
IRIS具有JAVA、JDBC环境
可采用PostMan进行测试
2.1.2安装步骤
①建立Rest服务
新建Web应用程序→配置分派类→配置权限。
该步骤可见图片:应用程序运行情况/webaplication(Query).png及webaplication(role).png
②配置SQL-JDBC
建立SQL连接,连接测试数据库Mysql,导入测试jhip_patient_info.sql
③配置查找表
Global-^Ens.LookupTable中查找表文件导入
④导入代码
导入ApplicationCode中的代码,编译,打开Production,
注意:修改BO配置信息(DNS)、配置JavaGateway等
2.2应用流程
2.3应用测试
可采用Postman工具(其他工具也可以)进行测试验证
Postman可导入Query.postman_collection.json,更改IP、端口号信息、URL进行测试。
2.4应用总结
本应用程序以查询患者为案例,采用IRIS中REST API、ObjectScript、Globals 、SQL内置多种模型实现医院信息查询业务。如果有需要可根据此方案丰富业务满足需求。
最后,如果您认可此解决方案,请在系统间多模型数据库竞赛中为该应用程序投票。
投票链接:投票链接
应用程序名称:HealthInfoQueryLayer 点击Vote投票即可。
感谢各位! 集成平台应用典型案例 感谢您的分享
文章
Michael Lei · 六月 26, 2022
在这篇文章中,我将解释如何通过使用CSP Web应用程序以及启用/禁用和认证/取消认证任何Web应用程序的代码来进行认证、授权和审计。
在线 Demo -- https://dappsecurity.demo.community.intersystems.com/csp/user/index.csp (SuperUser | SYS)
推荐大家看下这个视频: https://www.youtube.com/watch?v=qFRa3njqDcA
应用层
从认证开始
认证可以验证任何试图连接到InterSystems IRIS®的用户或其他实体的身份。正如人们常说的,认证是你如何证明你是你所说的人。
有许多不同的方法可以对用户进行认证;每一种方法都被称为认证机制。InterSystems IRIS支持一系列的认证机制:
Kerberos — Kerberos协议被设计用来在不安全的网络上为服务提供安全认证。Kerberos使用Ticket来验证用户,避免了在网络上交换密码。
Operating System–Based — 基于操作系统的认证使用操作系统对每个用户的身份认证来识别该用户对InterSystems IRIS的身份。
Instance Authentication — 通过实例验证,InterSystems IRIS提示用户输入密码,并将所提供的密码的哈希值与它所存储的值进行比较。
Lightweight Directory Access Protocol (LDAP) — 通过轻量级目录访问协议LDAP,InterSystems IRIS根据LDAP服务器中的信息对用户进行认证。
Delegated Authentication — 委托认证提供了一种创建自定义认证机制的方法。应用程序开发人员完全控制委托认证代码的内容。
我使用实例验证,对于用户的创建,我们可以使用以下objectscript命令:
&sql(CREATE USER TestUser IDENTIFY BY demo)
创建 TestUser 和 demo 密码
审计Auditing
在创建用户记录时,也通过使用以下objectscript命令添加到审计数据库中:
Do $SYSTEM.Security.Audit("%System","%Security","UserChange","User:TestUser | Password:demo","Audit Log inserted from Data_APP_Security")
请参考审计相关的文档 (Auditing Guide) : https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AAUDIT
授权Authorization
一旦认证完成,我们需要创建角色并授予角色以权限,然后将角色与用户联系起来(授权)。我们将分三步来做这件事
第一步 : 通过使用以下objectscript命令创建角色,我们正在创建ReadWrite角色
&sql(CREATE ROLE ReadWrite)
第二步: 在表上授予SELECT,UPDATE,INSERT权限,我们将scw.Patient表的权限分配给ReadWrite角色。
&sql(GRANT SELECT,UPDATE,INSERT ON scw.Patient TO ReadWrite)
第三步: 给用户授予角色,我们给TestUser用户分配ReadWrite角色
&sql(GRANT ReadWrite To TestUser)
启用/禁用Web应用
我们可以通过使用以下objectscript代码启用或禁用Web应用程序
New $Namespace
Set $Namespace = "%SYS"
Set App = ##class(Security.Applications).%OpenId("/terminal")
Set App.Enabled=0
Do App.%Save()
这里"/终端 "是我们应用程序的名称。应用程序可以通过设置 "App.Enabled "为0来禁用,通过设置值为1来启用
认证/取消 Web 应用
我们可以通过使用以下objectscript代码来设置认证
New $Namespace
Set $Namespace = "%SYS"
Set App = ##class(Security.Applications).%OpenId("/terminal")
Set App.AutheEnabled=0
Do App.%Save()
这里"/终端 "是我们应用程序的名称。认证可以通过使用"App.AutheEnabled" 属性来设置. 可以设置以下数值
property AutheEnabled as Security.Datatype.Authentication [ InitialExpression = 64 ];
Authentication and Session mechanisms enabled (CSP Only).
Bit 2 = AutheK5API
Bit 5 - AutheCache
Bit 6 = AutheUnauthenticated
Bit 11 = AutheLDAP
Bit 13 = AutheDelegated
Bit 14 = LoginToken
Bit 20 = TwoFactorSMS
Bit 21 = TwoFactorPW
谢谢
源代码:https://openexchange.intersystems.com/package/Data_APP_Security