我正在使用Intersystems Cache从头开始一个项目.我想为项目设置一个持续集成服务器.Cache具有单元测试库,因此我们的想法是根据版本控制系统(ClearCase)中的更改,将源导入测试数据库,构建源,在缓存终端中运行单元测试.
除了Cache Objectscript之外,肯定还会有一些需要构建的java代码.其他技术可以在以后添加.所以我需要一个不受特定技术约束且可以轻松扩展的持续集成工具.我过去曾使用CruiseControl构建java解决方案,但这已经很久以前了,我想知道自那以后是否还有更好的解决方案.
什么是最好的(并且希望是免费的)持续集成产品,最容易扩展到不同的技术?
我有许多供应商提供的M-Code例程,作为更大的产品的一部分,它使用READ并WRITE直接与当前设备交互.我无法更改该代码.我想在系统中包含一些例程,我可以交互式地提供输入和捕获输出.
目前,这是通过打开到远程主机的TCP连接并使其成为当前设备来实现的.READ并WRITE确实连接到套接字.这是相当不方便的,因为它需要一个单独的服务来监听TCP套接字,并与本地作业协调以使整个过程工作.我还必须关闭nagle并跳过缓冲或连接变为延迟驱动或停止.(例如TCP OPEN选项/SEN=1aka +Q).不幸的是,这会导致许多1字节的TCP段,并且效率也非常低.
我宁愿通过一个过程来推动整个互动.理想情况下,我可以调用READ,WRITE当前设备上运行的其他功能会触发CachéCallinC接口或用户扩展模块中的某些M-Code或回调,以在后端提供所需的功能.这样,我可以按照自己的条件管理IO,而无需进行进程间协调.我无法找到一个入口点来设置它.
在Caché中是否存在用户定义的设备?
对于UNIX主机,有一种方法可以将现有文件描述符用作设备,这可能很有用,但似乎并未在Windows上实现.
有一件事我也考虑过是创建一个新的进程,有Windows重定向STDIN并STDOUT与SetStdHandle来管我从同一个进程中控制,用呼唤连接到缓存并让它使用它应该是默认设备STDIN和STDOUT.任何人都知道这是否真的有效?
在Caché中是否有任何"内置"方法或方法对BASE64字符串进行编码/解码?
从一张桌子算起来时,我遇到了一个奇怪的问题.表名是Client,并且有一个名为CardNo的varchar(200)列.数据库引擎是Intersystems Cache,查询语法是SQL.
我执行下面的查询以获得具有/没有CardNo的客户端的数量.但得到意想不到的结果如下.
select count(*) from Client
where CardNo is null
--Result: 38000
select count(*) from Client
where CardNo is not null
--Result: 78000
select count(*) from Client
--Result: 265000
Run Code Online (Sandbox Code Playgroud)
没有CardNo的客户端数量是38000.CardNo的客户端数量是78000.表中所有客户端的数量是265000,不等于78000 + 38000.这怎么可能发生?根据文档,查询样式应该没有问题 http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_null
当然,当您需要在Java中实现类似以下示例的解决方案时,Caché本身并不实现诸如Java之类的ENUM,但在Caché中,最佳实践是什么?
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
}
final Planet mars = Planet.MARS;
Run Code Online (Sandbox Code Playgroud)
简单地访问代码 Planet.MARS
我从off复制了代码.文档:
&sql(SELECT *,%ID INTO :tflds()
FROM Sample.Person )
IF SQLCODE=0 {
SET firstflds=14
FOR i=0:1:firstflds {
IF $DATA(tflds(i)) {
WRITE "field ",i," = ",tflds(i),! }
} }
ELSE {WRITE "SQLCODE error=",SQLCODE,! }
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它只返回第一行的所有字段而不返回任何其他字段.这是一个错误,还是我做错了?
什么是CachéObjectScript将参数传递给基础构造函数的方法?
例如,在C#中,您将执行以下操作:
public MyConstructor(string id) : base(id) { }
Run Code Online (Sandbox Code Playgroud)
id您希望传递给基础构造函数的值在哪里.
该文件说,这是允许的:
ClassMethod GetContacts() As %ListOfObjects(ELEMENTTYPE="ContactDB.Contact")
[WebMethod]
Run Code Online (Sandbox Code Playgroud)
我想做这个:
Property Permissions As %ListOfObjects(ELEMENTTYPE="MyPackage.MyClass");
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
错误#5480:未声明属性参数:MyPackage.Myclass:ELEMENTTYPE
那么,我真的必须创建一个新类并为其中的每个列表设置ELEMENTTYPE参数吗?
最近,我的项目经理让我从事 InterSystems Cache ObjectScript 的工作。早些时候,我曾担任 Java 开发人员 (J2EE)。所以我的问题是 Cache 与 Java 有何不同。比较会很棒。
intersystems intersystems-cache intersystems-cache-studio intersystems-cache-zen intersystems-healthshare
客户希望从其MUMPS数据库中提取信息并将其传输到缓存数据库,我应该从哪里开始,应该牢记哪些最佳实践?(我对MUMPS还是比较陌生,并且已经参加了这个项目)