.NET上へJavaアプリケーションを移行できるか?Q 質問 Visual Studio .NETでJava言語を使ったアプリケーション開発が可能になったと聞きました。既存のJavaとどう異なりますか?また,Javaアプリケーションを移行する場合の注意点を教えて下さい。 A 回答 APIが大きく異なります。移行ツールを使用しても,修正や動作確認が必要です。移行メリットは少ないでしょう。 動作環境は似て非なるものです(図2[拡大表示])。どちらも,ソース・コードをコンパイルして中間コードを生成,クラス・ライブラリやランタイムなどから成る実行環境上で動作します。Javaでは,Javaバイトコードという中間コードを生成し,JavaVM(Java VirtualMachine)という実行環境が必要です。同様に,J#ではMSIL(Microsoft Intermediate Language)という中間コードを生成し,CLR(Common Language Runtime:共通言語ランタイム)という実行環境が必要です。ただし,それぞれの中間コードと実行環境は非互換のため,JavaバイトコードをそのままCLRで動かすことはできません。
移行ツールを無償で提供
既存のJavaアプリケーションを.NET環境へ移行する方法は3つあります(図3[拡大表示])。(1)Javaのソース・コードをJ#へコピーして,VS.NET上で再コンパイルする,(2)J#に同こんされているJBIMP.EXEで,JavaバイトコードをMSILへ変換する,(3)JLCA(Java Language Conversion Assistant)ツール(英語版のベータ2をJ#サイトから無償ダウンロード可能)で,Javaのソース・コードを,米Microsoftが提供するJavaに似た言語であるC#のソース・コードへ変換。その後,VS.NET上でコンパイルする――です。 ただし,移行ツールを利用しても,アプリケーションの修正は必須です。JavaとJ#は,「文法は同じでも,使用するAPIは大きく異なる」(マイクロソフト デベロッパーマーケティング本部 デベロッパー製品部 Visual Studio .NET プロダクトマネジャー 渡邊忠典氏)ためです。 APIやクラス・ライブラリは別物つまり,“J#はJDK1.1.4をベースにした独自拡張クラス・ライブラリを持つため,Java2とJDK1.1.4の一部のAPIセットを利用できない”のです。具体的には,(1)SwingやAWTなどのJavaアプレットを使用できない,(2)Javaからネイティブ・コードを操作するJNI(Java Native Interface)が使用できないため,.NETではWindows OSのAPIを呼び出す「P-Invoke」を用いる,(3)メソッドの遠隔呼び出し技術であるRMI(Remote Method Invocation)が使用できないため,.NETではWebサービスやリモーティングを利用する,などです。 企業システムではJ2EE(Java2 Platform, Enterprise Edition)をはじめJava2が多く利用されています。移行ツールを使用しても,利用するAPIの多くが変換できなければ,修正コストは高くなります。 結論としては,JavaアプリケーションのJ#への移行は非常に困難であるといえます。現状では,「VS.NETの拡張ツールであるMobile Internet Toolkitを利用して,携帯電話の新規機種対応の保守開発コストを下げたい」など,現状のJavaアプリケーションが抱える問題を.NETの機能が解決する場合以外は,移行メリットは無いといえるでしょう。 .NETが備えるWebサービスなどのクラス・ライブラリを利用するアプリケーションの新規開発であれば,C#を利用する方法もあります。 (本誌)
連載新着記事一覧へ >>
|