IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
ビデオ①
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
InterSystems IRISは総合データプラットフォームです
InterSystems IRISは、企業にとって最も価値のある資産(データ)の取得、共有、理解、そしてデータに基づく行動のために必要なすべてのものを提供します。
完全なプラットフォームである InterSystems IRIS は、複数の開発技術を統合する必要がありません。より少ないコードで開発が可能で、そのアプリケーションは、システムリソース、メンテナンスなども少なくて済みます。
IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
インターシステムズは、特定の $List シンタックスを使用することで不正なデータベースとジャーナルレコードが作成される問題を修正しました。この問題が発生する可能性は非常に低いものですが、発生した場合の影響は非常に大きなものとなります。
この問題は、以下の製品およびそれらベースとしたその他のインターシステムズ製品に存在します:
この問題はUnicode版の製品でのみ発生します。
以下のシンタックスでグローバル上のリスト形式データに新しい要素を追加する際に問題が発生します。
SET $LIST(<グローバル>, *+1) = 値
これは InterSystems FAQ サイトの記事です。
09/04/24-14:37:47:260 (2575554) 2 [Utility.Event] ISCLOG: SuperServer Super Server job slave failure ns=%SYS rtn=%SYS.SERVER 09/04/24-14:37:47:260 (2575554) 2 [Utility.Event] SuperServer failed to start slave server
メッセージログ(cconsole.log/messages.log)の上記のようなログは、スーパーサーバ/SuperServer(既定:1972ポート)に対して外部からリクエストがあったが、リクエストに対応する子プロセスの起動に失敗した場合に記録されます。
スーパーサーバへの新規接続に対してスーパーサーバがJOBコマンド(タイムアウトあり)を実行したが、タイムアウト時間内にJOBコマンドが完了しなかったケースなどが考えられます。
通常こちらは 、システムの負荷が非常に高くJOBコマンドによる子プロセスの生成に時間を要してしまったような、OS レベルの問題である可能性が高いです。
運用に支障がないようであれば、そのような状況は一時的であったと考えられます。
これは InterSystems FAQ サイトの記事です。
<ALARM>エラーは、クライアントアプリでタイムアウトが発生し、その結果InterSytemsサーバのプロセスがあわせて終了している状況をあらわしています。
クライアントアプリで、タイムアウト設定を無効にすることで回避できる可能性があります。
例えば、クライアントアプリから初回実行するSQL文がある場合、初回実行時のみInterSystems製品内部にクエリキャッシュ(=コンパイル済クエリ)を生成するため(※1)通常実行よりも時間がかかります(2回目以降の実行ではコンパイルは行われません)。
例えば、コンパイルに非常に時間がかかるSQL文の初回実行をクライアントアプリから命令し、タイムアウト以内に応答が戻らない場合 <ALARM> エラーが発生します。
※1:IRIS2020.1以降では埋め込みSQLで記述されたクエリも、初回実行時にコンパイルされます(2019.1以前では、埋め込みSQLを含むクラス/ルーチンがコンパイルされるタイミングでSQLもコンパイルされます)。
これは InterSystems FAQ サイトの記事です。
InterSystems製品では、システム開始時に任意の処理を追加できます。
データベースミラーリングを構成していない環境では、%ZSTARTルーチンのSYSTEMラベルを作成することで任意の処理を実装できますが、データベースミラーリングを構成している環境では、このルーチンでは動作しない処理があります。
ご参考:^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ
理由として、ミラーリング構成の場合、ミラーデータベースへのアクセスはミラーリングサービスが開始されプライマリメンバとなるまでReadOnlyとなります。
ミラーリングの開始処理は、%ZSTARTの処理とは別プロセスで実施している為、%ZSTARTの実行時にミラーデータベースへ書き込みアクセスができる状態とは限りません。
そのため、InterSystems製品開始時にミラーデータベースにアクセスするような任意処理を追加する場合は、ルーチン:ZMIRRORの NotifyBecomePrimary()を使用します。
なお、ルーチン:ZMIRROR は、%ZSTART と同様に既定では存在しませんので%SYS上に新規で作成する必要があります。
例:ZMIRROR.mac
新年おめでとうございます。今年もインターシステムズを宜しくお願い申し上げます。
さて2025年最初のウェビナーは「開発効率化とシステム統合の実現:InterSystems IRISプラットフォームによる
次世代システム基盤の構築」のテーマで、2月20日に開催いたします。
日時:2025年2月20日(木)13時半~14時
参加費無料・事前登録制
【概要】
当セミナーでは、現場で本当に使える統合プラットフォームについて、技術者の悩みから経営課題まで、リアルな視点でお届けします。
AIやデータ活用で苦労している開発者の方、コスト削減と開発効率の両立に頭を悩ませているマネージャー、そして未来の技術戦略を描きたい経営者の方々へ。
最新のテクノロジ―トレンドと実践的なソリューションを、成功事例とともにご紹介します。技術的な知見とビジネス価値の両面から、これからのDXを考える30分のセッションです。
【こんな方にお勧め】システム開発や開発基盤に興味がある;
ご多用中とは存じますが、皆様のご参加をお待ち申し上げております。
これは、InterSystems FAQサイトの記事です。
質問:
データ容量を見積もる計算式はありますか?
回答:
正確に見積もるための計算式は残念ながらありません。
InterSystems IRIS Data Platformの場合、データ部に関してはデータを全て可変長で格納しますので、各フィールドの平均がどのくらいであるかという目安の数字で平均レコード長を求め、キー部分も同様の計算を行い、必要な容量の推測値を求める必要があります。
インデックス部に関してはキー圧縮されますので、データと同じような上記の計算を行った推測値よりは少なくなることが期待できます。 ただしその圧縮率はデータの特性に大きく影響されますので、どの程度少なくなるかは一概には言えません。
実データのサンプル(例えば、1万件のデータ)をロードし、その時点でのサイズを確認して想定される件数分のデータ容量を推測するというのが現実的な方法となります。
これは InterSystems FAQ サイトの記事です。
こちらの記事では、タスク履歴の結果内容に、「タスクは 10 Apr 20xx 12:00:00AM 19 Aug 20xx 12:00:00AM から継続中 に有効期限切れになりました」のようなログがある場合、その意味と対処方法について説明します。
このログは、実行予定のタスクをチェックした際に、時間が対象タスクの有効期限を過ぎてしまったために、表示しているログになります。
有効期限を指定していない場合(※)は、次回タスク予定時刻が有効期限になります。
※有効期限の設定は、^TASKMGRユーティリティから行うことができます。
例えば、毎分実行予定のタスクスケジュールがあった場合、実行タスクの実行時間が1分を超える場合、仮に130秒とする場合、1分後と2分後に予定していたタスクスケジュールは実行することができなかったことになります。
この場合、3分後のタスクスケジュール以降実行されることになり、実行されなかったタスクは、「タスクが次のスケジュール時刻を過ぎても実行を続けています」とログされ、次に正常に実行できたタスクの後に「タスクは YYYY-MM-DD hh:mm YYYY-MM-DD hh:mm から継続中 に有効期限切れになりました」のようにログされます(タスク履歴へ)。
日本でMacユーザーのIRIS使いがどの程度いるのかわかりませんが、圧倒的少数派なのは確かでしょう。
そのせいもあってか、Mac版のインストーラは、Windows版ほどきめ細かい対応をしてくれていません。
Windows版はインストーラが勝手に日本語のロケールを設定してくれているのですが、Mac版(おそらくLinux版も)は英語ロケールのままです。
それでも、通常の使用ではさほど問題がないといえないこともないのですが、ファイルを読んだりする場合や他にも何かと不都合があります。(何かあったような気がしますが、忘れました。)
ですので、Macユーザーは面倒ですが、管理ポータルで日本語ロケールjpuwのインストールをする必要があります。
またはターミナルでコマンド一発でもOKです。
Do##class(Config.NLS.Locales).Install("jpuw")ちなみにこのロケールjpuwは説明を読むとUNIX用と書いていますが、WindowsでもファイルI/OなどのデフォルトエンコーディグをSJISではなくUTF8にしたい場合にも使えます。
昨今は、WindowsといえどもUTF8でファイル作成するケースが増えていますので、今更SJISいらないという人は、思い切ってこのロケールに切り替えるというのもありです。
これは InterSystems FAQ サイトの記事です。
POST要求で受信したBodyのJSON文字列を、REST ディスパッチクラス内メソッドでダイナミックオブジェクト(%DyamicObject)に変換する際、以下エラーが発生する場合があります。
{
"errors": [
{
"code": 5035,
"domain": "%ObjectErrors",
"error": "エラー #5035: 一般例外 名前 'Premature end of data' コード '12' データ ''",
"id": "GeneralException",
"params": [
"Premature end of data",
12,
""
]
}
],
"summary": "エラー #5035: 一般例外 名前 'Premature end of data' コード '12' データ ''"
}これは InterSystems FAQ サイトの記事です。
ジャーナルファイルの中身を参照したい場合、通常は管理ポータルで参照します。
管理ポータル:
[システムオペレーション] > [ジャーナル] : (該当ジャーナルの名前)参照 リンクをクリック
こちらのページで、外部に保存したジャーナルファイルも参照することができることをご存じでしょうか?
以下のように、ID= の後ろにジャーナルのファイルパスを指定することで、ジャーナルファイルの中身を管理ポータルで参照することが可能です。
http://localhost/iris/csp/sys/op/UtilSysJournal.csp?$ID1=C:\temp\20240826.002z
ジャーナルファイルは、YYYYMMDD.001 の形式でも、YYYYMMDD.002z のような圧縮形式のどちらでも参照可能です。
(ジャーナル圧縮対応バージョン:2022.1 及び 2021.2~)
また、ミラージャーナルファイル(例:C:\temp\MIRROR-MIRRORSET-20240826.001z)も同様に参照可能です。
是非お試しください。
これは InterSystems FAQ サイトの記事です。
方法は2種類あります。
1) 同一サーバにIISとCachéがインストールされている環境をそのままアップグレードする場合は、IRIS(※)インストールキットを起動し「CACHE(CONVERSION)」からCSPゲートウェイとCaché両方をアップグレードします。
2) IISがIRISとは異なるサーバにインストールされている場合は、IRIS用Webゲートウェイキットを利用します。
(※)InterSystems IRISまたはIRIS for Health
それぞれの方法は以下の通りです。
1)同一サーバにIISとCachéがインストールされている環境の「CACHE(CONVERSION)」でのアップグレード方法
a) インストーラーを起動します。
b) CACHE(CONVERSION)を選択します。
c) 「このインスタンスのローカルIIS Webサーバを構成」選択し「次へ」のボタンをクリックします。
d) 「コンバート」ボタンをクリックします。(この後、IRISのライセンスキーの指定を行う必要があります。事前にiris.keyをご用意ください)
2) IRIS用Webゲートウェイキットを利用する方法
a) Webゲートウェイキットを起動します。
b) 「Complete」を選択し「Next」ボタンをクリックします。
これは InterSystems FAQ サイトの記事です。
イベントログの削除には、Ens.Util.LogクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
メッセージの削除には、2種類の方法があります。
1) 2022.1.2以降の導入されたマルチプロセスで削除する方法
Ens.Ens.Util.MessagePurgeクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)
第4引数:メッセージボディも一緒に削除する場合は1を指定
第5引数:デフォルトは500(秒)が設定されていますが、大量のメッセージをパージするとクリアされたビットマップの最適化に時間を要して最適化が完了しない場合があるため、大量削除の場合は 10000000000など大きな値を指定します。
2) Ens.MessageHeaderクラスのPurge()メソッドを使用する方法。
実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)
開発者の皆さん、こんにちは。
試していたWebAPIでは、POST要求時クエリパラメータとボディの両方を送る必要がありましたので、HTTPアウトバウンドアダプタが提供するメソッド:Post()/PostFormDataArray()/PostURL() 辺りをドキュメントで確認していたのですが、残念ながら両方を渡せるように作成された丁度良いメソッドがありませんでした。
ドキュメント:HTTPアウトバウンドアダプタが提供するメソッド
では、どのように送ったかというと、SendFormDataArray()の第3引数を利用して両方の情報を送付してみました。
具体的には、SendFormDataArray()の第2引数にはHTTPメソッド(GET、POST、PUT、DELETEなど)第3引数に%Net.HttpRequestのインスタンスが渡せる仕様になっていましたので、クエリパラメータとボディを%Net.HttpRequestのインスタンスに設定し、第3引数に指定して実行する方法をとりました。
set status=..Adapter.SendFormDataArray(.pHttpResponse,"POST",httprequest)
if$$$ISERR(status) {
return status
}変数httprequestの中身は以下のように作成しています
これは InterSystems FAQ サイトの記事です。
永続クラス定義では、データを格納するグローバル変数名を初回クラスコンパイル時に決定しています。
グローバル変数名は、コンパイル後に表示されるストレージ定義(Storage)で確認できます。
例)
Caché技術ガイドのいくつかをIRIS版に書き換えた文書を作成しましたので公開します。
IRISファーストステップガイド
IRISBasicTechnologyGuide
- ObjectScript操作ガイド
- オブジェクト操作ガイド
- 多次元データエンジンの概念およびアーキテクチャー
IRIS SQLガイド
こちらの記事では、既存のユーザ設定をプログラムで変更する方法をご紹介します。
ユーザロールを追加/削除したい、有効期限設定を変更したい、等の場合にお役立てください。
なお、ユーザ設定をプログラムで新規作成する方法は こちら の記事で紹介しております。
InterSystems IRIS® data platform、InterSystems IRIS® for Health、HealthShare® Health Connect 2025.1 の最初の開発者プレビューが WRC 開発者プレビューページ に公開されました。コンテナ版は InterSystems コンテナレジストリ から latest-preview のタグで取得いただけます。
この開発者プレビューには、IBM の Open XL C/C++ for AIX 17.x コンパイラへの移行機能が含まれています。これにより、古いコンパイラがサポート終了に近づいている中、将来の AIX ビルドとの互換性が確保されます。この移行では、AIX 7.2 と 7.3 で SSL3 をサポートする aixopenssl30 に焦点をあてています。
ドキュメントは以下のリンクからご覧いただけます。
本リリースでは、すべてのサポート対象プラットフォーム向けに、従来のインストーラ形式をご提供します。サポート対象プラットフォーム一覧は こちらのドキュメント をご覧ください。
Intersystems IRISおよびIRIS for Health 2025.1より、Zen レポートのメンテナンスが終了することをお知らせします。 これは、2018年のInterSystems IRIS発表時に非推奨となり、その後、2020年のInterSystems Reportsの搭載により、代替のレポート機能を提供したためです。 時系列の概要は以下の通りです。
2018年3月 InterSystems IRIS 2018.1導入 Zen Reportsの非推奨を発表、既存アプリケーションの継続性を確保するため出荷を継続
2020年4月 InterSystems IRIS 2020.1発表 InterSystems IRISおよびIRIS for Healthのユーザライセンス、Advanced ServerライセンスにIntersystems Reportsを組み入れる。
2023年5月 Zen レポートのメンテナンス終了のお知らせ
2024年の2H Zen レポートがipmモジュールとして利用可能
2025 年 1 月 (InterSystems IRIS 2025.1) Zen Reports パッケージが InterSystems IRIS および IRIS for Health のキットから削除
コミュニティメンバーから、Python 2024 コンテストでの出品に対する非常に素晴らしいフィードバックが届きました。 ここで紹介させていただきます。
純粋な IRIS の 5 倍以上のサイズでコンテナーをビルドしているため、時間がかかっています
コンテナーの始動も時間はかかりますが、完了します
バックエンドは説明通りにアクセス可能です
プロダクションは稼動しています
フロントエンドは反応します
何を説明したいのかがよくわかりません
私以外のエキスパート向けに書かれた説明のようです
出品はこちら: https://openexchange.intersystems.com/package/IRIS-RAG-App
このようなフィードバックをいただけて、本当に感謝しています。プロジェクトに関する記事を書く素晴らしいきっかけとなりました。 このプロジェクトにはかなり包括的なドキュメントが含まれてはいますが、ベクトル埋め込み、RAG パイプライン、LLM テキスト生成のほか、Python や LLamaIndex などの人気の Python ライブラリに精通していることが前提です。
REST/JSONを使ってデータを交換することが増えてきていると思いますが、POSTでIRISにデータを渡す場合に日本語が含まれる場合に皆さんどう処理していますか?
わざわざ自分でコード変換する処理を追加していませんか?
実は、あまり知られていないのですが、自動で変換する方法がありますので、紹介します。
CSPのメカニズムを使ってクライアントからデータをPOSTすると、それはCSPのRequestオブジェクトのContentプロパティに渡されます。
ContentプロパティのTypeは%CSP.Streamになっていて、このTypeのクラスリファレンスを読むと、Content-TypeがText/のときには、CharSetに基づいてコード変換が行われると示唆されています。
つまりContent-TypeがJSONの場合には、自動的な変換がされないということになります。
本当は、Content-TypeがJSONの時も変換してくれるのが一番良い(わかりやすい)のですが、残念ながらそうなっていません。
その代わりにパラメータが用意されています。
RESTのディスパッチクラスの定義に以下のパラメータを追加することで、自動コード変換を行なってくれます。
Parameter CONVERTINPUTSTREAM = 1;
IRISを起動しようとするとエラーとなり起動できません。
どなたか解決策をご存知でしょうか?よろしくお願い致します。
環境:Windows11
事前作業:
下記URLと同症状が発生し、アップグレードインストールを行っています。
https://jp.community.intersystems.com/post/iris%E3%82%B3%E3%83%9F%E3%83…
操作:
1.タスクトレイアイコンから「InterSystems IRIS 開始(S)[IRIS]」を選択。
2.エラーメッセージが表示される。
イベントビューアのエラー:
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
IRISに直接Insert文を発行する時と、JDBCを経由してInsert文を発行する時とで、
挙動差異があるように見受けれれまいたので、何かご存知な方がいらっしゃれば教えてください。
次の様なテーブルがあります。.png)
それに対してDBeaverとIRIS管理ポータルからInsertを実行します。
★DBeaver
★IRIS管理ポータル.png)
この後実際に作成されたグローバルの情報を確認すると、
『VARCHAR型』で作成したカラムに数値をInsertした際に、
実データの型が異なっていることがわかります。
DBeaver(JDBC) ➡ 文字列で登録
IRIS直 ➡ 数値で登録
個人的には『VARCHAR型』に数値が入ること自体がおかしいので、
DBeaverの方がまし(ホントは型違反とかになってほしい)と思うのですが、
この差異が何で発生するのか、また回避する方法をご存じな方がいらっしゃれば情報共有頂きたいです。
また、そもそもIRISはRDBを使っても型チェックが曖昧になるものなのかも気になっています。
さすがに数値のカラムに文字列を入れようとすると怒られるのですが、
上記の様な場合にチェックの仕組みが働かないのには違和感がありました。
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
私自身SQLがあまり得意ではなく、
業務で書いてみたもののパフォーマンスがよくなく、
不要なループが含まれていた、無駄な検索条件が含まれている…なんてことが多々あります。
IRISの管理コンソールなどにはいろんな機能があると思うのですが、
パフォーマンス改善をするために利用できるツールなどはあったりしますでしょうか?
何かご存知の方がいらっしゃいましたら、情報共有頂けますと幸いです。
Embedded Pythonの導入に伴い、1つ嬉しいことは、直接エクセルファイルの読み書きができるようになったことです。
それでこの機能を使って、ミニ業務改革をちょこちょこ行なっているのですが、そこでちょっとハマったことを共有します。
実際この内容は実はIRISとは全く関係ないのですが、このDCコミュニティの皆さんが同じことでハマった場合に少しでも早く問題解決できるように情報共有します。
エクセルの計算式の入ったセルの値を読み取るときには、そのファイルのオープンの際にdata_only=Trueというフラグをつけないといけないのですが、そのファイルがopenpyxlで読み書きしたファイルの場合に、その計算式のセルの値(Noneとなる)がうまく読めないことがあります。
その場合には、そのファイルをエクセルで開いて再保存することで、正しく読むことができます。
以下にそのあたりの内容を説明したページがあります。
Pythonでは、拡張モジュールのバージョン違いが混同されないように、venv を使って仮想環境に拡張モジュールをインストールする事を推奨されてたりしますが、IRISから使用する場合に、このvenvで作られた仮想環境を利用する事は可能でしょうか?
PythonPathに仮想環境のパスを指定してはみましたが、プロジェクトから、あるいはimportで、その場所を指定する等出来るでしょうか?
何方か御存知の方がおられましたら、その方法などを教えて下さい。
インターシステムズは InterSystems IRIS data platform、InterSystems IRIS for Health、HealthShare Health Connect のバージョン 2024.3 をリリースしました。2024.3 は Continuous Delivery(CD)リリースです。
これは、InterSystems FAQサイトの記事です。
これは、MS-ACCESSの制限事項です。
MS-ACCESSは、インデックスが32個より多いテーブルにはリンクできません。
この問題を回避する方法として、直接テーブル(クラス)をリンクするのではなく、VIEWを使用する方法があります。
最近はパブリッククラウド環境でIRISを使ってアプリケーションを構築されるお客様が多数で、IRISのセキュリティ機能についてご質問を受ける機会が増えました。実際の運用で始めてセキュアなIRISを操作するよりも経験した方が良いかもと考え、その第一歩としてインストール時の初期セキュリティ設定には普段からロックダウンを指定するのはいかがでしょうか。通常セキュリティ設定の違いおよび注意点をマニュアルを参照しながらリストアップしました。
パスワードの最小文字数が8文字になります。またSQLのルートユーザとして作成される_SYSTEMユーザは運用開始前の無効化を推奨しているように、高いセキュリティレベルが必要な環境では不要あるいは一時的に同等の権限を付与したユーザを作成して対応可能ではないでしょうか。
2. サービスプロパティ
Use許可のPublicが不可、とはIRISにアクセスする手段を明示的に許可しないと使えないことを意図しています。予期せぬユーザーがODBCでアクセスしたり、管理コンソールを使用したりと言った事故を防ぐ有効な手段です。
また初期状態で有効化されているサービス、WebGatewayに加えてWindowsの場合Console、非WindowsではTerminalと必要最小限になっています。
以前、Azure用にOAouth2クライアントをセットアップする記事を書いた時に思ったのですが、各IdPはサンプルコードとしてPythonコードや専用のモジュールを提供しているので、それがそのまま使用できれば効率が良いのにな、と思いました。
IRISが埋め込みPython機能としてWSGIをサポートしたことにより、これが簡単に実現しそうなので、その方法をご紹介したいと思います。
今回は、IdPとしてOKTAを使用してAuthorization Codeフローを行います。
参考までに、今回使用した環境を後半に記載しています。
コンテナ化してありますので、コンテナのビルド環境をお持ちの方は、下記を実行してください。
git clone https://github.com/IRISMeister/iris-okta-oidc-wsgi
cd iris-okta-oidc-wsgi
python/.env.templateをpython/.envという名前でコピーを作成して、OKTAで得られる設定値を指定してください。
AUTH0_CLIENT_ID="0oaxxxxxxx"
AUTH0_CLIENT_SECRET="qUudxxxxxxxxxxx"
AUTH0_DOMAIN="dev-xxxxx.okta.com/oauth2/default"