Typemock: その過去・現在・未来
Eli Lopian氏率いるTypemock社の過去・現在・未来について、インタビュー形式にて記します。
作者 Charles Humble, 翻訳者 沼田 暁子 投稿日 2007年12月28日 午前12時12分
PHP やPython、Rubyといった動的型付けのインタプリタ言語を使っているWebアプリケーション開発者達は、アプリケーションを変更してブラウザを更新することで、すぐに確認できることに慣れている。JSPのページではこの機能が概ねサポートされているのに対し、JavaEEの世界では、変更した箇所をテストしたいときにはいつも、開発者はビルドとデプロイを繰り返さなければならず、この手順はインクリメンタルな開発のスピードを急激に落とすことがある。
多くのベンダがJavaのこの状況を改善しようとしており、広く、2つの手法が使われている。
1つ目の最も確立されている手法は、クラスローダ全体のリロードを必要とするものである。このアプローチは、例えばWebLogicのChangeAwareClassLoaderで使われているものである。この方法には2つの重大な欠点がある。1つ目は、状態に関する情報が失われるため、再作成しなければならないことである。2つ目は、一般的には全体を再配備するよりは速いが、それでも時間がかかることであり、それは必要なステップがたくさんあるからである。アプリケーションサーバの環境では、以下のようなステップが行われるだろう。
Aranea フレームワークのブログの中で書かれているとおり(source)、オブジェクトの状態のリロードはSerializableを実装したオブジェクトに限られており、シリアライズできないフィールドを持つことはできない。JBossは2つのクラスローダを使用してSeamとJava EE 5用に拡張を行った。クラスローダのひとつはSeamコンポーネント用の、もうひとつはEJB3/Hibernate等のためのものである。Seamコンポーネントや設定で何かが変更されると、Seamは全体を再配備する必要なしにリスタートされる。EJB/Hibernateコンポーネントの変更には、依然として全体の再配備が必要であるが、これはHibernateのメタモデルを動的にロードする方法が今のところ無いからである。JBoss Tools (サイト・英語)IDEのプロジェクトでは、これが開発者にとって可能な限りシームレスになることを目指している。シリアライゼーションの技術は、Rifeや Tapestry 5などのいろいろな他のフレームワークでも機能すべきである。
2つ目のアプローチは、JVMレベルのホットスワッピングである。Java SE 5では限定された形のホットスワッピングが導入され、クラスローダの削除や存在しているエンティティの破棄をすることなく、実行時にクラスを再定義する機能が提供されている。しかしながら、クラスの宣言されたフィールドやメソッドを変更することはできず、そのために実用性が限られている。現在、多数のベンダがこの状況を改善しようとしており、その中にはZeroTurnaroudやBEAが含まれている。
ZeroTurnaround は先ごろ、Java Rebel 1.0(サイト・英語)の最終リリースを発表した。このリリースでは、性能の向上やリフレクションのサポート、より手厚いJava 1.4のサポートといった、初版リリースへの多くの改善が見られる。サポートされているWebアプリケーションサーバも増えており、以下のサーバが含まれている。
こちらで書かれているように(source)、カスタム・クラスローダを使用して、GlassfishやWebSphereなどといったサポートされていないアプリケーションサーバで動作するようにすることも可能かもしれない。リリース1.0では、まだアノテーションをサポートしていないが、1.1では予定されている。Java Rebelは商用ソフトウェアであり、開発者1人あたり149ドルかかる。無償の試用版の入手が可能である。
BEA ではFastSwapと呼ばれるChangeAwareClassLoaderの代わりとなるものを提供しており、性能や制限はJava Rebelと非常に似通っているが、当然ながらWebLogicサーバに限定されている。現在は、WebLogic 10.3のテクノロジー・プレビュー版(サイト・英語)で利用が可能になっており、詳細についてはこちら(PDF・英語)に書かれている。
Java のような静的型付け言語用のフル・ホットスワッピングは、いまだ活発に研究されているトピックであり、成し遂げることはできないかもしれない。しかしながら、JSR 292(サイト・英語)で行われている、Java 7で動的言語をサポートするための作業は、JVMがターゲットとしている動的言語のために状況を改善しようとしている。invokedynamicとフル・ホットスワッピングの組み合わせにより、PythonやRuby、Groovyといった言語の実装がJVMのオブジェクトモデルを直接使用できるようになることが期待される。これにより、これらの言語のJVM上での性能はかなり改善されるだろうし、Java言語自身のためのさらに先進的なホットスワッピングが次々と排出されるはずである。
原文はこちらです:http://www.infoq.com/news/2007/12/dynamic-jee
この論文では、仮想化やクラウドサービスの複雑なメリットと実世界における応用を検討します。さらに重要なこととして、Contegixが複雑な問題の解決に仮想化を実装している方法や、仮想化を使うべきではないケースについて詳細を提供します。
Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとして、ライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリです。私たちはNeverBlockプロジェクトのMohammad A. Ali氏とRevactorライブラリのTony Arcier氏に話を聞きました。
システムの保守容易性や拡張性を確保するためのベスト・プラクティスに関する記事は数多くありますが、この記事では避けた方がいい、いくつかの悪習慣(ワースト・プラクティス)を強調します。
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
No comments
返信