Nova postagem

Pesquisar

Artigo
· Abr. 24 3min de leitura

Mini Dica do Dia - Pré carregando a licença na Imagem Docker IRIS

Quem nunca passou pela situação de estar desenvolvendo um belo exemplo usando uma imagem Docker do IRIS e o processo de geração da imagem falhar no Dockerfile porque a licença sob a qual a imagem foi criada não contém certas permissões?

No meu caso, o que eu estava implantando no Docker é uma pequena aplicação que usa o tipo de dado Vector. Com a versão Community, isso não é um problema porque ela já inclui o Vector Search e o armazenamento de vetores. No entanto, quando troquei a imagem do IRIS para um IRIS convencional (o latest-cd), descobri que ao construir a imagem, incluindo as classes que ele havia gerado, retornou este erro:

9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.LicitacionOS'
9.505 Compiling class Inquisidor.Object.Licitacion
9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.Licitacion'
9.538 Compiling class Inquisidor.Message.LicitacionResponse

Esse erro me deixou confuso, porque eu, como uma pessoa obediente, havia definido no meu docker-compose.yml o parâmetro que indica onde minha licença válida está localizada:

  iris:
    init: true
    container_name: iris
    build:
      context: .
      dockerfile: iris/Dockerfile
    ports:
      - 52774:52773
      - 51774:1972
    volumes:
    - ./iris/shared:/iris-shared
    environment:
    - ISC_DATA_DIRECTORY=/iris-shared/durable
    command: --check-caps false --ISCAgent false --key /iris-shared/iris.key

Demorei um pouco para perceber que o problema era a imagem original que eu estava usando, e não a licença que eu tinha, como você pode ver, não sou a pessoa mais esperta nesse caso.

O problema estava no ponto em que eu importava minhas classes para a imagem padrão do IRIS.

RUN \
zn "%SYS" \
do ##class(SYS.Container).QuiesceForBundling() \
do ##class(Security.Users).UnExpireUserPasswords("*") \
set sc=##class(%SYSTEM.OBJ).Load("/opt/irisapp/DemoSetup.Utilities.cls","ck") \
set helper=##class(DemoSetup.Utilities).%New() \ 
do helper.EnableSSLSuperServer() \
do ##class(Security.Applications).Import("/ApplicationInquisidor.xml",.n) \
zn "INQUISIDOR" \
set sc = $SYSTEM.OBJ.LoadDir("/opt/irisapp/src/Inquisidor", "ck", , 1) \
set production = "Inquisidor.Production" \
set ^Ens.Configuration("csp","LastProduction") = production \
do ##class(Ens.Director).SetAutoStart(production) \

A compilação do código estava retornando o erro anterior. O que eu deveria fazer para corrigir isso? Foi muito simples: eu tive que enviar a nova licença para a imagem IRIS inicial e pedir para ela atualizar a licença na primeira linha dos comandos que eu estava usando.

O primeiro passo é mover a nova licença para o diretório /mgr da instalação, o que eu fiz com este código:

COPY --chown=$ISC_PACKAGE_MGRUSER:$ISC_PACKAGE_IRISGROUP /iris/iris.key /usr/irissys/mgr
RUN chmod +x /usr/irissys/mgr/iris.key

O caminho de instalação do IRIS na nossa imagem é /usr/irissys/mgr, e o caminho /iris/iris.key é o meu diretório local. Com a licença na imagem IRIS, eu só precisei dizer ao IRIS para atualizar sua licença, então eu modifiquei os comandos anteriores adicionando a seguinte declaração:

RUN \
zn "%SYS" \
do ##class(%SYSTEM.License).Upgrade() \

Et voilà! Agora eu tenho minha imagem IRIS com minha licença carregada antes de importar e compilar minhas classes. Sem mais erros de compilação.

Espero que seja útil para você!

Discussão (0)1
Entre ou crie uma conta para continuar
InterSystems Oficial
· Abr. 24

As versões de manutenção 2024.1.4 e 2023.1.6 do InterSystems IRIS, IRIS for Health e HealthShare HealthConnect já estão disponíveis

As versões de manutenção 2024.1.4 e 2023.1.6 da plataforma de dados InterSystems IRIS® , InterSystems IRIS® for HealthTM, e HealthShare® Health Connect agora estão disponíveis para o público em geral (GA). Essas versões incluem as correções para o seguinte alerta emitido recentemente - Alerta: Queries SQL retornando resultados errados | InterSystems. Compartilhe seu feedback por meio da Comunidade de Desenvolvedores e assim construímos um produto melhor juntos. 

Documentação

Você pode encontrar as listas de alterações detalhadas e listas de verificação de atualizações nestas páginas:

Programa de Acesso Antecipado(EAPs)

Há muitos EAPs disponíveis agora. Confira esta página e inscreva-se para aqueles de seu interesse.

Como obter o software? 

Pacotes de instalação completas para ambos InterSystems IRIS e InterSystems IRIS for Health estão disponíveis através da página InterSystems IRIS Data Platform Full Kits do WRC. Kits do HealthShare Health Connect estão disponíveis através da página HealthShare Full Kits do WRC. Imagens de contêiner estão disponíveis através do InterSystems Container Registry. 

Disponibilidade e Informações do Pacote 

Esta versão inclui pacotes de instalação clássicos para todas as plataformas suportadas, bem como imagens de contêiner no formato Docker. Para obter uma lista completa, consulte o documento Plataformas Suportadas. Os números de compilação dessas Versões de Manutenção são: 2024.1.4.512.0 e 2023.1.6.809.0.

Discussão (0)1
Entre ou crie uma conta para continuar
Discussão
· Abr. 24

What is the best way to output JSON data in a REST API GET request?

Hi devs!

What is the best way to return JSON in IRIS for a GET request in a REST app?

This is how I do it now:

ClassMethod GetAllPersons() As %Stream.Object
{
    d ..%SetContentType("application/json")
    Set rset = ##class(dc.Sample.Person).ExtentFunc()

    set stream=##class(%Stream.TmpCharacter).%New()
    d stream.Write("[")
    if rset.%Next() {
        Set person = ##class(dc.Sample.Person).%OpenId(rset.ID)
        Do person.%JSONExportToStream(.stream)
    }
    While rset.%Next() {
        d stream.Write(",")
        Set person = ##class(dc.Sample.Person).%OpenId(rset.ID)
        Do person.%JSONExportToStream(.stream)
    }
    d stream.Write("]")
    return stream
}

The query is used vs the following persistent class:

Class dc.Sample.Person Extends (%Persistent, %JSON.Adaptor, %Populate)

{



Property Name As %VarString;



Property Title As %String;



Property Company As %String;



Property Phone As %VarString;



Property DOB As %Date(MAXVAL = "$piece($horolog, "","", 1)");



Property PersonId As %Integer [ Calculated, SqlComputeCode = { set {*}={%%ID}}, SqlComputed ];



/// Index for property DOB

Index DOBIndex On DOB;



ClassMethod AddTestData(amount As %Integer = 10)

{

d ..Populate(amount)

}

}

What I don't like:

1. "Unnecessary" "manual" writes of "[]":

d stream.Write("[")

2. Code block repeat for the first segment to excuse "," :


    if rset.%Next() {
        Set person = ##class(dc.Sample.Person).%OpenId(rset.ID)
        Do person.%JSONExportToStream(.stream)
    }
    While rset.%Next() {
        d stream.Write(",")
        Set person = ##class(dc.Sample.Person).%OpenId(rset.ID)
        Do person.%JSONExportToStream(.stream)
    }

3. I should introduce an "artificial" PersonId to make the response include record ID's (thanks to @Robert Cemper):

Property PersonId As %Integer [ Calculated, SqlComputeCode = { set {*}={%%ID}}, SqlComputed ];

Your ideas?

5 novos comentários
Discussão (5)2
Entre ou crie uma conta para continuar
InterSystems Oficial
· Abr. 24

Las versiones de mantenimiento 2024.1.4 y 2023.1.6 de InterSystems IRIS, IRIS for Health y HealthShare HealthConnect ya están disponibles

Las versiones de mantenimiento 2024.1.4 y 2023.1.6 de la plataforma de datos InterSystems IRIS®, InterSystems IRIS® for Health™ y HealthShare® Health Connect ya están disponibles de forma general (GA). Estas versiones incluyen las correcciones para la siguiente alerta emitida recientemente: Alerta: Consultas SQL que devuelven resultados incorrectos | InterSystems. Por favor, compartid vuestros comentarios a través de la Comunidad de Desarrolladores para que podamos construir un mejor producto juntos.

Documentación

Podéis encontrar las listas detalladas de cambios y las listas de comprobación para la actualización en estas páginas:

Programas de Acceso Anticipado (EAPs)

Hay muchos Programas de Acceso Anticipado (EAPs) disponibles ahora. Echad un vistazo a esta página y registraos en aquellos que os interesen.

¿Cómo conseguir el software?

Los paquetes de instalación completos tanto para InterSystems IRIS como para InterSystems IRIS for Health están disponibles en la página InterSystems IRIS Data Platform Full Kits del WRC. Los kits de HealthShare Health Connect están disponibles en la página HealthShare Full Kits del WRC. Las imágenes de contenedor están disponibles en el InterSystems Container Registry.

Disponibilidad e información sobre los paquetes

Esta versión incluye paquetes de instalación clásicos para todas las plataformas compatibles, así como imágenes de contenedor en formato Docker. Para consultar la lista completa, dirigíos al documento de Plataformas Compatibles. Los números de compilación de estas versiones de mantenimiento son: 2024.1.4.512.0 y 2023.1.6.809.0.

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

Programme d'accès anticipé : améliorations OAuth2

InterSystems IRIS 2025.2.0 introduit plusieurs fonctionnalités pour améliorer l'expérience utilisateur lors de la configuration d'OAuth2.

- OAuth2 est désormais un type d'authentification natif et peut être facilement activé pour vos services et applications web. Auparavant, OAuth2 était un type d'authentification déléguée.

- Vous pouvez désormais créer des serveurs de ressources avec la nouvelle classe OAuth2.ResourceServer, qui simplifie considérablement la configuration des serveurs de ressources. Auparavant, les serveurs de ressources étaient des instances d'OAuth2.Client.

- La classe OAuth2.ResourceServer fournit un exemple d'authentificateur pour déterminer les autorisations utilisateur. Pour les configurations simples, aucun code personnalisé n'est requis (auparavant, une implémentation ZAUTHENTICATE personnalisée était nécessaire). Cet authentificateur simple peut être étendu et personnalisé pour s'adapter à votre environnement. OAuth2.ResourceServer prend en charge plusieurs audiences.

- Vous pouvez désormais utiliser JDBC et ODBC pour vous authentifier auprès d'InterSystems IRIS avec des jetons d'accès.

Nous souhaitons connaître votre avis sur ces modifications et savoir si elles fonctionnent comme prévu.

Vous pouvez télécharger le logiciel et la nouvelle documentation relative à ces nouvelles fonctionnalités en utilisant ce lien.

Pour nous faire part de vos commentaires, veuillez utiliser cette adresse comme principale adresse de communication en vous rendant sur la page EAP et en sélectionnant le bouton de commentaires à droite.

Discussão (0)0
Entre ou crie uma conta para continuar