查找

公告
· 七月 28

InterSystems 2025 开发者竞赛:Tool(工具)

Hi 开发者们,

我们很高兴地宣布,将举办一场全新的 InterSystems 在线编程竞赛,本次竞赛旨在开发实用工具,让各位同行开发者的日常工作更加轻松便捷:

🏆 InterSystems 2025 开发者竞赛:Tool(工具) 🏆

时间: 2025年7月14日-8月3日(美国东部时间)

奖金池: $12,000


竞赛主题

开发任何能够提升开发者使用IRIS体验的应用程序,助力开发者更高效地开发,编写出更优质的代码,并便于测试、部署、支持或监控基于InterSystems IRIS的解决方案。

一般要求:

  1. 应用程序或库必须功能完备。它不应是已有库的简单导入或直接接口(C++除外,为IRIS创建接口确实需要大量工作)。同时,它也不应是现有应用程序或库的复制粘贴。
  2. 接受的应用程序包括:全新开发或已在Open Exchange上发布但有显著改进的应用。我们的团队将在批准参赛前对所有应用程序进行审核。
  3. 应用程序应能在IRIS Community Edition或IRIS for Health Community Edition上运行。这两个版本均可从Evaluation site 下载主机版(Mac、Windows),或从InterSystems Container Registry 或社区容器中拉取容器版使用:intersystemsdc/iris-community:latest 或 intersystemsdc/irishealth-community:latest。
  4. 应用程序应为开源,并发布在GitHub或GitLab上。
  5. 应用程序的README文件应为英文,包含安装步骤,以及应用程序的工作原理视频演示或描述。
  6. 每位开发者最多可提交3个作品。

注意:我们的专家将根据复杂性和实用性标准,对应用程序是否批准参赛拥有最终决定权。他们的决定是最终且不可上诉的

奖品

1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出。

🥇 第一名 - 5,000美元

🥈 第二名 - 2,500美元

🥉 第三名 - 1,000美元

🏅 第四名 - 500美元

🏅 第五名 - 300美元

🌟 第六至十名 - 各100美元

 

2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用。

🥇 第一名 - 1,000美元

🥈 第二名 - 600美元

🥉 第三名 - 300美元

🏅 第四名 - 200美元

🏅 第五名 - 100美元

❗ 若多名参与者获得相同票数,则均视为获奖者,奖金由获奖者平分。
❗ 现金奖励仅发放给能验证身份的获奖者。如有疑问,组织者将联系并要求提供额外信息。

 

谁可以参加?

任何开发人员社区成员,InterSystems 员工除外。 创建一个帐户!

👥开发人员可以组队创建协作应用程序。一个团队允许 2 到 5 名开发人员。

不要忘记在应用程序的自述文件中突出显示您的团队成员——DC 用户配置文件。

 

重要截止日期:

🛠 应用开发和注册阶段:

  • 2025 年 7 月 14 日(美国东部时间 00:00):比赛开始。
  • 2025 年 7 月 27 日(美国东部时间 23:59):提交截止日期。

✅  投票时间:

  • 2025 年 7 月 28 日(美国东部时间 00:00):投票开始。
  • 2025 年 8 月 3 日(美国东部时间 23:59):投票结束。

注意:开发者可在整个注册和投票期间改进应用程序。

    实用资源:

    ✓ 示例应用程序:

    ✓ 我们建议从以下模板开始:

    ✓ 对于 IRIS 初学者:

    ✓ 对于 ObjectScript Package Manager (IPM) 初学者:

    ✓ 如何提交您的应用程序参加比赛:

    需要帮助?

    加入 InterSystems 的Discord server上的竞赛频道或在本文的评论中与我们交谈。

    我们迫不及待地想看到您的项目!祝你好运👍


    By participating in this contest, you agree to the competition terms laid out here. Please read them carefully before proceeding.

    文章
    · 七月 28 阅读大约需 5 分钟

    Introducing typeorm-iris: TypeORM for InterSystems IRIS from Node.js

    Overview

    The typeorm-iris project provides experimental support for integrating TypeORM with InterSystems IRIS, enabling developers to interact with IRIS using TypeORM’s well-known decorators and repository abstractions. This allows a more familiar development experience for JavaScript and TypeScript developers building Node.js applications with IRIS as the backend database.

    TypeORM MongoDB Review. I recently started using TypeORM in a… | by Eliezer  Steinbock | Medium

    While the project implements key integration points with TypeORM and supports basic entity operations, it’s not yet battle-tested or suitable for production environments.

    Why typeorm-iris?

    The official InterSystems IRIS Node.js driver does not provide native SQL query execution in the way that other database drivers (e.g., for PostgreSQL or MySQL) do. Instead, you must use an ObjectScript-based API (e.g., %SQL.Statement) to prepare and execute SQL commands.

    This becomes problematic when building modern applications that rely on Object-Relational Mapping (ORM) tools like TypeORM. TypeORM expects a lower-level driver capable of preparing and executing raw SQL in a single connection session, which is not currently available with IRIS’s JavaScript tooling.

    To overcome these limitations, typeorm-iris implements the necessary pieces to bridge IRIS and TypeORM, using the available ObjectScript SQL execution interfaces under the hood.

    Early Stage & Known Issues

    This project is in its initial phase and has only been tested with a limited number of cases. Expect instability, missing features, and breaking changes in future iterations.

    Notable limitations observed during development include:

    1. Excessive Network Roundtrips

    Executing SQL through the %SQL.Statement class from JavaScript involves multiple network messages between the Node.js process and the IRIS server. For example, a single logical SQL operation may require multiple steps like:

    • Preparing the statement
    • Executing the query
    • Fetching metadata
    • Fetching rows individually

    Each of these can result in separate messages over the network, resulting in significantly more overhead compared to using a native SQL driver.

    2. No True Async/Parallel Support

    The official IRIS Node.js driver does not support asynchronous usage in a multithreaded or worker-based context:

    • Reconnecting in the same process often fails or causes unpredictable behavior.
    • Spawning worker threads and using the driver inside them leads to issues.
    • Only one connection per process works reliably.

    These constraints make it unsuitable for modern concurrent Node.js applications. In practice, this limits how well the driver can scale with concurrent workloads, and it significantly restricts architectural choices.

    Usage Guide

    Due to usage of latest IRIS SQL Fatures requires IRIS 2025.1+ to work.

    You can install typeorm-iris via npm:

    npm install typeorm-iris

    Because this driver is not officially supported by TypeORM, using it requires a workaround for setting up the DataSource. You cannot directly use new DataSource() or createConnection() as you would with official drivers.

    Custom DataSource Setup

    import { IRISDataSource, IRISConnectionOptions } from "typeorm-iris"
    
    const dataSourceOptions: IRISConnectionOptions = {
        name: "iris",
        type: "iris",
        host: "localhost",
        port: 1972,
        username: "_SYSTEM",
        password: "SYS",
        namespace: "USER",
        logging: true,
        dropSchema: true,
    }
    
    export function createDataSource(options: any): IRISDataSource {
        // @ts-ignore
        const dataSource = new IRISDataSource({ ...dataSourceOptions, ...options })
        return dataSource
    }

    Once initialized, you can use TypeORM decorators as usual:

    import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
    
    @Entity()
    export class User {
        @PrimaryGeneratedColumn()
        id: number
    
        @Column()
        name: string
    
        @Column()
        email: string
    }

    Using repositories works similarly:

    const userRepository = dataSource.getRepository(User)
    const newUser = userRepository.create({ name: "Alice", email: "alice@example.com" })
    await userRepository.save(newUser)

    Sample Projects

    The GitHub repository includes a sample/ folder with several fully working examples:

    • sample1-simple-entity
    • sample2-one-to-one
    • sample3-many-to-one
    • sample4-many-to-many
    • sample16-indexes

    These cover basic persistence, relationships, and schema features, offering practical usage demonstrations.

    Unit Tests

    Initial testing includes the following use cases:

    Entity Model

    • should save successfully and use static methods successfully
    • should reload given entity successfully
    • should reload exactly the same entity
    • should upsert successfully

    Entity Schema > Indices

    • basic

    Persistence

    • basic functionality
    • entity updation
    • insert > update-relation-columns-after-insertion
    • many-to-many
    • one-to-one

    These tests are limited in scope and more coverage will be added as the project matures.

    Supported Features

    • Entity decorators: @Entity(), @Column(), @PrimaryGeneratedColumn()
    • Repositories: create, save, find, delete, etc.
    • Schema drop and sync (experimental)
    • Partial support for relations and custom queries

    Again, these features are early-stage and may not cover the full range of TypeORM’s capabilities.

    Real-World Constraints

    InterSystems IRIS Node.js Driver Limitations

    • Only one usable connection per process
    • No proper support for parallel operations or threading
    • Lack of native SQL API support (via SQL protocol)
    • Heavy reliance on message-based communication using proprietary protocol

    Until InterSystems updates the official driver with support for proper SQL execution and concurrent operations, this project will be fundamentally limited in terms of performance and scalability.

    Feedback & Contribution

    As this is an experimental driver, your feedback is crucial. Whether you're trying it out for a small side project or evaluating it for broader use, please share issues and suggestions on GitHub:

    ➡️ github.com/caretdev/typeorm-iris/issues

    Pull requests, test cases, and documentation improvements are welcome.

    What's Next

    Planned future improvements include:

    • Expanding test coverage for real-world queries and schema designs
    • Handling more TypeORM query builder features
    • Investigating batching optimizations
    • Improving schema introspection for migrations

    Conclusion

    typeorm-iris brings much-needed TypeORM support to InterSystems IRIS for Node.js developers. While it’s not production-ready today and inherits severe limitations from the current driver infrastructure, it provides a foundation for further experimentation and potentially wider adoption in the IRIS developer community.

    If you're an IRIS developer looking to integrate with a modern Node.js backend using TypeORM, this is the starting point.

    And if you found this useful, please vote for it in the InterSystems Developer Tools Contest!

    10 Comments
    讨论 (10)3
    登录或注册以继续
    摘要
    · 七月 28
    文章
    · 七月 27 阅读大约需 3 分钟

    JDBCログの取得方法

    これは InterSystems FAQ サイトの記事です。
     

    JDBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。

    そのような場合にJDBCドライバのクライアントログを取得することで、エラーについての詳細情報を取得することができます。

    JDBCログの取得方法については以下をご参照ください。

    JDBCのログ

    ログを指定する際に、ディレクトリ名を含まずに直接ファイル名を指定した場合、そのアプリケーションのディレクトリにその指定したファイル名でログが出力されます。

    ODBCログの様にPID毎に取得する方法は用意されていません。

    JDBCログが正常に取得できている場合、以下の様な内容が書き込まれます。

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    	Started At:     2025/03/27 11:52:16
    	Driver Name:    com.intersystems.jdbc.IRISDriver
    	Jar File Name:  intersystems-jdbc-3.9.0.jar
    	Client Version: 3.9.0.0
    	Compiled At:    3 June, 2024 at 07:34PM UTC
    	JDBC Version:   4.2
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    
    Sent: (03/27/25-11:52:16:156) [ThreadID = 1 ] [JobNumber = -1 ] [DeviceID = 1212899836 ]
    Header:
      0000:  02  00  00  00  01  00  00  00  00  00  00  00  48  53      ............HS
    Message:
      0000:  43  00                                                      C.
    
    
    Received: (03/27/25-11:52:16:199) [ThreadID = 1 ] [JobNumber = -1 ] [DeviceID = 1212899836 ]
    Header:
      0000:  0D  00  00  00  01  00  00  00  00  00  00  00  00  00      ..............
    Message:
      0000:  43  00  01  00  09  01  55  6E  69  63  6F  64  65          C.....Unicode
    
    
    Sent: (03/27/25-11:52:16:199) [ThreadID = 1 ] [JobNumber = -1 ] [DeviceID = 1212899836 ]
    Header:
      0000:  C5  00  00  00  03  00  00  00  00  00  00  00  43  4E      ............CN
    Message:
      0000:  06  01  55  53  45  52  09  01  59  78  BA  FA  5C  3B      ..USER..Yx..\;
      000E:  DF  05  01  9E  FF  DE  0A  01  68  73  61  74  6F  63      ........hsatoc
      001C:  74  72  1C  01  6A  70  37  33  32  30  6E  6F  6E  6F      tr..jp7320nono
      002A:  2E  69  73  63  69  6E  74  65  72  6E  61  6C  2E  63      .iscinternal.c
      0038:  6F  6D  05  01  41  70  70  6F  01  06  01  4A  44  42      om..Appo...JDB
      0046:  43  1D  01  69  6E  74  65  72  73  79  73  74  65  6D      C..InterSystems
      0054:  73  2D  6A  64  62  63  2D  33  2E  39  2E  30  2E  6A      s-jdbc-3.9.0.j
      0062:  61  72  09  01  33  2E  39  2E  30  2E  30  11  01  4D      ar..3.9.0.0..M
      0070:  61  63  20  4F  53  20  58  5C  31  35  2E  33  2E  32      ac OS X\15.3.2
      007E:  30  01  4A  61  76  61  20  48  6F  74  53  70  6F  74      0.Java HotSpot
      008C:  28  54  4D  29  20  36  34  2D  42  69  74  20  53  65      (TM) 64-Bit Se
      009A:  72  76  65  72  20  56  4D  5C  32  33  2E  30  2E  31      rver VM\23.0.1
      00A8:  2B  31  31  2D  33  39  0B  01  53  48  4D  7C  7C  7C      +11-39..SHM|||
      00B6:  7C  7C  31  03  01  00  03  04  01  03  04  01  03  04      ||1...........
      00C4:  3B                                                          ;
    
    


    ログの内容の解析は専門的な知識が必要となりますので、取得後インターシステムズサポートセンターまでお送りください。

    讨论 (0)1
    登录或注册以继续