Nueva publicación

查找

Artículo
· 1 jun, 2025 Lectura de 5 min

ロックテーブルの参照方法とその見方

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

ロックテーブルを参照する方法として、主に以下の3つの方法が挙げられます。

1. 管理ポータルで参照する方法
 ⇒ 管理ポータル:システムオペレーション > ロック > ロックを表示(または管理)

2. ^LOCKTAB ユーティリティ を使用する方法
 ⇒ %SYS> do ^LOCKTAB

3. プログラムで参照する方法
 ⇒ プログラム内でロック情報を取得する方法


こちらの記事では、ロックテーブルで参照できる情報について、以下の3つのケースに分けて、かかるロックとその意味をご説明します。

1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照した状態
2.デッドロックとなった状態
3.テーブルロックがかかった状態


目視で一番わかり易いのは、1の 管理ポータルで参照する方法 になるので、こちらで説明したいと思います。

最初に、
1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照をすると、どのようなロックがかかるのか見ていきます。

a. プロセスA(PID=10044)にてトランザクションで、Sample.Personテーブルの ID=1 を更新します。    ⇒ Exclusive_e->Delock ロック

[SQL]TL1:USER>>update Sample.Person(Name) values('bbb') where ID=1

b. プロセスB(PID=46952)にて、Sample.Personテーブルの ID=1 を更新します。     ⇒ WaitExclusiveExact ロック
 → ロックタイムアウト後(既定10秒)、[SQLCODE: <-110>:<ファイル中にロック競合が発生しました>] エラーが返ります。

[SQL]USER>>update Sample.Person(Name) values('ccc') where ID=1

c. プロセスC(PID=45680)にて、read commit モード で、Sample.Personテーブルの ID=1 を参照します。     ⇒ WaitSharedExact ロック
 → ロックタイムアウト後(既定10秒)、[SQLCODE: <-114>:<ひとつまたはそれ以上のマッチする行が別のユーザによりロックされています>] エラーが返ります。

[SQL]USER>>set transaction isolation level read committed
[SQL]USER>>select * from Sample.Person where ID=1


管理ポータルでロックテーブル情報を見てみます。青四角がそれそれでの持しているロックになります。
※複数の増分ロックがかかっているときは、「Exclusive/5」のように、ロック数も表示されます。1つのロックの時は表示されません。


次に、
2.デッドロックが発生しているとき、どのようなロックの状態になるのか見てみます。

1. プロセス A(PID:43468) で次のコマンドを発行します : lock +^MyGlobal(15)
2. プロセス B(PID:2198) で次のコマンドを発行します  : lock +^MyOtherGlobal(15)
3. プロセス A で次のコマンドを発行します : lock +^MyOtherGlobal(15)
   ⇒ この LOCK コマンドは返りません。このプロセスは、プロセス B がロックを解放するまでブロックされます。
4. プロセス B で次のコマンドを発行します : lock +^MyGlobal(15)
   ⇒ この LOCK コマンドも返りません。このプロセスは、プロセス A がロックを解放するまでブロックされます。

プロセスA、プロセスB、ともにロックの解放待ちで、応答が返らない状態(デッドロック)になりました。


管理ポータルでロックテーブル情報を見てみます。

プロセスA(PID:43468)
 ・^MyGlobal(15) に対する Exclusive(排他ロック)を保持
 ・^MyOtherGlobal(15) に対し、WaitExclusiveExactで同一ロックに対する排他ロックの待機(ロック解放待ち)

プロセスB(PID:2198)
 ・^MyOtherGlobal(15) に対する Exclusive(排他ロック)を保持
 ・^MyGlobal(15) に対し、WaitExclusiveExactで同一ロックに対する排他ロックの待機(ロック解放待ち)

お互いに、それぞれが保持しているロックの解放待ちで、デッドロック状態となっていることが分かります。
 

デッドロックを防止するには以下のような方法があります。

  • 常に timeout 引数を使用する。
  • 増分 LOCK コマンドを発行する際にその順序に関して厳格なプロトコルに従う。すべてのプロセスが、ロック名に関して同じ順序に従っている限り、デッドロックが発生することはありません。単純なプロトコルは、照合順序でロックを追加するものです。
  • 増分ロックではなく単純ロックを使用する (つまり、+ 演算子を使用しない)。前述のとおり、単純ロックでは、LOCK コマンドは最初に、プロセスによって以前から保持されていたすべてのロックを解放します (ただし、実際には単純ロックはあまり使用されません)。


最後に、
3.テーブルロックがかかった状態では、どのようなロックがかかるのか見ていきます。

今回は、Create Table で作成した、SQLUser.tab1 テーブルで実験してみます。
現在、ロック閾値 が 1000(デフォルト) なので、トランザクションでそれ以上の更新をしてみます。

1回目の Insert で、「Exclusive_e->Delock」のロックが1つかかっているのが分かります。

2回目の Insert で、「Exclusive_e->Delock」のロックが2つになったのが分かります。 

1001回目の Insert では、テーブルロック閾値(1000)を超えたために、「Exclusive/1001E->Delock」というテーブルロックにまとめられたことが分かります。

 

    今回は、管理ポータルで参照する方法をご紹介しましたが、^LOCKTABユーティリティ や、プログラムで取得する方法 でも、同様の情報を見ることが可能です。

    なお、正常に終了したプロセスは取得していたロックを全て解放します。


    enlightened【ご参考】
    InterSystems製品のロックの基本

    Comentarios (0)0
    Inicie sesión o regístrese para continuar
    Pregunta
    · 1 jun, 2025

    Primary startup failed, failed to read header ..... during Failover

    I am attempting to failover my TEST environment to the Backup, and I keep getting an error stating that 

    06/01/25-18:47:54:516 (11864) 1 [Utility.Event] Primary startup failed, failed to read header of /archive/journal/MIRROR-IRISTEST-20250513.007 (file #63653)

    however, when I go to /archive/journal/, I am not finding any record of MIRROR-IRISTEST-20250513.007 (file #63653)

    to get out of this error message I have to restart what was the Primary and restart the Backup to get it back into a state that we can use it. 

    There is a Namespace/Database that is on the backup and not part of the mirror, which I need to get moved to being mirrored across all the instances of our TEST environment.

    Any idea why it is thinking that /archive/journal/MIRROR-IRISTEST-20250513.007 (file #63653) still exists, and it needs to read from it?
     

    1 Comentario
    Comentarios (1)1
    Inicie sesión o regístrese para continuar
    Anuncio
    · 1 jun, 2025

    Developer Community Recap, May 2025

    Hello and welcome to the May 2025 Developer Community Recap.
    General Stats
    142 new posts published in May:
     33 new articles
     47 new announcements
     60 new questions
     2 new discussions
    412 new members joined in May
    14,991 posts published all time
    16,408 members joined all time
    Top posts
    Top authors of the month
    Articles
    #InterSystems IRIS
    Ladies and Gentlemen, the amazing Iris-nator
    By Kurro Lopez
    Minify XML in IRIS
    By Enrico Parisi
    Reviews on Open Exchange - #51
    By Robert Cemper
    How to produce and consume RabbitMQ messages on IRIS
    By Yuri Marx
    How to remove special characters (Unicode Characters) from text
    By Padmaja Konduru
    IRIS iRacing
    By sween
    Long Running SQL Queries: a sample exploration
    By Ben Schlanger
    Creating a cross-regional DR Async with IKO
    By Sam Ferguson
    Building the UI by Prompting vs InterSystems IRIS Backend: Lovable, Spec First and REST API
    By Evgeny Shvarov
    An Overview of Database Degrade
    By Neil Shah
    Using %System.Monitor.LineByLine together with %SYS.MONLBL to analyze your code
    By Daniel Kutac
    A Dive into Debugging Embedded Python
    By Shuheng Liu
    A knockout of weight
    By Andre Larsen Barbosa
    codemonitor.MonLBL - Line-by-Line ObjectScript Code Monitoring
    By Lorenzo Scalese
    Creating a Document Database
    By Kate Lau
    Multilingual GenerativeAI Pattern Match WorkBench Utility
    By Alex Woodhead
    Integrate with Google Forms
    By Yuri Marx
    Use Mako Python template engine to generate dynamic content
    By Yuri Marx
    Making Sense of Blood Tests with FHIRInsight: Turning FHIR into Clarity
    By Henry Pereira
    How to manage in a CI/CD pipeline an InterSystems API Manager configuration ?
    By Sylvain Guilbaud
    hc-export-editor: Making Interface Changes to Exports Before Deploying to Prod
    By Eric Fortenberry
    Introducing LEAD North's CCD Data Profiling Tool
    By Landon Minor
     
    #InterSystems IRIS for Health
     
    #TrakCare
     
    #Other
     
    #Open Exchange
     
    Announcements
    #InterSystems IRIS
    [Video] Using Embedded Python in the BPL and DTL Editors
    By Adam Coppola
    [Video] Prompt the frontend UI for InterSystems IRIS with Lovable
    By Anastasia Dyubaylo
    Cambridge Developer Meetup - AI Coding Assistants & MCP [May 14 2025]
    By Liubov Zelenskaia
    [Video] Data Fabric in Practice: Lessons Learned
    By Anastasia Dyubaylo
    Do you have the InterSystems IRIS SQL Specialist certification? Beta testers needed for our upcoming InterSystems IRIS SQL Professional certification exam
    By Celeste Canzano
    InterSystems IRIS Development Professional Exam is now LIVE!
    By Celeste Canzano
    Developing with InterSystems Objects and SQL – In Person June 9-13, 2025 / Registration space available
    By Larry Finlayson
    GitHub Action IRIS Deployer
    By Cristiano Silva
    Do you have any openings for InterSystems developer Job
    By AYUSH Shetty
    InterSystems Platforms Update Q2-2025
    By Bob Kuszewski
    New Point Release for IRIS 2025.1.0: Critical Interoperability Fix
    By Daniel Palevski
    [Webinar] Unlocking the Power of InterSystems Data Fabric Studio
    By Anastasia Dyubaylo
    SQL DATA LENS Now FREE for Use with InterSystems IRIS Community Edition!
    By Andreas Schneider
    Hebrew Webinar: Discover the All-New UI in Version 2025.1 — and More!
    By Ronnie Hershkovitz
     
    #Developer Community Official
     
    #Open Exchange
     
    #InterSystems IRIS for Health
     
    #Summit
     
    #IRIS contest
     
    #HealthShare
     
    #Other
     
    #Learning Portal
     
    #InterSystems Ideas Portal
    InterSystems Ideas News #22
    By Irène Mykhailova
     
    #InterSystems Official
    IKO 3.8 Release
    By Bob Kuszewski
     
    Questions
    #InterSystems IRIS
    Embedded Python query
    By Touggourt
    Best Practice for Existing ODBC Connection When System Becomes IRIS for HealthShare
    By Fraser J. Hunter
    SQLCODE: -99 when executing dynamic SQL on specific properties
    By Martin Nielsen
    Rule Editor Login Credentials Issue in Community Edition
    By Juan Mota Sanchez
    Problem exporting %Library.DynamicObject to JSON with %JSON.Adaptor
    By Marcio Coelho
    Task Scheduler - Output to file
    By Scott Roth
    InterSystems HL7 Interface Specialist certificate test
    By Yuhong Snyder
    Troubleshooting REST Operation
    By Scott Roth
    How to prevent reentrancy inside same process ?
    By Norman W. Freeman
    Actual Use Cases for %Stream.DynamicBinary and %Stream.DynamicCharacter
    By Ashok Kumar T
    How can I call $System.OBJ.Load() from a linux shell script? (Or $System.OBJ.Import, instead)
    By AC Freitas
    How to delete table column with its data with SQL command. I need the exact syntax of the command
    By Dmitrij Vladimirov
    Using assign in a routing rule using XML
    By Ewan Whyte
    Embedded SQL result issues inside %ZLANGC routine
    By Ashok Kumar T
    Age Calculator in BPL
    By Saju Abraham
    JSON - is key defined?
    By Scott Roth
    Problem deploying to a namespace
    By Anthony Decorte
    Error Handling Server to Client Side - Best Practices
    By Michael Davidovich
    ERROR #5883: Item '%Test' is mapped from a database that you do not have write permission on
    By Jonathan Perry
    Outbound HL7 HTTP Messaging - Unsupported Media Type
    By Scott Roth
    Append a string in a update query
    By Jude Mukkadayil
    Task manager in async mirror behavior
    By Yaron Munz
    Take subroutines from the Deployed Mode Routine
    By Ashok Kumar T
    %JSON.Adaptor compilation issues under array-of-streams and computed property types
    By Geoffrey Lu
    REST API Issue
    By Anil Mathew
    BI Analytics default key:value pair in termlist
    By Dmitrij Vladimirov
    %Stream files do not get purged from the /stream/ folder on the system disk
    By Martin Nielsen
    Poor database write performance
    By Norman W. Freeman
    Users in write only
    By Pietro Montorfano
    How to override the port used on a SOAP operation
    By Ryan Hulslander
    Download
    By chris Janidas
    Subscript indirection behaves differently in if statement
    By Ashok Kumar T
    CSP WebApp - IIS
    By Patrik Spisak
    No whens matched and no otherwise defined
    By Avishek Singh
    SQL Query returns with OFFSET
    By Fabio Care
    How to programmatically create SQL Gateway Connection?
    By Jani Hurskainen
    How to use EnsLib.SQL.InboundAdapter in IRIS tables
    By Kurro Lopez
    What is the global ^Ens.AppData and is it secure kill it?
    By Yuri Marx
    JSON - Field extraction using Object Script
    By Scott Roth
    How to reset the Web Gateway management Password
    By Thembelani Mlalazi
    Prompt Engineering for ollama-ai-iris
    By Oliver Wilms
    How can I configure InterSystems ObjectScript Source Control with a client-side workspace in VS Code?
    By Ricardo Alves dos Santos
    Azure OpenAI %Embedding.Config
    By Henry Pereira
    Production Validator - Case Study
    By Satya Prasad Kalam
     
    #InterSystems IRIS for Health
     
    #Caché
     
    #TrakCare
     
    #Health Connect
     
    #HealthShare
     
    #Ensemble
     
    Discussions
    #InterSystems IRIS
     
    #Global Masters
     
    May, 2025Month at a GlanceInterSystems Developer Community
    Comentarios (0)1
    Inicie sesión o regístrese para continuar
    Artículo
    · 1 jun, 2025 Lectura de 18 min

    ¡POLICIA POLICIA! ¡¡Hay un intruso!! (Notificaciones Telegram y manejo URLs OAUTH2)

    Buenas a todos,

    en capítulos anteriores, vimos como "Proteger los datos: Se un mejor cerrajero", en el que explicábamos como proteger nuestros recursos aplicando un control extra al acceso mediante OAUTH2 que nos ofrece Intersystems. Y como no hay 2 sin 3, aquí tenemos un tercer articulo, en el cual vamos a explicar como "avisar a la policía" de que alguien malicioso está intentando acceder a nuestros datos.

    Al finalizar el mismo, comentábamos que si quisiéramos podríamos tener un mayor control de estos accesos incorrectos y esto nos lleva a este artículo, por lo que seguiremos el siguiente índice, en el cual podréis encontrar todos los apartados en formato tutorial, de forma que siguiendo paso a paso lograreis llegar al objetivo:

    1.- Introducción

       1.1.- De donde venimos

    2.- Configuración del "091" 

    2.1.- Arquitectura de las alertas

    2.2.- ¿Quién es quién?

           2.2.1.- Operación
           2.2.2.- Proceso

       2.3.- ¿Qué es un bot de telegram?  

           2.3.1.- Bot  
           2.3.2.- Grupos
           2.3.3.- Configuración de la alerta

    3.- Actualización de consulta de usuario

    3.1.- Usuario de nuestro token por Endpoints Relacionados con Autenticación (OAUTH)

    3.2.- Endpoints útiles para OAUTH

           3.3.1.- token
           3.3.2.- introspection
           3.3.3.- registration
           3.3.4.- revocation

     

    1.- Introducción

    1.1.- De donde venimos

    En el articulo anterior (Proteger los datos: Se un mejor cerrajero) explicábamos como conocer el usuario ("2.1.- ¿Cómo funciona la llave (Token)?") mediante el uso de JWT extrayendo el parámetro "aud" y en base a este valor validábamos por LookUp Table su permiso de acceso a unos recursos o no. Si un usuario no esta autorizado a acceder a determinados recursos, necesitamos saber de estos intentos maliciosos de acceso para poder actuar.

    En los siguientes pasos explicaremos la configuración de las alertas por mensajería push así como mejorar la obtención del usuario y mas funciones de las URLS de OAUTH2.

    Estas alertas por mensajería push las realizaremos por medio de Telegram, aplicación de mensajería instantánea que nos permite recibir mensajes de texto en tiempo real. Este es el gran punto a su favor para esta situación, pues en el mismo momento que ocurra un intento indebido de acceso a nuestros recursos, lo sabremos y podremos actuar lo antes posible para proteger nuestros datos. Al mismo tiempo, al utilizar una aplicación de este tipo, podremos recibir la notificación en cualquier lugar del mundo, pues, mientras tengamos conexión a internet, esta notificación nos va a llegar. 

    Con todo esto, ¡VAMOS AL LIO!

    2.- Configuración del "091" 

       2.1.- Arquitectura de las alertas



    Partimos de un esquema como el mostrado, donde queremos generar un aviso a nuestro dispositivo móvil en el momento en el que detectemos que hay algún problema, en este caso, un acceso indebido a nuestros recursos.

    Por lo tanto, teniendo ya montada nuestra integración, lo que vamos a hacer ahora es añadir un modulo de alertas para Telegram. Este modulo consistirá en 2 componentes principales:

    Nombre del Componente

    Descripción del Componente

    Operaciones.Notificaciones.Telegram

    Operación preconfigurada para realizar notificaciones urgentes vía Telegram desde el ESB.

    Proceso.Notificaciones.Telegram

    Proceso que orquestará los diferentes tipos de notificaciones REST vía Telegram.

     

    2.2.- ¿Quién es quién?

    2.2.1.- Operación
    Nuestra operación de envío de alertas a Telegram realizará notificaciones REST vía Telegram. Esta operación “simulara” ser un bot en la aplicación de Telegram y desde el ESB se controlará este bot, que emitirá las notificaciones a los grupos y/o personas según los acuerdos alcanzados para cada caso. Estas notificaciones serán inmediatas pudiendo aplicar un control temporal para no saturar los dispositivos móviles de las personas notificadas.

    Estas notificaciones podrán sustituir y/o complementar a las alertas ya vigentes (correo electrónico). Ya que su objetivo es que las personas responsables de cada aplicativo sean informadas lo antes posible de problemas ocurridos.

    2.2.2.- Proceso
    Nuestro proceso orquestará la configuración y parametrización de las notificaciones REST vía Telegram. Las diferentes casuísticas que consideremos realizarán llamadas a este proceso enviando la información solicitada para cada caso y este proceso preparará los mensajes personalizados para cada caso.

    Llegados a este punto, sabemos que vamos a utilizar una operación rest para notificar vía Telegram, pero nos queda explicar lo mas importante, ¿Qué es un bot de telegram? A continuación lo explicamos.

     

    2.3.- ¿Qué es un bot de telegram?

    Para la notificación instantánea de mensajería que se pretende implantar haremos uso de una de las principales funcionalidades de código abierto que nos da la API de Telegram como es la creación y administración de bots.

    2.3.1.- Bot

    Un bot es una funcionalidad de Telegram, la cual consiste en la creación de un perfil de usuario de Telegram que se controla por terceros gracias a unos parámetros de configuración definidos por la API. Esta funcionalidad simula ser un usuario de Telegram, y como todo usuario, puede enviar mensajería a través de la aplicación por medio de configuraciones del bot. En el ESB configuraremos este bot para que de forma automatizada envíe notificaciones a los diversos grupos que se hayan acordado.

    Para la creación de un bot que utilizaremos para enviar notificaciones vía Telegram, será necesario hacer uso de la funcionalidad ofrecida por el @botfather de Telegram.

    El @botfather es una funcionalidad de Telegram para controlar a otros bots y crearlos por cuenta propia y es una de las recomendaciones de los responsables de Telegram para crear de una forma más fácil tu propio bot. Esta funcionalidad dispone de una variedad amplia de comandos para configurar nuestro bot.

    Para empezar a crear nuestro bot, deberemos de seguir los siguientes pasos (7):

     
    Spoiler

    2.3.2.- Grupos
    Para realizar las notificaciones se hará mediante grupos privados de Telegram, en los cuales se incluirá en cada grupo a las personas acordadas. 

    Para crear un grupo deberemos abrir la aplicación de Telegram y seguir los siguientes pasos:

     
    Spoiler

    2.3.2.- Configuración de la alerta

    Ahora que ya tenemos nuestro bot y nuestro grupo de Telegram donde van a llegar las notificaciones, debemos orquestar en el ESB como enviarlas. 

    Os dejo por aquí un esqueleto de operación de envío de peticiones:

     
    Spoiler

    En la misma podéis observar que se necesita atacar a la URL con unos parámetros determinados:

    https://api.telegram.org/bot1234567890:[TOKEN]/sendMessage?chat_id=[CHATID]&text="_pRequest.mensaje

    En este punto, podemos ver que hay un valor que no disponemos, que es el CHAT ID. Este valor es muy fácil de obtener, pues con reenviar un mensaje desde nuestro nuevo grupo al @userinfobot de Telegram, este nos devolverá el ID del grupo como muestro a continuación:

     

    La producción nos debería quedar algo así:

    Una vez enviamos la petición REST desde el ESB, podemos ver la notificación en el Telegram.

    Esta operación nos vale para todo caso que queramos notificar, pues el Proceso anteriormente indicado, será el encargado de orquestar a que grupo llamar (CHAT ID) y que mensaje enviar (adaptado a cada caso), De forma que podamos tener N grupos y N mensajes diferenciados utilizando el mismo Bot.

    A continuación os dejo un breve video explicativo del proceso completo:

     

    Como podéis observar, siguiendo los pasos de esta guía, podréis notificar a quien queráis de cualquier cuestión que ocurra en el ESB de forma inmediata. ¡Así que espero que os sea de ayuda!

    No puedo terminar este articulo sin incluir una mejora del articulo anterior, y esta es la utilización de la consulta del usuario así como el uso de algunas de las URLs que nos ofrece el servidor OAUTH2 de Intersystems. Todo esto lo explicamos a continuación.

     

    3.- Actualización de consulta de usuario

    3.1.- Usuario de nuestro token por Endpoints Relacionados con Autenticación (OAUTH)

    A continuación os explico una forma mas sencilla y reutilizable de obtener este dato de forma que podamos aplicarlo para múltiples procesos.

    En el primer articulo ("Como controlar el acceso a tus recursos con OAuth2") en el que explicábamos como preparar el servidor OAUTH2 de Intersystems, indicábamos que la URL del servidor era:

         https://DNS/IP:57773/oauth2

    Una vez creamos el servidor, en su configuración podemos ver:

    Sistema > Gestión de seguridad > Cliente de OAuth 2.0 > Descripción del servidor  - (Configuración de seguridad)   

     
    Spoiler

    Como vemos, hay varias URLs que nos crea el servidor. Una de ellas es para consultar la información del usuario (userinfo) en OAuth 2.0, podemos utilizar la siguiente URL:

               https://DNS/IP:57773/oauth2/userinfo

    El procedimiento a seguir es enviar una solicitud GET al punto final UserInfo, incluyendo el token de acceso en el encabezado de la solicitud de autorización. El encabezado suele ser "Authorization: Bearer [token_de_acceso]". Para ello os muestro el paso a paso:

    Obtener el Token para el usuario "bezkfeZoA3mU2g1dmABlvgv9k1AKHN78JtIgXgcdQeQ":

     
    Spoiler

    Utilizando este Token hacia la URL de UserInfo obtenemos el usuario:

     
    Spoiler

    Como podéis ver, con un simple GET a esa URL y el token que ya disponemos, nos devuelve "sub" que es el "aud" que obteníamos por el JWT. De forma que podemos montarnos una operación REST en el ESB que realice esta operación y tendremos la respuesta inmediata.

    Os dejo por aquí una estructura de una operación REST para que podáis estructurar vuestras pruebas:

     
    Spoiler

     

    3.2.- Endpoints útiles para OAUTH

    La URL del UserInfo la podemos obtener llamando a la URL:

         https://DNS/IP:PUERTO/oauth2/.well-known/openid-configuration

    La cual nos entrega el siguiente JSON que os sonará:

     
    Spoiler

    En esta lista de URLs vemos algunas interesantes como son:

    "userinfo_endpoint" : "https://DNS/IP:PUERTO/oauth2/userinfo"
    "token_endpoint" : "https://DNS/IP:PUERTO:57776/oauth2/token"
    "introspection_endpoint" : "https://DNS/IP:PUERTO/oauth2/introspection"
    "registration_endpoint" : "https://DNS/IP:PUERTO/oauth2/register"
    "revocation_endpoint" : "https://DNS/IP:PUERTO/oauth2/revocation"

    2.3.1.- token

    La URL "userInfo" ya le hemos explicado en este articulo, por lo que a continuación vamos a explicar "token_endpoint"; pues es la que utilizamos en capítulos anteriores para obtener el token.

    Para consumir la URL "https://DNS/IP:PUERTO:57776/oauth2/token" deberemos realizar un GET con los siguientes parámetros de configuración:

     
    Spoiler

    3.3.2.- introspection
    La siguiente URL que vamos a explicar es "introspection_endpoint". Que es la que nos permite validar un token en el servidor de autorización para verificar su estado y obtener más detalles sobre él (como sus permisos, emisor, usuario asociado, etc.). Este endpoint normalmente se utiliza en arquitecturas donde un recurso protegido requiere verificar la validez de un token antes de otorgar acceso.

    Para consumir la URL "https://DNS/IP:PUERTO:57776/oauth2/introspection" deberemos realizar un POST con los siguientes parámetros de configuración:

     
    Spoiler

    3.3.3.- registration

    La siguiente URL que vamos a explicar es "registration_endpoint" . Este endpoint permite que las aplicaciones cliente dinámicamente se registren en el servidor de autorización sin necesidad de configurar manualmente las credenciales en el servidor.

    Para consumir la URL "https://DNS/IP:PUERTO:57776/oauth2/register" deberemos realizar un POST con los siguientes parámetros de configuración:

     
    Spoiler

    3.3.4.- revocation

    La siguiente URL que vamos a explicar es "revocation_endpoint". Que es el endpoint definido en el estándar OAuth 2.0 que permite revocar tokens emitidos previamente por un servidor de autorización

    Para consumir la URL "https://DNS/IP:PUERTO:57776/oauth2/revocation" deberemos realizar un POST con los siguientes parámetros de configuración:

     
    Spoiler

    Con esta revocación del token termina este articulo. Espero que les sea de utilidad y les sirva para ponerse al día en cuanto a aplicación de seguridad en nuestras plataformas, pues todo esto lo podemos gestionar desde nuestro portal de gestión de Intersystems.

    Finalmente, espero que se conviertan ¡en el mejor equipo de seguridad posible!

    Muchas gracias por el tiempo que han dedicado a esta lectura.
     

    3 comentarios
    Comentarios (3)2
    Inicie sesión o regístrese para continuar
    Artículo
    · 1 jun, 2025 Lectura de 3 min

    IRIS Interop DevTools: A Jumpstart into IRIS Transformations for CCDA and FHIR

    IRIS supports CCDA and FHIR transformations out-of-the-box, yet the ability to access and view those features requires considerable setup time and product knowledge. The IRIS Interop DevTools application was designed to bridge that gap, allowing implementers to immediately jump in and view the built-in transformation capabilities of the product. 

    In addition to the IRIS XML, XPath, and CCDA Transformation environment, the Interop DevTools package now provides:

    • FHIR-SDA Transformation setup
    • SDA-FHIR Transformation setup
    • Bubbling up of FHIR validation errors
    • Loading of required context for FHIR transforms

    The look and feel of the dashboard has been updated to be more intuitive and user-friendly. Execution occurs within IRIS in order to leverage the environment, while the UI allows visibility, repeatability, and the ability to isolate modifications and modules for testing.

    There are five utilities:

    1. XPath Evaluator: Evaluates an XPath against an input CCD and returns result

    2. CCDA to SDA Transform: Runs an input CCD through the selected base XSL transform and displays SDA result. 

    3. XSL Template Tester: Applies a single XSL template against an input CCD and displays the resulting CCD. 

    4. FHIR to SDA Transform: Runs the standard FHIR to SDA transform on an input FHIR resource or bundle and displays SDA result or FHIR validation error response. 

    5. SDA to FHIR Transform: Runs the standard SDA to FHIR transform on an input SDA message and displays FHIR Bundle result.

     Getting Started:

    1. IRIS Interop DevTools is available for download on the Open Exchange

    2. Once installed, the UI runs in a Docker container. Follow the instructions in the README to build and start docker. (Additional instructions are included in the README for MacOS users). 

    3. Open the UI at: http://localhost:4000  

    For local installation

    The application is built to run on Docker on an IRIS for Health community image, however the solution only requires a Foundation namespace and is compatible with HealthConnect, IRIS for Health, or HealthShare UCR.

    1. The backend IRIS web application and REST APIs is available for installation via IPM.

    From IRIS terminal:
    
    zpm "install iris-ccd-devtools"

    2. The front-end application can be installed locally by changing directories to the  "frontend/CCD-Tools-Frontend" folder and then running the following commands:

    • npm install
    • npm rundev

    3. Open the UI at: http://localhost:4000  

    Sample Data

    There is anonymized sample data loaded in the testing folder. There are also two Postman collections for testing the backend APIs. The interop-devtools-ccd-fhir.postman_collection.json contains the updated FHIR-SDA APIs. 

    Running The Toolset

    Upload or paste the contents from the appropriate sample file in order to test each tool. 

    Example for the FHIR to SDA transform tester:

     

    Let us know what you think. Is a toolset like this useful for what you do? What features would be useful in the future? We look forward to continuing to enhance the toolset in our Innovations group. 

    Comentarios (0)1
    Inicie sesión o regístrese para continuar