Dmitry Maslennikov · Mar 15, 2017 go to post

Alexey, yes, it is very easy to build a little application just in one container. I don't see any problem, to use any supported technologies as well. Even also possible some load balancing from docker, which also good for microservices. I'm going to show some example with application in the next article soon.

Dmitry Maslennikov · Mar 15, 2017 go to post

I think in this case better to use property ReplyTo, which will be used in mail clients as an address for response.

Dmitry Maslennikov · Mar 14, 2017 go to post

$zf(-1) can only return status code from called process

To get some output result, you should redirect this output to some file, and read result from this file after executing.

set status=$zf(-1, "find /tmp -name *.tmp > /tmp/result.log")
set fs=##class(%Stream.FileCharacter).%New()
set fs.Filename="/tmp/result.log"
set result=fs.Read()
Dmitry Maslennikov · Mar 14, 2017 go to post

Stay tuned, I'm going to write next about it. In this article, we did a basic image. Wich will be as a source FROM for next images with some our application.

Dmitry Maslennikov · Mar 10, 2017 go to post

In Caché there is no any such classification for errors. Developer should decide it depends on his own tasks and needs.

Dmitry Maslennikov · Mar 10, 2017 go to post

%-variables, stored in local memory of the current process.

Process-private globals, implicitly stored in database CACHETEMP. 

It means, that when you use %-variables, you limited by the memory of your process, (which can be increased programmatically by the way). While Process-private global works exactly as simple global and limited only by free size on the disk. 

And also you should remember that you can not store objects in global variables, even if it is Process-private one.

Access to process-private variables also could be a bit slower than %-variables.

this port is from internal Apache which was installed by default with Caché. And should be used only in development.

For production, or pre-production, you should use some external WebServer, IIS (if you use Windows), Apache or Nginx. You can find more information about configuration all of this webservers, in the documentation.

I would recommend looking at HAProxy, I've used it only for HTTP, with about 10 ECP application servers. But while it can work with binary protocols as well, I think it should be useful. Quite easy to configure and monitor it.

I've been working with Caché now a bit less than before. But anyway I see that Atelier very slow, I'm typing much faster, then it can show what I wrote. And still exists some highlighting errors, which I've already described earlier.

Why do you ask about Postman here? 

For Postman does not matter which server do you use. Please go to their documentation, where you can also find some video tutorials.

Because, your UrlMap define only GET method, If you need more, you should add it to the same or any other methods.

And with CRUD, you should not put delete/insert inside URL, just use different HTTP methods with the same URL.

Dmitry Maslennikov · Feb 28, 2017 go to post

Why do you think it should be in this part of the documentation. It usual procedure. Almost everything possible to do programmatically, so, you can write a script for it. And there are lots of ways ho to do it. As for me, I think the bast way is to use Installer manifest.

Dmitry Maslennikov · Feb 28, 2017 go to post

Restoration database from the backup is only to restore database file CACHE.DAT. If you want to see this new database on that server, you should configure this server.

Dmitry Maslennikov · Feb 28, 2017 go to post

If you would look carefully to your code, you would see this place

all HTML should be between &html< and >

But in your code, some of HTML outside of this command.

Dmitry Maslennikov · Feb 27, 2017 go to post

Looks like you forgot to define web application for your REST Service.  Please look at the documentation. And at this part:

Each subclass that has its own entry point must have its own CSP web application. You define the CSP web application and specify its security for on the Management Portal’s [Home] > [Security Management] > [Web Application] page, which you can access by clicking System AdministrationSecurityApplications, and Web Applications. When you define the CSP web application, you set the Dispatch Class to the name of the custom subclass of %CSP.REST and specify the first part of the URL for the REST call as the name of the application.

Dmitry Maslennikov · Feb 25, 2017 go to post

Studio uses language from Regional Settings. Even when system's language is English, but you can use your regional settings (clock, number formats etc). And you can change to use default language inside Studio.

Dmitry Maslennikov · Feb 24, 2017 go to post

When you export and import this class to another namespace(s), you will have multiple different copies. I think much better to have the same class in all namespaces. You can do it with package mapping. And here you have two ways create a mapping in the each namespace where you need access to this class, or create special namespace %ALL, and configure mapping which will be available in all namespaces (except DOCBOOK and SAMPLES).

Dmitry Maslennikov · Feb 24, 2017 go to post

Since 2011.1 version was added %vid to achieve some paging functionality. Some more details.

SELECT *, %vid FROM (SELECT ....) v WHERE %vid BETWEEN 5 AND 10
Dmitry Maslennikov · Feb 23, 2017 go to post

Looks like, you call this service in the wrong way. I would suggest, that you call it by URL http://localhost:57772/csp/samples/REST.DocServer.cls while you should use this URL http://localhost:57772/csp/samples/docserver/namespaces But before you should activate application /csp/samples/docserver, for details look at the documentation.

Dmitry Maslennikov · Feb 16, 2017 go to post

As the last argument, you should use routine or classmethod, not command. 

csession CACHE -U"%SYS" "##class(%SYS.System).InstanceGUID()"
Dmitry Maslennikov · Feb 11, 2017 go to post

$case is used to convert one value to another. Like, you have some code, but you need a display text for it, you can do so:

set display=$case(gender,"F":"Female","M","Male",:"Unknown")

$select returns value when meets the first true condition. It needs if can't compare only one variable, or you have some more conditions.

write $SELECT(0=$ISVALIDNUM(x):"not a number",x=0:"zero",""=$NUMBER(x,"I"):"not an integer",x#2=1:"odd",1:"even")

Hi Greg, 

It is a very interesting question. I can't give you all that you want, but I'll try to give some hints. 

Deploy Script

In first, you are looking for some script. While you have to execute some script from Operation System, you have different ways how to do it. And here again, depends on what are you going to inside Caché. As you working on some Linux system, I'll start from it.

Linux:

To start some script inside of Caché you may use csession tool, in two ways: 

  • specify some routine or class, which will be executed at once, and after finish, that code csession will exit. In this case, you have to use some internal code, which already ships by InterSystems, or you can install some of your code.
    csession ENSEMBLE -UUSER ##CLASS(package.class).method()
  • or you can write some COS code, generated in your script, or just in a text file near to script. And send this code to csession. 
    csession ENSEMBLE -UUSER < deploy.mac

Windows:

On a Windows system, you don't have csession tool. But here available another tool cterm.

  • you can also specify routine name
    cterm /console=cn_ap:ENSEMBLE[USER]:^%D
  • but cterm also support special scripts format, which supports even interactive mode.

For both Windows and Linux also possible to launch executable file cache, and call your code in almost the same way as it does csession.

Deploy

To launch that script, you can use any of Continuous Integration system, which you like. I would recommend Jenkins, it is an opensource project, has lots of plugins, and supports multi servers installation. You can configure to launch your script, just by timetable, every time. Or check if appeared some new commits in your chosen System of control version (Subversion or so on), since it was run last time. Multi-server version may help have some different servers with a secondary installation of Jenkins, and control all of them from the master node.

Last time I found GitLab for myself, it quite good git server, with CI service inside. Supports multiple runners for CI, and you can choose which runner should execute some stages. You can easily configure multiple tasks which will be run after every commit. Like build, test and deploy if everything is OK.

Dmitry Maslennikov · Jan 25, 2017 go to post

You can get list of routines with a query StudioOpenDialog in class %RoutineMgr

To edit routine you have at least two ways. Open it via class %Routine which is just a stream with a code inside. So, you can create a new stream, with a new content, and replace old one. Another way is to use commands: ZLOAD, ZINSERT, ZSAVE.

Dmitry Maslennikov · Jan 19, 2017 go to post

this version number is not enough, please show output from this command

write $zv

Looks like, your installation in 8-bit mode instead of Unicode. In that case such behavior possible. That's why we are asking for full version name from $zv, 

Dmitry Maslennikov · Jan 18, 2017 go to post

You can find answer on your question in the documentation.

The Caché Java Binding is Deprecated

Java Persistence Architecture (JPA) is the recommended persistence technology for complex object hierarchies in Java projects. Caché and Ensemble currently support JPA 1.0 and 2.0 via the Hibernate implementations of the JPA specifications. See “Using the Caché Hibernate Dialect” in Using Caché with JDBC.

Extreme Event Persistence (XEP) is the recommended persistence technology for high-performance simple to medium complexity object hierarchies in Java projects. See “Using eXTreme Event Persistence” in Using Java with Caché eXTreme.