こんにちは、こだかです。
たまには新し目の事をと言うことで、MIX07で発表になったJasperについて紹介します。(タイトルはあまり気にしないで下さい。)何度かにわたってポストする予定になります。初回はIronPythonでのサンプルについてです。
IronPythonについては、あらゆるところで紹介されているので、そちらを参考にして下さい。必要なのは、CPyhton(http://www.python.jp/Zope/download/pythoncore/)2.4バージョンと、IronPython(http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=2573)バージョンは1.1、1.0どちらでも構いません。
Jasperとは?データベースアクセスに用いるライブラリです。接続情報さえ渡してしまえば、実行時に動的にデータクラスが内部でジェネレートされ、プログラムからデータアクセス可能になります。設定やデザイン時のコードジェネレートは必要ありません。
例えば以下の様に記述します。Dim connectionString As String =接続文字Dim contextcontext = DynamicContext.CreateDynamicContext(connectionString)
上記の記述によって、接続文字にあるデータベースのCategoriesテーブルは、以下の例の様な記述でアクセスが出来るようになります。例)Categoriesテーブルの1行目CategoryName列をメッセージボックスで表示する(VB)MessageBox.Show(context.Categories(0).CategoryName)
またJasperは、ASP.NET、WindowsForm、WPFに対して、オートバインディングが可能です。コントロールの名前で自動的にバインディングされるので、ちょっと変な感じがしますけどね。
サポートされる言語は?と言うと、DLRに対応した物のみになります。現時点では、VB、IronPythonですが、将来的にIronRuby,ManagedJavaScriptが予定されています。それと、VBで使用する場合はLINQもサポートしています。ちなみにC#は?と言うと、これがNGなんです・・・実行時バインディングがサポートされていないからです。”実行時に動的にデータクラスをジェネレートする”と言うことが出来ないんですね。ただ一応、JasperAPI自体の使用は可能です。自分でクラスを作成し、そこにAPIを使用して読み込んであげればですけど・・・ちょっと現実的ではないですね。
インストールするには?1.Jasper : MIX 2007 CTP(http://www.microsoft.com/downloads/details.aspx?FamilyId=471BB3AC-B31A-49CD-A567-F2E286715C8F&displaylang=en)をダウンロードしてインストールして下さい。2.ファイル名を指定して実行より"%WINDIR%\assembly"を実行して下さい、GACが表示されます。
3."%ProgramFiles%\Microsoft Codename Jasper CTP\Binaries"より、"Microsoft.Jasper.CTP.dll", "System.Data.CTP.dll", "System.Data.Entity.CTP.dll", "System.Data.Entity.Design.CTP.dll" をGACにドラッグ&ドロップして下さい。
IronPythonで遊ぶ!まずデータベースを作っておきましょう。"%ProgramFiles%\Microsoft Codename Jasper CTP\Samples"の下にあるCreate and Populate Northwind.cmdを実行して下さい。.\SQLEXPRESSにNorthwindデータベースが出来上がります。
モジュールのインポートや接続文字の設定が面倒なので、以下の記述をm.pyとして、IronPythonをインストールしたフォルダの直下に作成しましょう。(こだかの環境ではC:\IronPython-1.1です)
m.py-----------------------------------------------------------------------------------------------------------import clr
# 接続文字の指定# 別ファイル(ConnectionStrings.py等)の場合は、import ConnectionStrings として下さい。# 使用例)northwindContext = DynamicContext.CreateDynamicContext(ConnectionStrings.NorthwindConnectionString)
conStr = "Provider='System.Data.SqlClient';Provider Connection String='Initial Catalog=Northwind;Data Source=.\SQLEXPRESS;Integrated Security=True;';Generate Default EDM=True"
# Jasper assemblyのインポート 事前にGACの登録してね# GACの登録がやな人はこんな感じ→clr.AddReferenceToFile("Microsoft.Jasper.CTP.dll")clr.AddReference("Microsoft.Jasper.CTP")from Microsoft.Jasper import *
# Northwind の接続文字列より、Dynamic Context を作成します nwc = DynamicContext.CreateDynamicContext(conStr)-----------------------------------------------------------------------------------------------------------
これで、IronPythonのインタラクティブシェルで遊べるようになります。まず、IronPythonをインストールしたフォルダにあるipy.exeを実行して下さい。そして、import mと入力して上記をインポートします。例えば、Productsテーブルを取得&表示してみましょう。Chaiですか!
次にWhere条件を付けてみます。ID=14は昆布なんですね。OrderByやSelectも可能です。Alice Muttonってなんでしょう?
追加、更新、削除です。あぁクリクリドーナツが・・・
また他のサンプルとして、オートマッピングされたクラスのプロパティ名を変更するものがあります。規定ではプロパティ名は、テーブルのフィールド名になりますがNameService()関数を使用すると別の名前を付ける事が可能になります。サンプルは"%ProgramFiles%\Microsoft Codename Jasper CTP\Samples"の下にありますので、興味のある方はご確認頂ければと思います。
次回はVBでの実装を確認してみましょう。
こだかたろう