先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。
今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。
C#.Net と VB.Net で作成してみました。
★C#.Net
NET Framework(ドットネットと発音)は、Microsoftが開発したソフトウェアフレームワークであり、主にMicrosoft Windows上で実行されます。
InterSystemsデータプラットフォームでの.NETのサポート
先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。
今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。
C#.Net と VB.Net で作成してみました。
★C#.Net
需要はそんなに多くはないのですが、時折「Native SDK (Native API) for .NET の使い方」に関するご質問を受けることがありますので、簡単に試せるサンプルをご紹介します。
Native SDK (Native API) for .NET を使用すると、ObjectScript のクラスメソッドを、ネイティブの .NET メソッドを呼び出すのと同じように、.NET アプリケーションから簡単に呼び出すことができます。
また、グローバルへのアクセスも簡単に行えます。
こちらの記事では、VB.NET のサンプルコードをご紹介します。
以下の手順で実行していきます。
Visual Studio のプロジェクトメニューから参照の追加をクリックして、以下のファイルを選択します。
(使用している .NET(Core) または .NET Framework バージョンに合わせて、それに対応するファイルを選択します。
以下の例は、フレームワークに .Net 6.0 を選んでいるため、net6.0 を選択しています。)
InterSystems IRIS 2020.1 には、Java または .NET で記述されたコンポーネントで IRIS 相互運用性プロダクションの開発を容易にする PEX(プロダクション拡張フレームワーク)が含まれています。
この PEX により、Java または .NET の知識を備える統合開発者は、InterSystems IRIS 相互運用性フレームワークの力、スケーラビリティ、および堅牢性を利用し、すぐに生産性を高めることができます。
IRIS 相互運用性フレームワークエキスパートに対し、PEX は既存の Java 言語または .NET 言語の外部コンポーネントとの統合を簡単にリッチ化することができます。
このチュートリアルでは、PEX を詳しく見ながら、.NET 開発者による PEX のはじめての使用を説明します。 コードは、https://github.com/es-comunidad-intersystems/webinar-PE にあります。
この記事では、.Net/Java ゲートウェイを簡単にコンテナ化する方法を説明します。
この例では、Apache Kafka との統合を開発します。
Java/.Net と相互運用するために、PEX を使用しています。
このソリューションは完全に docker で実行し、以下のように構成されます。
まず、メッセージを Kafka に送信する Java オペレーションを開発しましょう。 このコードはお好きな IDE で書くことができ、こちらのようになります。
要約すると:
では、これを Docker にパックしましょう!
これがこの例の dockerfile です。
IRISでは.Net Binding機能が非推奨になったため、VisM.OCXの置き換えのために用意していたCaché版Cache Directエミュレータ(.Net Binding機能を使用していたため)の使用も非推奨となりました。
そこでIRISのNative API機能を使用して書き換えたものを作成し、OpenExchange(以下のFAQトピックを参照してください)に登録しています。
Caché版Cache Directエミュレータを使っているアプリケーションをIRISに移行するためには、IRIS用のCache Directエミュレータに置き換えて、アプリケーションのコードをいくつか書き換える必要があります。
内容は、それぞれのプロジェクトに含まれるコンソールアプリケーションサンプル(consoleApp.cs)を比較することで大体理解できると思いますが、以下にその手順について説明します。
1. IRISの.Net Native API用のdllの参照設定を追加します。
Visual Studioのプロジェクト設定から参照の追加を選び、以下のファイルを追加してください。
2. using句
VisM.OCXはVisual Basicでクライアント・サーバー型のアプリケーション開発を支援するためにInterSystemsが提供してきたツールです。
誕生から既に20年以上が経過した非常に古いテクノロジーです。
OCX規格(ActiveXコンポーネント)は、マイクロソフト社が推進してきた規格ですが、やがてマイクロソフト社が後継となる.Net Frameworkをリリースし、その新しいフレームワークへの移行を強力に推進すると同時に、OCX規格は非推奨機能となっています。
一方で下位互換性のため、.Net Framework配下でOCXを動作可能とする仕組みが用意されており、結果としてOCXは、.Net Framework環境下で動作可能です。
従って、VisM.OCXも.Net対応のプログラミング言語C#やVB.NETからそのまま利用することができます。
しかしながら.Net Framework上で動作するとは言え、.Net Frameworkが用意する安全性の高い資源管理や強固なセキュリティ機能の恩恵を受けることができず、いわゆるマネージドコードとして動作できないという制約を抱えています。
皆様こんにちは。
Native API for .NETを使用して、%Stream.GlobalBinaryタイプのプロパティを持つデータを作成しようとしています。
%Stream.GlobalBinaryタイプのプロパティ(binaryData)に書き込む部分は以下のようになっています。
Using obj As InterSystems.Data.IRISClient.ADO.IRISObject = iris.ClassMethodObject("User.Sample","%New")
Using prop As InterSystems.Data.IRISClient.ADO.IRISObject = obj.GetObject("binaryData")
prop.InvokeStatusCode("Write", binary)
End Using
obj.InvokeStatusCode("%Save")
End Using
この”Write”メソッド部分ですが、1.5MB程度の制限がかかってしまい、1.5MBを超えるようなデータが登録できません。
※実際にはエラーとはならず、1.5MBまでしか書き込まれていない状態のようです。
どなたか解決方法等ご教授いただけないでしょうか。
これは、InterSystems FAQサイトの記事です。
以下の7つの技術を用いて、VB.NETからInterSystems IRISへ接続し使用することができます。
(A) InterSystems IRIS ADO.NET Managed Provider を利用する
InterSystems ADO.NET Managed Provider では、ADO.NET 準拠データベースとして InterSystems IRIS にアクセスでき、データへの簡単なリレーショナル・アクセスを提供します。特に ADO.NET を以前に使用したことのあるユーザにお勧めです。
詳細は、以下ドキュメントをご参照ください。
InterSystems IRIS ADO.NET Mnaged Providerについて
InterSystems IRIS 2020.1 および InterSystems IRIS for Health 2020.1 で PEX がリリースされ、Java Business Host を使うよりも優れたかたちで Java プログラムをプロダクション環境に取り込めるようになりました。 PEX は、相互運用性のコンポーネントを構築するための API をすべて提供するほか、Java と .NET の両方で使用できます。 Java Business Host は非推奨となり、今後のリリースで廃止される予定です。
PEX を使うメリット
ここからは、既存の Java Business Host のコードを PEX に移行する方法に注目します。
PEX で使用されるクラスとインターフェースは、Java Business Host (JBH) のものとは異なります。 本記事では、その相違点を要約して解説しますが、詳細は完全なドキュメントをご覧ください。
IRISでは.Net Bindingは非推奨機能となりました。
.Net Bindingを使ったアプリケーションは、IRISで提供されている.Net Native APIを利用して書き換えることができます。
ここでは、実際に書き換えをおこなったサンプルコードを示しながら、具体的な方法を説明していきます。
OpenExchangeに登録しているVisMエミュレーターは、元々Cachéの.Net Bindingを使用して作成されました。
それをIRISの標準機能で動作可能にするために、.Net Native APIを使用して書き換えをおこないました。
以下にどのように書き換えを行ったかを順を追って説明します。
まず以前の参照を削除します。
Visual Studioのソリューションエクスプローラーの所で参照をクリックします。
表示されるInterSystems.Data.CacheClientを削除します。
(右クリックして削除を選ぶ)
次にプロジェクトメニューから参照の追加をクリックして、以下の2つのファイルを選択します。
(プロジェクトの.Net Frameworkバージョンに合わせて、それに対応するファイルを選択する
以下の例は、v4.5を選択)
Caché ActiveX Bindingは、Visual Basicでクライアント・サーバー型のアプリケーション開発を支援するためにInterSystemsが提供してきたツールです。
CacheActiveX.dllとCacheObject.dllの2種類のバージョンが存在します。
IRISでは、CacheActiveX.dllは動作可能です。
CacheObject.dllはサポートしていません。
いずれにしろ誕生から既に20年以上が経過した非常に古いテクノロジーでマイクロソフト社も非推奨の古い規格ですので、今後も使い続けるのは得策ではありません。
Caché ActiveX Bindingの機能はIRISに用意されている.Net Native APIと.Net Managed Providerの機能を使って書き換え可能です。
ここでは、Caché ActiveX Bindingを使って書かれていたサンプルアプリケーションをIRISで動作するように移植した作業内容について解説します。
このサンプルは、以下のgithubサイトから入手可能です。
このサンプルアプリケーションは、20年以上も前にVB6サンプルとして作成されました。