Nova postagem

查找

InterSystems Oficial
· Mar. 10

Atualização das Plataformas InterSystems Q1-2025

Bem-vindos à primeira atualização trimestral de 2025 das plataformas InterSystems.

Se você é novo nessas atualizações, seja bem-vindo! A grande novidade deste trimestre é o próximo lançamento do Red Hat Enterprise Linux 10. Continue lendo para saber mais sobre isso. Esta atualização tem como objetivo compartilhar mudanças recentes, bem como nosso melhor conhecimento atual sobre as próximas mudanças, mas prever o futuro é um negócio complicado e isso não deve ser considerado um roteiro comprometido.
  

Dito isto, vamos à atualização ... 

Sistemas Operacionais de Produção e Arquiteturas de CPU para InterSystems IRIS

Red Hat Enterprise Linux

  • Próximas Mudanças 
    • Esperamos que a Red Hat lance o RHEL 10 no final de Maio ou início de Junho e seja adicionado suporte para ele logo depois no IRIS 2025.1
    • O RHEL 9.5 passou por uma pequena certificação de sistema operacional sem incidentes.
  • Leitura Adicional: RHEL Release Page

Ubuntu

  • Atualizações Anteriores
    • We’ve completed minor OS certification for Ubuntu 24.04.01 and 22.04.3 on IRIS 2024.1 without incident
    • Concluímos a certificação secundária do sistema operacional para Ubuntu 24.04.01 e 22.04.3 no IRIS 2024.1 sem incidentes
  • Próximas Mudanças 
    • O Ubuntu 24.04.2 acaba de ser lançado e a certificação secundária do sistema operacional começará em breve.
  • Leitura Adicional: Ubuntu Releases Page

SUSE Linux

  • Atualizações Recentes
    • Concluímos a certificação secundária do sistema operacional SUSE Linux Enterprise Server 15 SP6 sem incidentes.
    • Estamos planejando mudar a forma como expressamos o suporte ao SUSE Service Pack para dizer apenas "Qualquer Service Pack que o SUSE suporte publicamente" em vez de listar SPs específicos na documentação. Fizemos essa alteração para o RHEL e está funcionando bem lá, então faremos a mesma alteração com o SUSE.
  • Atualizações Anteriores 
    • O Suporte Geral da SUSE para o Linux Enterprise Server 15 SP3 terminou em 31/12/2022, mas o suporte de segurança estendido continuará até dezembro de 2025.  

Leitura Adicional: SUSE lifecycle

Oracle Linux

  • Próximas Mudanças
    • Esperamos que o Oracle Linux 10 seja lançado na mesma época que o RHEL 10. Como oferecemos suporte ao Oracle Linux por meio do kit IRIS RHEL, esperamos que o suporte ao Oracle Linux 10 seja lançado ao mesmo tempo que o suporte ao RHEL 10.
  • Leitura Adicional: Oracle Linux Support Policy

Microsoft Windows

  • Atualizações Recentes
    • O Windows Server 2025 foi lançado em novembro e estamos ativamente adicionando suporte para a plataforma. Esperamos que nossos testes terminem em breve e, se tudo correr bem, ele será adicionado como uma plataforma com suporte.
  • Próximas Mudanças 
    • A Microsoft adiou a data de lançamento prevista para o Windows 12 para o outono de 2025. Iniciaremos o processo de suporte ao novo sistema operacional após seu lançamento.  
  • Leitura Adicional: Microsoft Lifecycle

AIX

  • Atualizações Recentes
    • O IRIS 2024.3 e versões posteriores oferecerão suporte apenas ao OpenSSL 3. OBSERVAÇÃO: Isso significa que a versão 2024.2 é a última versão do IRIS que tem os kits OpenSSL 1 e OpenSSL 3. No IRIS 2023.3, 2024.1 e 2024.2, fornecemos dois kits IRIS separados: um que oferece suporte ao OpenSSL 1 e outro que oferece suporte ao OpenSSL 3. Dada a importância do OpenSSL 3 para a segurança geral do sistema, ouvimos de muitos de vocês que já migraram para o OpenSSL 3.  
  • Leitura Adicional: AIX Lifecycle

Containers

  • Atualizações Anteriores
    • Alteramos a imagem base do contêiner do Ubuntu 22.04 para o Ubuntu 24.04 com IRIS 2024.2
    • Estamos considerando mudanças no contêiner IRIS padrão para, por padrão, ter tráfego interno (ECP, espelhamento, etc.) em uma porta diferente do tráfego potencialmente voltado para o exterior (ODBC, JDBC, etc.). Se você tiver necessidades nessa área, entre em contato e me avise.

Sistemas Operacionais e Arquiteturas de CPU para Desenvolvimento InterSystems IRIS 

MacOS

  • Próximas Mudanças 
    • A Apple lançou o MacOS 15 e estamos planejando suporte para ele no IRIS 2025.1

Componentes InterSystems 

Sistemas Operacionais de Produção e Arquiteturas de CPU para Caché & Ensemble

  • Atualizações Anteriores 
    • Um lembrete de que as versões finais de manutenção do Caché e do Ensemble estão programadas para o primeiro trimestre de 2027, o que está chegando mais cedo do que você imagina. Veja o excelente artigo do Jeff na comunidade para mais informações. 

Documentação das Plataformas Suportadas pela InterSystems

A documentação das plataformas suportadas pela InterSystems é a fonte definitiva de informações sobre tecnologias suportadas.

 

… e isso é tudo, pessoal. Novamente, se houver algo mais que você gostaria de saber, por favor, nos avise.
 

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Mar. 10 5min de leitura

Presentación del adaptador UDP

Hola

Este artículo es el resultado de la pregunta que había hecho a la comunidad: Adaptador UDP no funciona

En este artículo, voy a presentaros

1) ¿Qué es "UDP"?
2) El estado actual de Iris con UDP
3) Mi solución con el adaptador UDP



1) ¿Qué es "UDP"?

UDP significa User Datagram Protocol. Es uno de los protocolos fundamentales del conjunto de protocolos de Internet (IP) y se utiliza para transmitir datos a través de una red. Aquí tenéis algunas características clave de UDP:

  1. Sin conexión: UDP no establece una conexión antes de enviar datos, lo que significa que puede enviar mensajes (Datagram) sin un proceso previo de sincronización.
  2. No fiable: No hay garantía de que los mensajes enviados a través de UDP lleguen a su destino. No cuenta con mecanismos de recuperación de errores ni retransmisión de paquetes perdidos.
  3. Velocidad: Al no requerir conexión ni comprobaciones o correcciones de errores, UDP es generalmente más rápido que TCP (Protocolo de Control de Transmisión), lo que lo hace adecuado para aplicaciones en las que la velocidad es crucial.
  4. Orientado a datagramas: UDP envía mensajes en forma de paquetes discretos, que pueden tener longitudes variables. Cada paquete se trata de manera independiente.
  5. Casos de uso: Se usa comúnmente en aplicaciones donde la velocidad es más importante que la fiabilidad, como la transmisión de vídeo, los videojuegos en línea, la telefonía por Internet (VoIP) y las comunicaciones en tiempo real.

En resumen, UDP es un protocolo ligero y útil para aplicaciones específicas en las que la baja latencia es esencial.


2) El estado actual de Iris con UDP

Por supuesto, InterSystems Iris permite utilizar este protocolo para enviar y recibir datos.

Como protocolo REST, hay dos formas de hacerlo :

- con la función ##class(%Net.UDP).%New().

- con el EnsLib.UDP.OutboundAdapter y EnsLib.UDP.InboundAdapter

 

##class(%Net.UDP).%New()

Aunque la documentación de la clase es muy completa, aquí está el enlace de la documentación de InterSystems sobre cómo usarla.

Para enviar/recibir datos con ella, usamos una instancia de la clase(%Net.UDP).%New() y algún método vinculado a ella. En resumen, para enviar datos (en localhost con el puerto 3001) :

SET client = ##class(%Net.UDP).%New()
SET addrbin = ##class(%Net.UDP).GetHostAddr("127.0.0.1")
Set status = client.Send("message text", addrbin, 3001)

Para recibir datos (en localhost con el puerto 3001) :

Set sobj = ##class(%Net.UDP).%New(3001,"127.0.0.1")
Set data = sobj.Recv()

EnsLib.UDP.OutboundAdapter y EnsLib.UDP.InboundAdapter
Este es más simple : es un adaptador.
Aquí la documentación : EnsLib.UDP.OutboundAdapter et EnsLib.UDP.InboundAdapter
Para enviar datos :

Set status = ..Adapter.SendStream(stream)

Para recibir datos:

Set status = ..Adapter.Receive(stream)

Sin embargo, no funciona. Pregunté a la comunidad con mi problema «UDP Adapter not working» y creé un ticket para el WRC. Me respondieron esto :

El ejecutable subyacente ya no se instala en el producto desde Ensemble 2018.1.

Lo he comprobado internamente y se ha enviado JIRA DP-437486 para actualizar esos adaptadores y que utilicen la clase %Net.UDP, pero esto estará sujeto a la aprobación de la dirección del producto y a los recursos de desarrollo disponibles.

Lamentablemente, la única opción ahora mismo es crear su propio adaptador personalizado utilizando la clase %Net.UDP.

Las dos diferencias principales entre la clase(%Net.UDP) y el EnsLib.UDP.OutboundAdapter son

  • La clase %Net.UDP utiliza la clase de sistema $System.UDP, por lo que utiliza código del núcleo de Cache/IRIS para enviar/recibir los mensajes UDP, mientras que el adaptador UDP utiliza un pipeline de comandos para llamar a ejecutables externos para enviar/recibir el mensaje UDP.
  • La clase %Net.UDP envía/lee una cadena mientras que el adaptador UDP utiliza un stream para enviar/leer mensajes.

 

3) Mi solución con el adaptador UDP

Por lo tanto, escribí la mía propia (aprobado por el support team) para enviar datos :

/// Adapter to send data with UDP Connection
Class USER.UDP.OutboundAdapter Extends Ens.Adapter
{

/// Host of the UDP server
Property Host As %String [ Required ];
/// Port of the UDP server
Property Port As %Integer [ Required ];
/// if 1, show the text that will be sent
Property UDPTrace As %Integer(VALUELIST = ",0,1") [ InitialExpression = 0, Required ];
Parameter SETTINGS = "Host:Basic,Port:Basic,UDPTrace:Basic";
/// Send "text" throught the UDP connection
Method SendDataText(text As %String) As %Status
{
    Try {
        Set status = $$$OK
        If ..UDPTrace=1
        {
            Do ..ShowText(text)
        }
        
        Set udpClient = ##class(%Net.UDP).%New()
        Set addrbin = ##class(%Net.UDP).GetHostAddr(..Host)

        Set sentBytes = udpClient.Send(text, addrbin, ..Port)
    }
    Catch exception {
        Set status = exception.AsStatus()
    }    
    Return status
}

/// Convert "stream" into text and send it throught the UDP connection
Method SendDataStream(stream As %Stream.Object) As %Status
{
    Try {
        Do stream.Rewind()
        Set text = ""
        While 'stream.AtEnd{
            Set text = text _ stream.Read()
        }

        Set status = ..SendDataText(text)
    }
    Catch exception {
        Set status = exception.AsStatus()
    }    
    Return status
}

/// Convert "object" into json and send it throught the UDP connection
Method SendDataJSONObject(object As %RegisteredObject, format As %String = "iw") As %Status
{
    Try {
        Set status = ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.stream,object,,,,format)
        $$$ThrowOnError(status)
        
        Set status = ..SendDataStream(stream)
    }
    Catch exception {
        Set status = exception.AsStatus()
    }    
    Return status
}

/// Takes a text as input,
/// Displays the traces of the associated object
Method ShowText(text As %String)
{
    Set nbParty = $SYSTEM.SQL.CEILING($LENGTH(text)/1100)
    For ii=1:1:nbParty
    {
        $$$TRACE($EXTRACT(text,ii,ii+1100))
    }
}

}

 

Espero que este artículo haya sido, si no útil, interesante.

No he probado el EnsLib.UDP.InboundAdapter, así que sentíos libres de añadir más información en los comentarios.


Corentin

Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· Mar. 10

Winners of the InterSystems Technical Article Contest 2025

Hi Community!

It's time to celebrate our 25 fellow members who took part in the latest InterSystems Technical Article Contest and wrote

🌟 38 AMAZING ARTICLES 🌟

The competition was filled with outstanding articles, each showcasing innovation and expertise. With so many high-quality submissions, selecting the best was no easy task for the judges.

Let's meet the winners and look at their articles:

⭐️ Expert Awards – winners selected by InterSystems experts:

🥇 1st place: Creating FHIR responses with IRIS Interoperability production by @Laura Blázquez García

🥈 2nd place: Monitoring InterSystems IRIS with Prometheus and Grafana by @Stav Bendarsky 

🥉 3rd place: SQLAchemy-iris with the latest version Python driver by @Dmitry Maslennikov

⭐️ Community Award – winner selected by Community members:

🏆 Generation of OpenAPI Specifications by @Alessandra Carena

And...

⭐️ We'd like to highlight the author who submitted 8 articles for the contest@Julio Esquerdo

Let's congratulate all our heroes who took part in the Tech Article contest #6:

THANK YOU ALL! You have made an incredible contribution to our Dev Community! 


The prizes are in production now. We will contact all the participants when they are ready to ship.

21 Comments
Discussão (21)13
Entre ou crie uma conta para continuar
Pergunta
· Mar. 10

Can %Net.HttpRequest objects get reused (behind our back)?

We are calling a REST web-service from Ensemble using EnsLib.HTTP.OutboundAdapter and redefining the adapter class to set custom headers as described by @Eduard Lebedyuk here: How to set Content-Type

During development we accidentally stumbled across puzzling behaviour - we now suspect that the %Net.HttpRequest object created in the linked example is being reused in the following scenario:

  1. request is created as described and sent to web-service, so an instance of a %Net.HttpRequest object exists and is known to the EnsLib.HTTP.OutboundAdapter
  2. we modify our code to test what happens if headers are not set - eg changing the "GetRequest()" method in the above example to return "" rather than a new %Net.HttpRequest object
  3. but in a subsequent call the headers set in step 1 above arrive in the web-service, even though they were not set (unset?) at step 2...

After really scratching our heads our suspicion is that the %Net.HttpRequest object created in step 1 is not thrown away after use, but "remembered"/re-used by the OutboundAdapter. Are we correct?

Is this what stands behind the "In normal use you create a single %Net.HttpRequest object and use it to issue as many requests as you need to the web server, each %Net.HttpRequest object can be thought of as a single instance of an internet browser" and "Reset the %Net.HttpRequest class so that it can issue another request. This is much faster than closing this object and creating a new %Net.HttpRequest object" in the class documentation? And if we are correct, is there documentation or good practice guidelines on how long it is wise to keep reusing such a request object? Or is it so situation dependent its impossible to say?

(Our situation is a passing a feed of healthcare data to a downstream system within our internal network; headers to contain content type and Basic Authentication headers - will only change a couple of times a year if the password is changed - and sent over the wire using SSL. We'll process several hundred, perhaps a few thousand, messages per day, mostly during working hours, with significant spikes of activity at certain points in the day.)

2 Comments
Discussão (2)1
Entre ou crie uma conta para continuar
Pergunta
· Mar. 10

Creating indexes on a SDA field

Hi all,

I'm working on a requirement to loop through all encounter streamlets(SDA) to identify specific encounters based on an encounter extension property for a patient fetch request. However, this current process is time-consuming, and we need to create indexes for that property to quickly retrieve the expected results without going through all the encounter streamlets of a patient.

I would appreciate help on how to achieve this, as I couldn't find any documentation explaining how to create indexes on a SDA element.

Thanks in advance.

1 Comment
Discussão (1)2
Entre ou crie uma conta para continuar