OK some further digging reveals that the main problem is that QEWD is freezing at the point where it tries to start the Node.js Express web server. 

I'd guess the reason is either:

- something to do with the way Express works internally that clashes with iris-main; or

- port 8080 (which is the port I'm telling Express to listen on) being unavailable because of something IRIS has done

Anyone have any clues?

There's a second problem which is that the Node.js setInterval() function appears to freeze iris-main - something that is pretty critical to have working in QEWD

I've spent quite a number of hours trying to figure out a way to modify the IRIS Container within the AWS Community version so that I can get it to run QEWD.js.  I've been able to build a new Container derived from the one provided in the AWS EC2  instance into which I install Node.js and the QEWD modules, etc. 

However, using the --after parameter in the docker run command, it looks like iris-main is blocking something - the QEWD Node.js startup code appears to just hang, I think because console.log is unable to write to STDOUT - presumably because of something iris-main is doing.  It looks like running iris-main and Node.js together doesn't want to work

I've hit a brick wall with this now and don't know if there's any way to get QEWD working in this AWS EC2 instance, which is disappointing

Fabian

You misunderstand: ewd-document-store is an abstraction built on top of the InterSystems Node.js client, NOT an alternative to it.  QEWD uses the InterSystems Node.js client via ewd-document-store, so once again, QEWD isn't an alternative to the Node.js client, but makes it a lot easier to use with IRIS or Cache.

You can't directly filter objects with IRIS NoSQL storage (aka Global Storage) - instead the trick it to maintain indices to optimise iteration - see Ward's follow-up comment., and study those slide decks I've created that describe how to use QEWD's abstraction of Global Storage.

Ward is correct - ewd-document-store is the way to go.

For background on this module, the thinking behind it and some of the considerations you need to be aware of when using it (which ultimately explain what QEWD.js is all about and why it is what it is), see this presentation that I gave a couple of years ago at the UK Symposium:

https://www.slideshare.net/robtweed/data-persistence-as-a-language-feature

Also see here for pointers to further info on the persistent JSON / Document Database abstraction provided by ewd-document-store:

https://github.com/robtweed/qewd/blob/master/up/docs/InteractiveApps.md#...

Note that ewd-document store will work with any version/build of Cache, Ensemble or Iris

Rob

Hi Evgeny

Yes - In a previous article I described how QEWD works with IRIS - it simply uses the iris.node connector instead of the cache.node one:

https://community.intersystems.com/post/using-qewdjs-create-rest-apis-iris

Similarly, you can use the new QEWD-Up technology with IRIS.  Just make two changes:

1) In your QEWD-Up application's config.json file, where the Cache version specifies this:

      "database": {
        "type": "cache",
        "params": {
          "path": "/opt/cachesys/mgr",
          "username": "_SYSTEM",
          "password": "SYS",
          "namespace": "USER"
        }
      }

Just change the database type to "iris", eg:

      "database": {
        "type": "iris",  // <====== ****** change this *****
        "params": {
          "path": "/opt/cachesys/mgr",
          "username": "_SYSTEM",
          "password": "SYS",
          "namespace": "USER"
        }
      }

Change the other IRIS connection parameters if needed and as required for your IRIS system (ie path, username, password, namespace)

2) Replace the cache.node connector with the appropriate iris.node version for your operating system and Node.js version. 

When you use QEWD, anything you can do in Cache or IRIS is available to you from within Node.js, and being a Node.js platform, you also have access to the huge ecosystem of OpenSource Node.js modules in NPM to save you re-inventing wheels for pretty much anything you can imagine doing.

Of course, since neither Cache nor IRIS are Open Source products, and since, for whatever reason, neither the cache.node nor iris.node modules are distributed via NPM (which is what Node.js developers would expect), you need to figure out how to manually construct your own licensed Cache or IRIS QEWD-Up Containers.  If you're wanting a native implementation, for the same reasons I'm unable to provide the kind of pre-constructed installation scripts that I otherwise provide for other supported QEWD environments that make life easier for developers.  IMO these kind of issues are a real barrier to wider uptake of Cache and IRIS in the current world of IT, but there we go.

Anyway, if you're interested in using QEWD with IRIS, the best I can suggest is to take a look at the Dockerfile I've created and figure out how to adapt it for use with IRIS using my notes above...or figure out how to adapt an InterSystems-provided IRIS container to make use of QEWD-Up.  IRIS certainly works very well with QEWD-Up when you do get it working, so it's worth the effort!

As to Open Exchange - I'll look into it as time permits.  However, everything I create is Open Source and I publish everything I do on Github for anyone in this community to look at and use.

That's a code sequencing issue.  Change the end of Ward's qewd-start.js file to this:

let qewd = require('qewd').master;
// define the internal QEWD Express module instance

// start the QEWD server now ...
qewd.start(config);

let xp = qewd.intercept();
// define a basic test path to test if our QEWD server is up- and running
xp.app.get('/testme', function(req, res) {
  console.log('*** /testme query: ', req.query);
  res.send({
    hello: 'world',
    query: req.query
  });
});

and it should work for you

Thanks Ward for raising awareness of the QEWD / IRIS demo while I'm away!

Evgeny - I'm on holiday right now and quickly integrated IRIS with the Conduit / RealWorld back-end code before I left - I didn't have much time and hadn't tested the demo out.  It's actually an interesting "hybrid" version of the back end that works with both WebSockets (the version you see in this demo) and REST (which you would see if you pointed a "vanilla" Conduit front-end at it.  

I pushed out a new version of QEWD to formally integrate IRIS, and also a new supporting module: 

https://github.com/robtweed/ewd-qoper8-iris

Just specify the database type as "iris" in your QEWD startup file, and provide the other parameters (username, password, namespace etc) just as for Cache.

Needless to say, the demo you see works identically, with exactly the same Node.js code, for all supported databases, so you'll just have to take my word, for now, that it really is working with IRIS! :-)  Actually the performance will indicate that it's hooked up to a pretty fast DB (and yes, it really is IRIS, running on an AWS EC2 Ubuntu machine): see the response time recorded in the raw response messages that you'll see if you enable your browser's JavaScript console.  All the data is being stored in IRIS as persistent JSON - see Slide decks (part 17 onwards) here:

http://docs.qewdjs.com/qewd_training.html

When I get back from holiday, time-permitting, I intend to put together some proper, updated source code for the Conduit app that people can try for themselves, using pure REST (which is probably what many / most want to see) and also (again time-permitting) do a MicroService-based version. 

However, the code base you've found will give you an initial idea how a QEWD / IRIS application would be written (though there have been some enhancements that have simplified some of the coding still further since I wrote the Conduit app).  This slide deck is up to date and explains the way you write REST apps these days:

https://www.slideshare.net/robtweed/ewd-3-training-course-part-31-ewdxpr...

I'll also check out the Comments asap to see if / why they aren't working as you report.

In the meantime, enjoy!

Rob

Alternatively...

For those interested in exploring and using MicroServices with all versions of Cache today, QEWD.js has provided a very cool set of Open Source solutions and advanced functionality for a year now.

The full detail is described in the following parts of the Online QEWD.js Course:

https://www.slideshare.net/robtweed/ewd-3-training-course-part-43-using-json-web-tokens-with-qewd-rest-services

https://www.slideshare.net/robtweed/ewd-3-training-course-part-44-creating-microservices-with-qewdjs

https://www.slideshare.net/robtweed/ewd-3-training-course-part-45-using-qewds-advanced-microservice-functionality

And QEWD.js is an ideal and very powerful, modern Open Source REST platform for Cache.  See:

https://www.slideshare.net/robtweed/ewd-3-training-course-part-31-ewdxpress-for-web-and-rest-services

 And all for free :-)