Dmitry Maslennikov · Feb 25, 2022 go to post

This is how Durable %SYS works, when it's initialized, it copies everything to the durable folder, including your db in mgr directory. And you can prevent it, by creating this database, just somewhere else.

Dmitry Maslennikov · Feb 25, 2022 go to post

Caché will not get support for M1, and so, I think no reasons to wait for an ODBC driver for M1 too

Dmitry Maslennikov · Feb 25, 2022 go to post

And I have one more demo project, based on Realworld application, I found on GitHub

What I did, is just forked some project, switched it to using IRIS, by configuring its settings, added requirements, wrapped it in the container with IRIS, and that's mostly it.

Look at the repo https://github.com/caretdev/django-iris-realworld

For this project, I've used a non-CE version of IRIS, so, you will need an iris.key, placed in home directory to start it

Dmitry Maslennikov · Feb 25, 2022 go to post

It's not a big issue, to make it work. Just keep in mind that both containers, with SAM and monitored system, have to be in the same docker's network. If you run both images in with docker-compose, they by default will get the same network, so, in most cases, you may use IRIS service's name from docker-compose.yml as a hostname, and it will be able to connect to it internally inside that network.

If you need access from dockerized SAM to a dockerized IRIS, both working in different networks, you have to publish ports for IRIS, so, it should be available from the host, but from the docker, your SAM has to know the host's address and host.docker.internal is a way, to give it to him. And port should be the same as published when docker container is running.

When docker container is started with -p param, which says how to publish the port, possible to say, which IP to select, or select all  for instance -p 0.0.0.0:52273:52273

docker ps, may help with understanding how the container is available

8d8977f9d5f8   intersystemsdc/iris-community:preview                          "/tini -- /iris-main…"   6 days ago       Up 3 days (healthy)       0.0.0.0:1972->1972/tcp, 2188/tcp, 53773/tcp, 0.0.0.0:52773->52773/tcp, 54773/tcp                           iris

if it shows something like 127.0.0.1:52773->52773, it will only be available as localhost or 127.0.0.1 and will not be accessible from another container and network, because of host.docker.internal will refer to another ip

Could you explain, how you running all the parts?

Dmitry Maslennikov · Feb 25, 2022 go to post

Yeah, I've replaced %Library.GlobalCharacterStream with %Stream.GlobalCharacterStream, solved the main issue, but was a cause to another issue, with storage format, they are not compatible, any new data is ok, but all the previously saved data became unavailable, but it's possible to fix its storing. In my case that change was worth it.

Dmitry Maslennikov · Feb 21, 2022 go to post

I have a system on Caché, which has about 100TB of data in it, with a couple of thousands of concurrent users. And it's ECM system, which in fact has no developers support for some time, but still able to be modified, as it's kind of low-code system, where all the forms can be configured with UI, all the processes and document's conventions as well, and it has integrations with many other systems. So, probably it can be proof that InterSystems is good enough for such cases.

Dmitry Maslennikov · Feb 21, 2022 go to post

The issue could be also, if you using some different user, set with USER line in Dockerfile, or with user parameter when you run it. The user running the IRIS inside the container should be irisowner.

Dmitry Maslennikov · Feb 20, 2022 go to post

Globals are stored in the database and they are limited only by the size of that database.

I'm not sure if the size of the database has any limits, at all, but at least what I know, is that I have database files with up to 10 terabytes per one file. And the only reason is that it's not large than that, we split the data into smaller files due to external reasons, such as filesystems, and just having smaller files makes it easier to operate as a file.

Dmitry Maslennikov · Feb 11, 2022 go to post

I've tested with a simple telnet client installed inside the container, and it works well.

activate Foreground in Production, and in the terminal, use the command

telnet localhost 63300

Dmitry Maslennikov · Feb 10, 2022 go to post

I working on macOS, and with docker. When I activate foreground, browser tries to execute telnet with this port. Did you try to expose port to the same one on the host, 63300:63300?

Dmitry Maslennikov · Feb 10, 2022 go to post

I have not played with the Foreground feature before, but, I tried to do it right now, and it looks like, you can just publish port 63300 when you run the container, so, your host's telnet client will be able to connect to the Foreground port. 

If you wish, you can change the port number, by setting it directly to the global

Set tPortRangeStart=$G(^Ens.Config("FGTelnetRange","start"),63300)
Set tPortRangeEnd=$G(^Ens.Config("FGTelnetRange","end"),63499)

When you have ISFS configured to multiple namespaces, you can just use copy-paste ability to copy files between isfs folder, or with using real folder.

Still the same, only offline mode will save it only locally and will not save on server.

Why you don't want to update the server?

Yeah, this is why you need to store files locally. And it's right.

But does not say why you need to work offline, how do you check if your code is working as expected?

So, it will be like offline mode, not just local mode. In this case, you may just deactivate the connection, with "objectscript.conn.active": false.

But, many features, which require an active connection to the server will not be available as well.

Just curious, what are the reasons to work this way?

Link to documentation

Local way, is actually how it was designed by default, and how you'll get the best experience.

What issues did you face? 

In short how to start using it.

  • You need to configure access to your server through parameters under "objectscript.conn"
  • Use your local code, if you already have it, or export code from the server, once you are connected
  • Edit and save files as a usual file, will save it on the server and compile it, in case of any compilation issues it will notify you about it.

You have to look at grade documentation. And it will be something like this. it says, to look at libs folder for jar files, usually it only uses some remote repositories like maven central

repositories {
    flatDir {
        dirs 'libs'
    }
}
Dmitry Maslennikov · Jan 31, 2022 go to post

btw, if you would need to call other method which is also Python

Class User.Test
{

ClassMethod SomeMethod() As %String
{
  quit "test objectscript"
}

ClassMethod SomePythonMethod() As %String [ Language = python ]
{
  return "test python"
}

ClassMethod PTest() [ Language = python ]
{
  import iris
  print(iris.cls(__name__).SomeMethod())
  print(Test.SomePythonMethod())
}

}

In this case this method appears can be accessible through the python class named as the current class (without package), in my case it's Test

Dmitry Maslennikov · Jan 30, 2022 go to post

I found only this way when it's working. __name__ will have current classname 

Class User.Test
{

ClassMethod SomeMethod() As %String
{
  quit "test"
}

ClassMethod PTest() [ Language = python ]
{
  import iris
  print(iris.cls(__name__).SomeMethod())
}

}
Dmitry Maslennikov · Jan 28, 2022 go to post

This version is just outdated, InterSystems deletes old version, when they publish something newer. Use docker-ls tool, this will help to find all available versions 

Dmitry Maslennikov · Jan 27, 2022 go to post

Do not use %ZEN, it’s deprecated. There is Native JSON support, and %JSON.Adaptor, use this instead. Any output with write command will produce this error.