0

Servicemix でバンドルを実行しています。会社のリポジトリに移動し、対応する JAR をローカル マシンにダウンロードしました。その JAR を抽出したところ、この JAR には META-INF フォルダーが 1 つしかないことがわかりました。このフォルダー内には、Manifest.mf ファイルと、Spring 構成ファイルや Camel Context ファイルなどのリソースがあります。そこで私は最初の質問を受けました。この JAR のソース ファイル、つまり JAVA クラスなどはどこにあるのでしょうか。私が見たのは、マニフェスト ファイル pom.xml、別の pom プロパティ ファイル、および spring と camel 用の他のいくつかの構成ファイルだけでした。

これが私の次のステップにつながりました。ワークスペースにもこのプロジェクトのローカル コピーがありました。このプロジェクトをローカルでビルドし、プロジェクトのターゲット ディレクトリに JAR を見つけました。

次の手順はばかげているように見えるかもしれませんが、とにかく私はほとんど実験をしませんでした. ターゲットで見つけたこのJARを抽出し、コンテンツを表示するために抽出しました。私は maven-bundle-plugin を使用したため、これがバンドルであると信じていましたが、JAR を見て、それが単なる JAR または OSGI バンドルであると判断する方法はありません。わかりましたので、JARを抽出し、今回はコンパイルされたJavaクラスがあったと思います。

これで終わりじゃない、またおかしなことをした。この JAR からコンパイル済みのクラスを削除し、会社の中央リポジトリからコピーしたものとまったく同じにしました。ここで、JDK の JAR 作成ユーティリティを使用して JAR を作成しました。

これで 2 つの JARS ができました。1 つは会社の中央リポジトリからダウンロードしたものです。自分で作成した別のもの。それは他のものとまったく同じ内容を持っています。この JAR を作成する際にも、同じ manifest.mf を使用しました。(マニフェストが oSGI バンドルのバックボーンであることは知っていたので)。

このバンドルをサーバーのホーム ディレクトリに安全にコピーしました。最後に、次を使用してこのバンドル/JAR を Servicemix にインストールしました: install file:path_to_JAR/JAR_FILE_NAME。

正常にインストールされました。しかし、このバンドルを開始しようとしたとき。開始できませんでした。表示例外を使用すると、例外が表示されました。Bean をロードできず、アプリケーション コンテキストを初期化できず、さらに具体的な例外「ClassNotFound」例外が続きました。アプリケーション コンテキストで定義されたクラスを見つけることができなかったことを理解しています。しかし、なぜYYYYYYYYYY?

まったく同じ手順を実行し、何度も確認しました。私が起動できなかった場合、なぜ以前のものが起動して実行されているのですか。

OSGI 環境で作業したことのある人にとってはばかげているように聞こえるかもしれませんが、今は特に ServiceMix を再検討し始めています。

提案をありがとう。

4

1 に答える 1

0

これは OSGi に関するものではなく、アプリケーションに関するものです。私はあなたのプロジェクトを知らないので、いくつかの仮定を行うことができます。最初に、会社のリポジトリから取得した jar は「古い」バージョンである可能性が高く、ローカル ソースとは異なります。Servicemix では、Blueprint または Spring xml がバンドルに含まれている可能性が非常に高く、これらは Camel-Blueprint/Spring エクステンダーが取得できる有効なリソースです。これらの XML は解釈され、それらが標準の Camel コンポーネントのみを使用する場合、バンドル内に単一のクラスを含める理由はありません。新しく作成されたバンドルに戻ります。明らかに、camel-xml にいくつかの新しい「コード」があり、標準の Camel クラスだけでなく、独自に作成したプロセスも必要です。これらのクラスはバンドルにとどまる必要があります。新しく作成されたバンドルをすべてのクラスとともにデプロイするのが最善です。camel xml ファイルで何が変更されたかを確認する必要があります。

于 2013-06-25T06:40:04.597 に答える