問題タブ [apache-karaf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
openjpa - Pax ロギングを使用して OpenJPA ロギングを構成する方法は?
Karaf で Pax Logging を使用するように OpenJPA を構成するにはどうすればよいですか? 私が見つけたいくつかのスレッド (例: pax-logging での log4j エラー) によると、その設定のようです
(またはslf4j
) persistence.xml および
org.ops4j.pax.logging.cfg では機能するはずですが、私には機能しません。バージョンは、OpenJPA 2.2.0、Karaf 2.3.0、Pax Logging 1.7.0 です。OpenJPA ロギングのインポートは、Pax Logging に正しく解決されます。
編集: Pax Logging exports のこのバージョンに気付きましorg.apache.log4j
たが、に設定openjpa.Log
するlog4j
と、バンドルが正しく起動しません:
何らかの理由でこの依存関係を取得できません。
java - Karaf での XML パーサー クラスの読み込みに関する問題
いくつかの LDAP 操作を行う OSGi バンドルがあります。これらの操作を行うために、Apache 共有ディレクトリを使用します。バンドルをビルドするために Maven Bundle Plugin を使用しています。時間とリソースが不足しているため、pom.xml を使用する必要があります。この pom.xml には、Apache 共有ディレクトリと、それが依存する他の jar が含まれており、生成されたバンドルに含まれています。依存関係の 1 つは Xerces で、その後に Xml API が続きます。これら 2 つの jar をバンドルに含めると、Karaf は ClassCastException をスローします。
さらに調査したところ、クラスjavax.xml.parsers.DocumentBuilderFactory
が 2 つの jar からロードされていることが明らかになりました。これはXml-apis.jar
、バンドルに含まれていたものと、JRE の. このクラスは からロードされているため、バンドルに含める必要はないと判断し、削除しました。ただし、次のように表示されます。rt.jar
ClassCastException
rt.jar
Xml-apis.jar
ClassNotFoundException
したがって、 を含めるとxml-apis.jar
、 が得られますClassCastException
。含めない場合は、ClassNotFoundException
. この問題を解決する方法はありますか? どんな助けでも大歓迎です。
java - キャメル-unmarshal()。serialization()-ClassNotFoundException
現在のバンドルではなく、コモンズコンポーネントバンドルに含まれるBeanをシリアル化方式でアンマーシャリングしようとしています。
キャメルが私のBeanをアンマーシャリングしようとすると、次のエラーが発生します。
22:43:11,865 | エラー| nModule-thread-1 | DefaultErrorHandler | 89-org.apache.camel.camel-core-2.8.0.fuse-06-11 | exchangeIdの配信に失敗しました:ID-ITEM-64684-49962-1354223882336-2-1。配信試行後に使い果たされました:1がキャッチされました:java.lang.ClassNotFoundException:commons.InformationInput java.lang.ClassNotFoundException:commons.InformationInput at java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)[:1.6.0_33] at java .security.AccessController.doPrivileged(Native Method)[:1.6.0_33] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)[:1.6.0_33] at java.lang.ClassLoader.loadClass(ClassLoader.java: 306)[:1.6.0_33] http://stackoverflow.com/questions/6749334/osgi-bundle-access-spring-context-file-from-another-bundle at java.lang.ClassLoader.loadClass(ClassLoader.java: 247)[:1.6。
Beanを含むバンドルが正しく開始され、バンドル定義のExport-Packageでcommonsパッケージを定義しました
誰かがそのようなことをなんとかしましたか?
apache-camel - karaf で camel-stream を使用する
karaf で在庫例のルートを実行しています。stream:out を log:test に変更すると、ログに 5 秒ごとにメッセージが表示されるため、機能していることがわかります。ただし、karaf コンソールには何も表示されないようです。camel-stream もインストールしましたが、ログにエラーは表示されません。karaf bin/client を実行すると、stream:out データが表示されるはずですか? ありがとう!
以下に機能情報を追加しました。現在karaf 2.2.9を使用しています。2.3.0で試しました:
私も次のことを試しました:
私は得る:
「to uri」を「log:test」から「stream:out」に変更すると、bin/client を実行しても何も得られません。それは有効なコンソール出力テストですか?
これも追加する必要があります:
java - OSGI JNDI は非 OSGI コードからの JNDI 呼び出しとの共存を許可しますか?
OSGI Enterprise Release 5 仕様の第 126 章では、互換性について言及しています。
「Java SE および Java EE クライアントで使用される従来の JNDI プログラミング モデルをサポートします。」
OSGI 非認識コードの使用:
「OSGi を認識しないクライアントと JNDI コンテキスト プロバイダーは、静的メソッドを使用して JRE JNDI 実装に接続します。InitialContext クラスはプロバイダーからコンテキストへのアクセスを提供し、プロバイダーは静的な NamingManager メソッドを使用してオブジェクト変換を行い、URL コンテキストを検索します。これは、従来のモデルは OSGi を認識していないため、この OSGi 認識の欠如の結果が管理されている場合にのみ、確実に使用できます。」
しかし、このテキストが OSGI バンドル内で実行される「レガシー」コードにのみ適用されるのか、それとも OSGI コンテナがアプリケーションに埋め込まれているシナリオなどの OSGI コンテナ外のコードにも適用されるのかは、私には明らかではありません。
埋め込みシナリオでは、OSGI コンテナーの外側と内側の両方に JNDI 呼び出しを実行するアプリケーション コードが存在する場合があり、それらは同じ JVM で実行されるため、JNDI 実装を共有します。
質問:組み込み OSGI コンテナーで実行されている OSGI JNDI 実装は、コンテナー外の OSGI 非認識コードが通常のように JNDI 呼び出しを実行できるようにする必要がありますか?それとも、「OSGI 認識」への移植が必要ですか?
Apache Karaf 2.3.0 (Apache Aries JNDI 1.0.0 を使用) でこれを自分で試してみると、Apache Aries では JNDI クライアント呼び出しが OSGI バンドルから発信される必要があるため、うまくいかないようです。
部分的なスタック トレース:
質問:これは正しい動作ですか、それとも、この制限に違反している、参照できる仕様のセクションはありますか?
jpa - OSGIサービスJPAPersistenceContextが注入されていません
Fuse ESB(Apache ServiceMixおよびKaraf)でOSGIサービスとして公開したいインターフェイスを持つコアライブラリがあります。目標は、他のバンドルがそれを使用できるようにすることです。このサービスはJPA(OpenJPA)とSpringを使用します。インターフェースは次のとおりです。
とクラス:
以下は省略形META-INF/spring/beans.xml
です:
そしてMETA-INF/persistence.xml
(略称):
OSGi以外の環境では、すべてがうまく機能します。これはfelixmaven-bundle-pluginを使用するため、OSGiサービスを作成するために、以下を追加しましたOSGI-INF/blueprint/osgi-context.xml
。
バンドルが正常にデプロイされ、サービスが登録されます。問題は、PatientService
が別のバンドルから参照されている場合、エンティティマネージャーが挿入されていないためNullPointerException
、find(Integer id)
メソッドにがスローされることです。以下は、消費者の抜粋ですMETA-INF/spring/consumer-context.xml
。
明確にするために、PatientService
はコンシューマーバンドルに注入されますが、エンティティマネージャーはプロバイダーバンドルに注入されません。また、元のサービスの開始時に次のログ出力が表示されるため、永続性ユニットの問題ではないようです。
何が起こっているのかを理解するために、オブジェクトメモリ参照とスタックトレースをPatientServiceJpaImpl
クラスのコンストラクターに記録しました。コンストラクターが2回呼び出されました(2つの異なるオブジェクトが作成されました)。
org.apache.felix
最初の出力は、で始まり、多かれ少なかれで終わるosgiコンテナから発信されているように見えますorg.apache.aries.blueprint
。org.springframework.osgi
2番目の出力は、で始まり、多かれ少なかれで終わるSpringFrameworkから発生しているように見えますorg.springframework.beans.BeanUtils
。
コンシューマーサービスが呼び出されると、その参照は、注入されたエンティティマネージャーを持たないブループリントのインスタンス化されたオブジェクトへの参照になります。また、ログから、オブジェクトのブループリントのインスタンス化の後に永続性ユニットがインスタンス化されPatientServiceJpaImpl
ます。
私はかなり長い間この問題を検索していじくり回してきました、そして私はアイデアを使い果たしました。皮肉なことに、実際にはある時点で機能していましたが、機能させるために多くの変更を加えたため、ネズミの巣であったため、元に戻すことができませんでした。
ブループリント管理対象オブジェクトに永続コンテキストが挿入されないのはなぜですか?任意のアイデアをいただければ幸いです。ありがとう。
logging - ラクダの例外をログに記録し、デッドレターチャネルに送信する
Karaf内を実行するCamelルートがあり、そのためにDeadLetterChannelを追加しました。これは、ルートが失敗し、問題メッセージを保持して原因をログに記録したい場合を処理するためです。一部の処理を非同期で処理しているため、呼び出し元のアプリケーションに例外をスローすることはできません。
ドキュメントを読んで多くのケースを試してみると、例外をKarafのログに記録する方法と、元のメッセージをデッドレターキューに入れる方法の両方を理解することはできません。
これが私が持っているものの抜粋です:-
「onException」構造を削除すると、すべての例外の場合に、ソースメッセージはデッドレターキューに表示されますが、ログに記録されません。
上記のように実行すると、例外トレースはKarafのログに記録されますが(「notificationException」の場合)、関連するソースメッセージはデッドレターキューにロールバックされず、エーテルに消えます(おそらく私が考えているように) 「onException」構造内で処理しました)。
さまざまな種類のエラーハンドラーを調べた後、代わりにDeadLetterChannelBuilderに次のようなものを追加してみました...
...しかし、これらは合法的な財産ではありません。
また、onException句にさまざまな例外を明示的にリストする必要があるのは正しくないことにも気づきます。
では、メッセージをキューに入れるだけでなく、例外トレースをログに記録するためにデッドレターチャネルを取得するにはどうすればよいですか?おそらく、デッドレターチャネルは正しいハンドラーではありません-この場合、自動再配信にはあまり興味がありません。
ガイダンスをありがとう、
J。
war - apache-karaf の起動時にどのように戦争を展開しますか
次のような osgi:install コマンドを実行して、karaf にデプロイする war ファイルを作成しました。
karaf インスタンスの起動時にこれが発生するように karaf を構成するにはどうすればよいですか?
デフォルトで戦争機能を開始するように org.apache.karaf.features.cfg ファイルを変更しました
apache-karaf - karaf ログに日付が表示されない
karaf ログには日付 (日、月、年) は表示されず、時刻のみが表示されます。karaf ログに日付と時刻の両方を表示するように構成する必要があります。
osgi - 1 つの VM で複数の Play アプリケーションを実行する
「play run」コマンドを実行するたびに、NettyServer がデフォルトのポート 9000 で play アプリケーションを実行している新しい JVM が起動されます。
しかし、play 2.0.4 で以下のことは可能ですか?
1 つの netty サーバーを実行して、1 つの JVM で複数のプレイ アプリケーションを実行する
複数の netty サーバーを異なるポートで実行して、1 つの JVM で複数のプレイ アプリケーションを実行する
複数のプレイ アプリケーションを Karaf コンテナーにデプロイしたい (プロジェクトの要件:)) ため、それらを 1 つの Karaf VM で実行する必要があります。