2011-07-30 12 views
14

私は、カラフの上に機能として実行される多数のバンドルで構成される製品を扱っています。通常、開発者は一度に1つのバンドルを処理します。私たちの通常の開発は、コード、コンパイル、フォルダを展開するためのバンドルのコピー、テストのようなものです。また、ホットデプロイでは、サーバの再起動や機能のアンインストール/再インストールを行わずに機能としてインストールされたバンドルをオーバーライドすることを拒否しているため、サイクルが長くなることがあります。効率的なOSGi開発ワークフロー

私の質問は:コミュニティの誰かがより良い方法を持っていますか?私たちのやり方はうまくいくが、それはかなり遅くて非効率的だと思うし、誰かが何か良いものを思い付いたと賭けているよ!

編集:私は私の質問ではっきりとわかりませんでした...私たちはKarafの下にEquinoxを使用しています。 EclipseとMavenも使用していますが、Mavenの使用が適切かどうかはわかりません。

+0

私は現在、これらの回答をテスト中です。彼らはすべてとても素晴らしいです。私が1つを受け入れる前に、どの作品が私にとって最善のものかを見たいと思っています。 – Jon7

+0

更新情報@ Jon7? –

+1

長い間お待ち申し上げます!私はこれらすべての答えで遊んだ。私はdevが好きだ。最高の時計。それは最小限の作業(人々が実際にそれを使用することを意味する)を必要とし、我々が必要とするものを実行する。最終的には、私がeclipseを再コンパイルして保存するたびに再展開したいとは思っていません...私が保存した時間の約95%が私のコードが動作状態にないと言います。私はコンパイルをして、新しくコンパイルされたバンドルが私のサーバー上で自動的に実行されるのを楽しんでいると言わなければならない! :) – Jon7

答えて

8

dev:watchコマンドが好きです。マニュアルから:

watchコマンドは、開発時に役立ちます。監視される一連のURLを設定することができます。指定されたURLと一致するすべてのバンドルの場所は、 に自動的に更新されます。これによりバンドルを手動で更新する必要がなくなり、必要に応じてバンドルをシステムフォルダにコピーする必要もなくなります。唯一のMavenベースのURLとMavenスナップショットは、実際に自動的に更新されることに注意してください、あなたは

を実行する場合DEV:それは実際に場所マッチングMVNを持っているすべてのバンドルを監視します*

を見る:*「持っている-snapshot彼らのURLに。

Karafシェルから「dev:watch --help」を実行すると、使用可能なフラグと引数がリストされます。同様の

何かがあなたがEclipse用平方メートルのMavenプラグインを持っている場合は、これらのどちらかが、非常にうまく動作しますPAX plugin

です。

更新:私の会社では、できるだけTDDになるよう努力しているため、Karafを明示的に開始しなくても多くの開発が行われています。ユニットテストの通常の組み合わせでは、Pax Examも使用しています。これは、Eclipse内で実行しても大いに素晴らしいです。)

これは、Equinox/Felixで実行されるKarafの詳細に縛られないようにするのに役立ちます/コンシェルジュ(私はJAAS認証のような様々なKarafの仕様を模倣しています)。他の多くのクールなツール/機能と並んで、Karafの機能をプロビジョニングすることができ、TinyBundlesを使用することでバンドルを即座に作成することもできます(モック/スタブに便利です)。

Pax Examは、JUnit @Runnerを提供することでJUnitフレームワークにフックします。最新のバージョン(2)は、はるかに高速でDSLベースのAPIを備えているため、テストは非常に簡潔で読みやすいです。

Pax Examを使用すると、良好なテストカバレッジと短い開発時間が得られます。テストがあまり実用的でない場合、またはテストで表れないバグを探している場合、dev:watchコマンドは非常に貴重です。

要約すると、 IMOでは、テストであなたの開発を確実に動かす必要があります(Pax Examはあなたの既存ビルドにうまく収まりますし、使い慣れればより速く開発できます)。 dev:watchコマンドをすぐに使用することができます。これは確かにあなたの現在の状況をスピードアップします。

更新2:別の質問に答えるために、Pax-ExamでComponentFactoryをテストする例を追加しました。テスト駆動型開発は、今日開発者が利用できる最も効率的なワークフローです。質問へのリンク:osgi: Using ServiceFactories?とソースコードへのリンク:http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz

+0

Karaf-Eclipseの統合のためには、これが役に立つかもしれません:http://code.google.com/a/eclipselabs.org/p/eik/ – earcam

2

EclipseでEquinoxを使用しても優れた結果が得られました。ホットコード置換でも正常に動作します。与えられたプラットフォームは小さく、私たちは約50バンドルのオーダしかありませんが、ワークフローは次のようになります。

まず、サードパーティ製のEclipseバンドル、Eclipseそれらを管理する&をダウンロードします。次に、ワークスペースにはプロジェクトのすべてのバンドルがあり、3〜4組の作業セットにグループ分けされています。実行中のEquinoxシステムでは、アンパックされたプロジェクトフォルダがバンドルとして使用されるため、コンパイルは保存時に通常どおり行われますが、GWTを再コンパイルする必要がある場合もあります。 Eclipse内でこれを実行することで、オンザフライでテンプレートファイルを変更するホットコードを置き換えることができます。MANIFEST.MF/plugin.xmlの変更だけでバンドルを更新する必要があります。コンソール。

+0

Karaf + MavenではないEquinox/P2/EclipsePlugins – earcam

2

これは、Karaf:FelixまたはEquinoxのプラットフォームによって異なります。

春分

Eclipseは、お好みの束と春分を起動するための優れた(またはほとんど優秀)をサポートしています。あなたが準備する必要がある2つのものがある:開発中

  1. バンドル、プラグイン・プロジェクトとしてワークスペースで利用できる
  2. ターゲットプラットフォーム、アプリケーション

このようなセットアップの残りのバンドルを含みますランタイムであっても簡単にバンドルを変更し、必要に応じてランタイムを簡単に再起動することができます。 SSHやFTP経由でバンドルを配布するリモートシステムや、Mavenのような外部ビルドツールを使ってビルドしたランタイムで自動的にバンドルをコピーできるリモートシステムで開発する場合、Karafがより適していると私は見ています。

Equinoxを使用している場合、ランタイムは作業領域からコードを直接実行するため、余分な余裕ができます。

フェリックス

フェリックスは(this Jira issueで追跡これに向かって作業があるが)のEclipseから起動するためのそのようなサポートを持っていないようです。通常のJavaアプリケーションとして起動することもできますが、これは便利ではありません。この場合、Mavenを使用する方がはるかに良い方法です。 EclipseをセットアップしてPDEの他の機能を最大限に活用することができます。外部からの起動のみです。

概要

要約すると、あなたはいつものMavenを通じて、すべてを自動化することができますし、Karafは大幅にこの点でお手伝いをします。あなたがEquinoxを使用しているなら、Eclipseはややこしいでしょう。ホットコードの置き換えではOSGiもまったく考慮されていないので(あなたがあなたのバンドルをリロードして新しいクラスローダが作成された場合を除いて)、あなたは使用しているメソッドに関係なくホットコードを置き換えることができます。 )。

+1

これは正しくない - 1)Karafを起動することは、KarafがラップアップするEquinox/Felixフレームワークを起動することと同じではない(Karafは多数の機能を追加する) 、2)Eclipse用Mavenプラグインを使用することは、KarafがEquinox/Felixを使用するように設定しているかどうかに関係なく機能します。この場合、Equinoxを使用する利点はありません。 – earcam

+0

1)それはあなたがKarafのために何を使用しているか、そしてこの余分な機能が必要かどうかによって異なります。 Karafが追加したこの機能を削除すると、Equinoxを使用している場合にEclipseとの統合が向上します。フェリックスの場合、何も変わりません。 2)MavenベースのワークフローとEquinoxを使用してEclipseを手助けできるわけではありませんでした.FelixがEclipseに統合されていないため、EclipseベースのワークフローはMavenベースのワークフローより優れています。 –

+0

私はあなたを打ちのめすことはありませんでした。ただKarafを解明しようとしました – earcam

3

Eclipse Eclipse Libraを使用すると便利です。天秤座は、Eclipse内のFelix、Equinox、KnopflerfishをWSTの他のサーバーと同様に起動できます。彼らはそれを使用する方法をいくつかのYouTubeのビデオがあります。

は、私はまた助けることができるいくつかのツールを書いた:

  • フィルタに一致するOSGiサービスをピックアップOSGiバンドル(osgitest = junit4)。これでJunitクラスは作成されませんが、事前設定されたオブジェクト(OSGI Blueprintなど)を提供できます。 JUnitは、サービスが実装するインタフェースで提供されるアノテーションに基づいて実行されます。
  • 以下の便利な目標
    • OSGIコンテナを起動し、そのすべてのバンドルのMavenプロジェクトを展開しているMavenプラグインは、(当然のOSGIバンドルされている)の依存関係です。 OSGIコンテナの起動はPAX試験の助けを借りて行われますが、私が書いたOSGIバンドルの助けを借りてJUnitテストが開始されます(あなたが提供するOSGIサービスを実行します)。プロジェクトがサーバーにデプロイされている場合は
    • (フォルダのMavenのレポやターゲットディレクトリにある)プロジェクトのすべての依存関係へのショートカット

を含むフォルダを作成します(Eclipseの天秤座)私は、XがバンドルのIDであり、すべてがすばやくリフレッシュされるXを更新するだけと言う必要があります。 LibraでEquinoxを実行している場合、クラスまたはpom.xmlを保存するとすぐにリフレッシュされるターゲットクラスフォルダを指しているので、サーバに公開されているプロジェクトを再コンパイルする必要はありません。

プロジェクトをサーバーに公開せず、ショートカット・フォルダを指すコンテナにバンドルとして追加する場合は、mvn installを実行した後でOSGiコンソールでupdateコマンドを実行することもできます(サーバーの再起動なし)。

ステップバイステップガイドは、その上に次のような方法でhttp://cookbook.everit.org/

に利用可能であるTDDテストとしてテストを作成し、CIサーバー上でコンパイル達人の一部としてそれらを実行することが可能です。

これらのツールが私のように有用であることを願っています。

関連する問題