hbase は osgi 化されたバンドルとしてまだ利用できないため、maven felix プラグイン (hbase 0.92 および対応する hadoop-core 1.0.0) を使用してバンドルを作成することができ、両方のバンドルが OSGi で起動しています:)
また、結果のバンドルに hbase-default.xml が追加されます。結果の osgi-jar を開くと、構造は次のようになります。
- 組織/
- メタINF
- hbase-default.xml
これは<Include-Resource>@${pkgArtifactId}-${pkgVersion}.jar!/hbase-default.xml</Include-Resource>
実際にhbaseに接続したいときに問題が発生します。hbase-default.xml が見つからないため、構成ファイルを作成できません。
hbase osgi バンドルは、hbase 接続の取得とデータベースのクエリに使用する必要がある別の osgi-bundle 内から使用されます。この osgi-bundle は、RCP アプリケーションによって使用されます。
私の質問は、バンドルが開始されたときに hbase-default.xml が見つかるように、どこに配置する必要があるかということです。または、ファイルが存在することを認識しないのはなぜですか?
ヒントをありがとう。
- 編集
逆コンパイラを見つけたので、構成のロードが実行されるソース (maven を介してソースを提供しない hadoop-core) を表示でき、Threads contextClassLoader が使用されていることがわかります (利用できない場合は、構成クラス自体)、リソースを見つけることができないように思えますが、説明によると、親もチェックする必要があります (ただし、OSGi 環境の親は誰ですか?)?
hbase を使用する必要がある OSGi バンドルからリソースを取得するテストを行い、作成した jar ファイルに hbase-default.xml を追加しました (上記を参照)。スレッドの contextClassLoader を取得すると、リソースが取得されます。コードをもう少し調べてみると、HBaseConfiguration のクラスローダーを設定する方法がないことに気付きました (ただし、「単純な」hadoop-Configuration のクラスローダーを設定することは可能ですが、HBaseConfiguration は継承していますが、作成手順はcreate() メソッド内で新しいオブジェクトを作成するだけなので、HBaseConfiguration では許可されません。
これを起動して実行する方法をいくつか考えていただければ幸いです:)