Clear filter
Announcement
Anastasia Dyubaylo · Mar 25
Hi Community,
Check out this new video that shows how to build the UI for InterSystems FHIR server from scratch using AI with no previous frontend experience:
📺 Building and Deploying React Frontend for the InterSystems FHIR server in 20 minutes with Lovable AI
🗣 Presenter: @Evgeny Shvarov, Senior Manager of Developer and Startup Programs, InterSystems
The tools and products used:
InterSystems IRIS for Health (FHIR Server)
Lovable.dev (Frontend)
VSCode (dev env)
Github (code repository)
ngrok (domain forwarding)
Share your thoughts or questions in the comments to this post. Enjoy! Here is the related demo project on OEX.
Announcement
Daniel Palevski · Apr 2
Summary of Alerts
Alert ID
Product & Versions Affected
Explicit Requirements
DP-439207
InterSystems IRIS® data platform 2024.3 (AIX)
AIX installations Using JSON processing and Unicode non-Latin-1 character sets
DP-439280
InterSystems IRIS 2024.3 (containers with IntegratedML)
IntegratedML Containers using TensorFlow
Detail of Alerts
DP-439207 - AIX JSON Unicode Parsing Issue
A bug has been identified in InterSystems IRIS 2024.3.0 on AIX instances that affects the parsing of JSON Unicode strings. The issue arises when either the %FromJSON() or %FromJSONFile() method parses strings that contain characters with values less than $CHAR(256) followed by Unicode characters exceeding $CHAR(255). The conversion process incorrectly transforms the earlier characters into $CHAR(0), leading to silent data corruption. This issue only affects AIX version 2024.3 of the following products:
InterSystems IRIS
InterSystems IRIS for Health
HealthShare® Health Connect
Impact Assessment
When this occurs, incorrect characters may be stored in the database or passed to interfaces without triggering errors.
The defect was introduced in IRIS 2024.3.0 and has been resolved with DP-439207.
Affected Workflows: This issue only occurs on Unicode installations running AIX, affecting applications processing data that contain a mix of ASCII and Unicode characters.
Resolution
If you are using InterSystems IRIS 2024.3.0 on AIX instances, then you should upgrade to InterSystems IRIS 2025.1.0 as soon as possible.
Customer Actions Required
Identify Impacted Systems:
Determine if you are running InterSystems IRIS 2024.3.0 on an AIX instance with Unicode databases and have a mix of Unicode and non-Unicode characters.
Upgrade Path:
Upgrade to InterSystems IRIS 2025.1.0 as soon as possible.
DP-439280 - IntegratedML Container TensorFlow Issues
Customers using either of the following containerized version of IRIS 2024.3 may encounter training errors when leveraging IntegratedML.
containers.intersystems.com/intersystems/iris-ml:2024.3
Impact Assessment
Customers leveraging IntegratedML on the InterSystems-provided IRIS 2024.3 containers will experience model training failures due to compatibility issues with TensorFlow and related dependencies.
Resolution
Customers wishing to use IntegratedML with IRIS or IRIS for Health in containers are encouraged to create your own containers by following the advice published on the Developer Community.
Customer Actions Required
To continue using IntegratedML with AutoML, customers must manually manage dependencies using the pip package manager as described above. This ensures compatibility and proper functionality of AutoML components like scikit-learn within your IntegratedML Python environment.
For More Information If you have questions or need assistance, please contact the InterSystems Worldwide Response Center (WRC).
Article
Evgeny Shvarov · May 9
Hi developers!
Observing the avalanche of AI-driven and vibe-coding developer tools that have been appearing lately almost every month with more and more exciting dev features, I was puzzled whether it is possible to leverage it with InterSystems IRIS. At least to build a frontend. And the answer - yes! At least with the approach I followed.
Here is my recipe to prompt the UI vs InterSystems IRIS Backend:
Have the REST API on the IRIS side, which reflects some Open API (swagger) spec.
Generate the UI with any vibe-coding tool (e.g., Lovable) and point the UI to the REST API endpoint.
Profit!
Here is the result of my own exercise - a 100% prompted UI vs IRIS REST API that allows to list, create, update delete entries of a persistent class (Open Exchange, frontend source, video):
What is the recipe in detail?
How to get the Open API (Swagger) spec vs IRIS backend?
I took the template with persistent class dc.Person, which contains a few simple fields: Name, Surname, Company, Age, etc.
I thought that ChatGPT could generate swagger spec but it would be shy to do it vs ObjectScript (perhaps it can now) so I generated DDL vs the class in IRIS terminal:
Do $SYSTEM.SQL.Schema.ExportDDL("dc_Sample","*","/home/irisowner/dev/data/ddl.sql")
and fed ChatGPT with the DDL + prompt:
Please create an Open API spec in JSON version 2.0 vs the following DDL which will allow to get all the entries and individual ones, create, update, delete entries. Also, add _spec endpoint with OperationId GetSpec. Please provide meaningful operation id's for all the endpoints. The DDL: CREATE TABLE dc_Sample.Person( %PUBLICROWID, Company VARCHAR(50), DOB DATE, Name VARCHAR(-1), Phone VARCHAR(-1), Title VARCHAR(50) ) GO CREATE INDEX DOBIndex ON dc_Sample.Person(DOB) GO
And it worked quite well - here is the result.
Then I used %REST command-line tool to generate rest-api backend classes.
After that, I implemented IRIS REST backend logic with ObjectScript for GET, PUT, POST, and DELETE calls. Mostly manually ;) with some help from the Co-pilot in VSCode.
Tested the REST API manually with swagger-ui and after everything was ready to build the UI:
The UI was prompted with Lovable.dev tool which I fed with the following prompt:
Please create a modern, convenient UI vs. the following open API spec, which will allow list, create, update, and delete persons { "swagger":"2.0", "info":{ "title":"Person API," "version":"1.0.0" }, .... the whole swagger spec.
After it was built and tested (manually), I asked Lovable to direct it vs the REST API endpoint in IRIS. First, locally in Docker, and after testing and fixing a few bugs (via prompts), the result was deployed.
A few caveats and lessons learned:
REST API security on the IRIS side is not always clear from scratch (mostly because of CORS-related topics), e.g. I needed to add a special cors.cls and modify swagger spec manually to make CORS work.
Swagger documentation is not working automatically for docker in IRIS but it is fixable with special _spec endpoint and some objectscript code lines.
Swagger spec for IRIS should be 2.0, not the latest 3.1.
Other than that, this approach is quite an effective way for a backend IRIS developer to build comprehensive full-stack application prototypes in a very short time with zero knowledge of front-end development.
Share what you think. And what is your "vibe" coding development experience with IRIS?
Here is the video walkthrough:
Article
Eduard Lebedyuk · Jul 13, 2022
After almost four years on hiatus, [my CI/CD series](https://community.intersystems.com/post/continuous-delivery-your-intersystems-solution-using-gitlab-index) is back! Over the years, I have worked with several InterSystems clients, developing CI/CD pipelines for different use cases. I hope the information presented in this article will be helpful to someone.
This [series of articles](https://community.intersystems.com/post/continuous-delivery-your-intersystems-solution-using-gitlab-index) discusses several possible approaches toward software development with InterSystems technologies and GitLab.
We have an exciting range of topics to cover: today, let's talk about things beyond the code - namely configurations and data.
# Issue
Previously we discussed code promotions, and that was, in a way, stateless - we always go from a (presumably) empty instance to a complete codebase. But sometimes, we need to provide data or state. There are different data types:
- Configuration: users, web apps, LUTs, custom schemas, tasks, business partners, and many more
- Settings: environment-specific key-value pairs
- Data: reference tables and such often must be provided for your app to work
Let's discuss all these data types and how they can be first committed into source control and later deployed.
# Configuration
System configuration is spread across many different classes, but InterSystems IRIS can export most of them into XMLs. First of all, is a [Security package](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&PACKAGE=Security) containing information about:
- Web Applications
- DocDBs
- Domains
- Audit Events
- KMIPServers
- LDAP Configs
- Resources
- Roles
- SQL Privileges
- SSL Configs
- Services
- Users
All these classes provide Exists, Export, and Import methods, allowing you to move them between environments.
A few caveats:
- Users and SSL Configurations might contain sensitive information, such as passwords. It is generally NOT recommended to store them in source control for security reasons. Use Export/Import methods to facilitate one-off transfers.
- By default, Export/Import methods output everything in one file, which might not be source control friendly. Here's a [utility class](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) that can export and import Lookup Tables, Custom Schemas, Business Partners, Tasks, Credentials, and SSL Configuration. It exports one item per file, so you get a directory with LUT, another directory with Custom Schemas, and so on. For SSL Configurations, it also exports files: certificates and keys.
Also worth noting that instead of export/import, you can use [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer) or [Merge CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF) to create most of these. Both tools also support the creation of namespaces and databases. Merge CPF can adjust system settings, such as global buffer size.
## Tasks
[%SYS.Task](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYS.Task) class stores tasks and provides `ExportTasks` and `ImportTasks` methods. You can also check the utility class above to import and export tasks one by one. Note that when you import tasks, you can get import errors (`ERROR #7432: Start Date and Time must be after the current date and time`) if `StartDate` or other schedule-related properties are in the past. As a solution, set `LastSchedule` to `0`, and InterSystems IRIS would reschedule a newly imported task to run in the nearest future.
## Interoperability
Interoperability productions contain:
- Business Partners
- System Default Settings
- Credentials
- Lookup Tables
The first two are available in [Ens.Config](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&PACKAGE=Ens.Config) package with `%Export` and `%Import` methods. Export Credentials and Lookup Tables using the [utility class](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) above. In recent versions, Lookup Tables can be exported/imported via [$system.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) class.
# Settings
[System Default Settings](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other_default_settings#ECONFIG_other_default_settings_purpose) - is a default interoperability mechanism for environment-specific settings:
> The purpose of system default settings is to simplify the process of copying a production definition from one environment to another. In any production, the values of some settings are determined as part of the production design; these settings should usually be the same in all environments. Other settings, however, must be adjusted to the environment; these settings include file paths, port numbers, and so on.
>
> System default settings should specify only the values that are specific to the environment where InterSystems IRIS is installed. In contrast, the production definition should specify the values for settings that should be the same in all environments.
I highly recommend making use of them in production environments. Use [%Export](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Export) and [%Import](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Import) to transfer system default settings.
## Application Settings
Your application probably also uses settings. In that case, I recommend using System Default Settings. While it's an interoperability mechanism, settings can be accessed via: `%GetSetting(pProductionName, pItemName, pHostClassName, pTargetType, pSettingName, Output pValue)` ([docs](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting)). You can write a wrapper which would set the defaults you don't care about, for example:
```objectscript
ClassMethod GetSetting(name, Output value) As %Boolean [Codemode=expression]
{
##class(Ens.Config.DefaultSettings).%GetSetting("myAppName", "default", "default", , name, .value)
}
```
If you want more categories, you can also expose `pItemName` and/or `pHostClassName` arguments. Settings can be initially set by importing, using System Management Portal, creating objects of `Ens.Config.DefaultSettings` class, or setting `^Ens.Config.DefaultSettingsD` global.
My main advice here would be to keep settings in one place (it can be either System Default Settings or a custom solution), and the application must get the settings using only a provided API. This way application itself does not know about the environment and what's left is supplying centralized setting storage with environment-specific values. To do that, create a settings folder in your repository containing settings files, with file names the same as the environment branch names. Then during CI/CD phase, use the `$CI_COMMIT_BRANCH` [environment variable](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html) to load the correct file.
```
DEV.xml
TEST.xml
PROD.xml
```
If you have several settings files per environment, use folders named after environment branches. To get environment variable value from inside InterSystems IRIS [use](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.Util#GetEnviron) `$System.Util.GetEnviron("name")`.
# Data
If you want to make some data (reference tables, catalogs, etc.) available, you have several ways of doing it:
- Global export. Use either a binary [GOF export](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_managing#GGBL_managing_export) or a new XML export. With GOF export, remember that locales on source and target systems must match (or at least global collation must be available on the target system). [XML export](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) takes more space. You can improve it by exporting global into an `xml.gz` file, `$system.OBJ` methods automatically (un)archive `xml.gz` files as required. The main disadvantage of this approach is that data is not human-readable, even XML - most of it is base64 encoded.
- CSV. [Export CSV](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SQL.StatementResult#%25DisplayFormatted) and import it with [LOAD DATA](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_loaddata). I prefer CSV as it's the most storage-efficient human-readable format, which anything can import.
- JSON. Make class [JSON Enabled](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GJSON_adaptor).
- XML. Make class [XML Enabled](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GXMLPROJ_intro) to project objects into XML. Use it if your data has a complex structure.
Which format to choose depends on your use case. Here I listed the formats in the order of storage efficiency, but that's not a concern if you don't have a lot of data.
# Conclusions
State adds additional complexity for your CI/CD deployment pipelines, but InterSystems IRIS provides a vast array of tools to manage it.
# Links
- [Utility Class](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3)
- [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer)
- [Merge CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF)
- [$System.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ)
- [System Default Settings](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting) This is a great resource, nice work and a top chapter in this series for sure.
There seems to be different ways to approach declared IRIS state by codifying things, you can codify the exported objects and import them or like you mentioned, use the installer method that builds things as code.... which I have had pretty good success with in the past, like *Tasks* below.
```
1
pVars,pLogLevel,tInstaller
%Status
Excellent article! Thank you for taking the time to write this up :) A couple of comments:
1) I really like the idea of using Default Settings for application specific configuration ... that ties it in with existing import/export APIs and keeps things stored together nicely ... well done :)
2) The challenging thing with respect to reference / code tables is that directly exporting those will also export the local RowIDs for that data element, which can vary from environment to environment. InterSystems IRIS provides a new way to handle this using the XML Exchange functionality built into the product. Basically, when a persistent class extends %XML.Exchange.Adaptor it will ensure that GUIDs automatically get assigned to each data element, and that referenced objects are referenced in the exported XML by GUID rather than ID, which means that on import time it can ensure referential integrity by looking for the intended GUIDs in the imported object relationships. TrakCare uses this to expose its 1000+ code tables for source control and versioning and we use it in AppServices as well. Check it out: https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25XML.Exchange.Adaptor
Thanks again for this very comprehensive article about an important part of environment management :) Thanks, Ben!
%XML.Exchange.Adaptor sounds great.
And you're right, I'm mainly talking about the easiest scenario where there is no id/data drift. There are certainly trickier situations, where unique identifiers are required.
Announcement
Larry Finlayson · May 15
Developing with InterSystems Objects and SQL – In Person June 9-13, 2025
This 5-day course teaches programmers how to use the tools and techniques within the InterSystems® development environment.
Students develop a database application using object-oriented design, building different types of IRIS classes.
They learn how to store and retrieve data using Objects or SQL, and decide which approach is best for different use cases.
They write code using ObjectScript, Python, and SQL, with most exercises offering the choice between ObjectScript and Python, and some exercises requiring a specific language.
This course is applicable for users of InterSystems IRIS® data platform and InterSystems Caché®
Self-Register Here
Announcement
Larry Finlayson · Jun 23
Using InterSystems Embedded Analytics – Virtual July 14-18, 2025
Embed analytics capabilities in applications and create the supporting business intelligence cubes.
This 5-day course teaches developers and business intelligence users how to embed real-time analytics capabilities in their applications using InterSystems IRIS® Business Intelligence.
This course presents the basics of building data models from transactional data using the InterSystems IRIS BI Architect, exploring those models and building pivot tables and charts using the InterSystems IRIS BI Analyzer, as well as creating dashboards for presenting pivot tables, meters, and other interactive widgets.
The course also covers securing models, tools and elements (dashboards, pivot tables, etc.) using the InterSystems® security infrastructure. Additionally, the course presents topics such as customizing the User Portal, troubleshooting and deployment.
This course is applicable for users of InterSystems IRIS® data platform, InterSystems IRIS or Health™, and InterSystems DeepSee.
SELF REGISTER HERE
Announcement
Celeste Canzano · Jul 16
Hello Again,
InterSystems Certification is still looking for people to beta test the InterSystems IRIS SQL Professional Certification exam. This is a great way to earn the certification for free! We have extended the deadline of the beta test to August 31, 2025.
Please note, only candidates with the pre-existing InterSystems IRIS SQL Specialist certification are eligible to take the beta. For details, see the original announcement.
Thank you!
Announcement
Brad Nissenbaum · Jul 14
#InterSystems Demo Games entry
⏯️ Care Compass – InterSystems IRIS powered RAG AI assistant for Care Managers
Care Compass is a prototype AI assistant that helps caseworkers prioritize clients by analyzing clinical and social data. Using Retrieval Augmented Generation (RAG) and large language models, it generates narrative risk summaries, calculates dynamic risk scores, and recommends next steps. The goal is to reduce preventable ER visits and support early, informed interventions.
Presenters:🗣 @Brad.Nissenbaum, Sales Engineer, InterSystems🗣 @Andrew.Wardly, Sales Engineer, InterSystems🗣 @Fan.Ji, Solution Developer, InterSystems🗣 @Lynn.Wu, Sales Engineer, InterSystems
🔗 Related resources:
Care Compass application
Article
👉 Like this demo? Support the team by voting for it in the Demo Games!
Announcement
Stephan Mohr · Jul 17
#InterSystems Demo Games entry
⏯️ The Ultimate 3D Industrial Simulation powered by a Game Engine with InterSystems IRIS
In this demo, InterSystems IRIS Interoperability comes alive in an amazing, game-like user experience based on our Ultimate Control Tower demo. We visualize machines in a virtual 3D factory building, interacting with InterSystems IRIS in real time—displaying current statuses and sensor data, simulating machine outages and predictive maintenance scenarios, and triggering workflow tasks and actions in InterSystems IRIS. By using a mobile app on a tablet—and even a VR headset for a fully immersive experience—we unleash the power of InterSystems IRIS.
Presenters:🗣 @Stephan.Mohr, Sales Engineer, InterSystems🗣 @Jannis.Stegmann, Sales Engineer, InterSystems🗣 @Benjamin.Kiwitz, Intern, InterSystems🗣 @Tuba.Incedag, Intern, InterSystems
👉 Like this demo? Support the team by voting for it in the Demo Games!
Question
Harshitha Balakrishna · Jul 1
Hi everyone,
I'm working with JavaScript in InterSystems IRIS, specifically in CSP pages. One issue I'm running into during development is that the browser keeps loading the cached version of my JavaScript files, even after I’ve made changes or recompiled the code.I would have to clear my cache files or browser history for it to reload and work.
Is there a recommended way or best practice in IRIS to automatically clear or bypass the browser cache for JavaScript? Ideally, I’m looking for a way to ensure that the latest version of the script is always loaded without manually clearing the cache every time.
Any suggestions or tips would be greatly appreciated!
Thanks,Harshitha Balakrishna Are you supplying a cache-control header in your response? No I am not.
Question
Drew Holloway · Mar 12, 2020
Is there a way to query the database structure? In SSMS there are queries for finding tables with a column with a certain name (using LIKE). And there is the redgate tool SQL Search. But I'm not sure how to go about looking for columns that have say a value of 'PATID' and returning all tables that match. Does anyone know? Something like this may work:
SELECT parent FROM %Dictionary.CompiledProperty where name like 'Name' and NOT %ID %Startswith '%'
This will give you all tables that aren't % classes that have a "Name" property and if you prefer something more database-independent, you can use the standard INFORMATION_SCHEMA package:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'PATID%' It says I'm not priveleged for this operation. But thanks for letting me know. Thank you! This worked well! indeed, system schemas (whose name starts with a % sign) require certain privileges (that you quickly get used to once you have them :-) ). That's why I suggested querying the INFORMATION_SCHEMA
Announcement
Raju K · Nov 9, 2020
We have an immediate requirement for an experienced Intersystems Ensemble/Health Connect consultant to join our team with a good grounding in OO Programming, Healthcare Integration and at least 2 years experience with InterSystems Ensemble/Healthshare Health Connect
Question
Yuri Marx · May 13, 2022
Do you have cases using datadog to monitor intersystems products? We have used Datadog to produce some customer facing dashboards that provide an quick view of general server/application health as well as current license usage, number of Cache process, etc. Additional internal only dashboards allow customer support staff that don't have access to the mgmt portal to identify problematic queries, users with high latency, and other application specific issues which they can then research further if necessary. This is done via a %CSP.Page class that is is configured as the URL in the Datadog configuration. Documentation for that Datadog configuration is here.
Question
vignesh baskaran · Mar 1, 2022
Hi,
How to login Intersystems IRIS for Health SMP using SSO with OKTA auth. Please see my repository and code sample for this at: https://openexchange.intersystems.com/package/FHIROktaIntegration
Also check out videos I made at :
https://www.intersystems.com/resources/securing-fhir-applications-with-oauth
https://www.youtube.com/watch?v=VSnNbfNffT4
Question
Luis-Ángel Pérez-Ramos · Jun 21, 2019
Hi! I am working in a java project (Spring Boot+ Maven + Hibernate) using jpa/hibernate to manage the persistance with the IRIS database from the Docker image (store/intersystems/iris:2019.2.0.107.0-community) and I've found an issue using the IRIS instance, when I define tables with relationships OneToMany, ManyToOne or ManyToMany and I try to fetch all the rows of the tables using the default method findAll (JpaRepository implements that method to get all the rows by default) the query automatically exceeds the limit of licenses availables. I've tested the same query using a local IRIS instance with a regular license (InterSystems IRIS 2018.1 Enterprise - Concurrent Users for x86-64 (Microsoft Windows):250, Non-Production Instance) and works perfectly.Could be possible increase the number of licenses availables for the IRIS image in Docker? Thank you in advance! I think the limit is 5 concurrent users. Anyone can confirm? Hi Dmitry, It's true, it's not a problem of licenses, it's a problem of connections:Before the select: only 1 connection used.When the project execute the findAll query: Connections used = 5It seems like a problem with the connection pool manager, it reserves connections for each query and when the connections achieve the maximum the execution is blockade. Could you share your Java code? Sure! You have it available here:https://github.com/es-comunidad-intersystems/webinar-multimodelo/tree/master/jdbc-jpa-restIt's a MAVEN project so you only need MAVEN installed in your PC and modify the actions.properties to define the parameters to access to the database. The default value for connection pool size on boot is usually 10. You may want to set this value to 1 or 2 for testing purposes (if using the IRIS community version). Hi Warlin! thank you for your answer, I tried modifying the connection pool size to 1, 2 and 3 and the problem continued. Which value did you modify? The pool size takes couple values into account.Which connection pooling are you using? If using default boot one it's Hikari and the value to change should be maximumPoolSize I've modified spring.datasource.hikari.maximumPoolSize values (with differents values 1, 2, 3 and 4) and when the application execute a findAll or a query without the clause WHERE the execution is blockade.In theory there are 2 free connections but the error returned is:org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection so, my application.propertiesin this case, I have only 4 connections on the server, without any issues with licenses
spring.datasource.driverClassName = com.intersystems.jdbc.IRISDriver
spring.datasource.url = jdbc:IRIS://127.0.0.1:9091/USER
spring.datasource.username = _SYSTEM
spring.datasource.password = 1234
spring.datasource.testOnBorrow = true
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.minEvictableIdleTimeMillis = 30000
spring.datasource.validationQuery = SELECT 1
spring.datasource.max-wait = 8000
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.InterSystemsIRISDialect
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false = false
spring.datasource.hikari.maximumPoolSize = 4
Yes, it is, but in this case, it exceeded connections limit for one license unit and it is even just only 4 in comparing with 25 for ordinary versions.And I think this message in the log should be changed to be more clear. Another issue, here
USER> Write $SYSTEM.License.MaxConnections()
25
25 connections for ordinary version, but Community Edition, has only 4 connections and fails to start more.
And another problem is that reaching connections limit for just one user, changes state of the instance as with warn
root@d5eaa844235c:/# iris list
Configuration 'IRIS' (default)
directory: /usr/irissys
versionid: 2019.2.0.107.0com
datadir: /dur/config
conf file: iris.cpf (SuperServer port = 51773, WebServer = 52773)
status: running, since Tue Jun 25 13:00:11 2019
state: warn
product: InterSystems IRIS
And this state used for HEALTHCHECK of the container, so, this container became as Unhealthy, which means in production such container should be killed, even it is actually in good condition.
$ docker-compose ps
Name Command State
---------------------------------------------------------------
jdbc-jpa-rest_iris_1 /iris-main Up (unhealthy)
I don't see any realation between license capacity and how you describe you use it. Is it possible to get some reproducible excerpt which would prove what you said?