27

Java EE 6 の優れた点の 1 つは、新しい依存性注入フレームワーク (CDI と Weld 参照実装) です。凍結されたコア jar を追加し、コア jar の機能を置き換える新しいモジュールを提供する追加の jar を追加できます。

私は現在、Weld で上記の作業を行う過程にあり、率直に言って、カバーの背後で行われている魔法が多すぎます。機能するか機能しないかのどちらかであり、デフォルトでは何が起こっているかについてあまり役に立たないため、何が間違っているかを調査して修正できます.

次のようなことを簡単に有効にできるスイッチがあると思います。

  • どのクラスパス エントリがスキャンされ、どこでスキャンされますか? 結果はどうでしたか?
  • どのクラスのインジェクションにどの Bean を使用できますか?
  • 特定の Bean が後で考慮されない原因は何ですか? 特定の瓶?

つまり、意思決定プロセスをもっと詳しく見る必要があります。なんらかの理由で、これは Guice では必要とされていません。おそらく、マジックがはるかに少なく、エラー メッセージが非常に優れているためです。

溶接アプリケーションをデバッグするために何をしますか? また、それはどの程度役立ちますか?

4

3 に答える 3

4

Weld は Java 用の Simple Logging (sl4j) を使用します。Tomcat を使用している場合はsl4j-jdk14-x.x.x.jar、アプリケーション クラス パスに追加し、次の行を に追加することをお勧めしapache-tomcat-7.0.x/conf/logging.propertiesます。

org.jboss.weld.Bootstrap.level = FINEST 
org.jboss.weld.Version.level = FINEST 
org.jboss.weld.Utilities.level = FINEST 
org.jboss.weld.Bean.level = FINEST 
org.jboss.weld.Servlet.level = FINEST 
org.jboss.weld.Reflection.level = FINEST 
org.jboss.weld.JSF.level = FINEST 
org.jboss.weld.Event.level = FINEST 
org.jboss.weld.Conversation.level = FINEST 
org.jboss.weld.Context.level = FINEST 
org.jboss.weld.El.level = FINEST 
org.jboss.weld.ClassLoading.level = FINEST

これにより、コンソールで多くのデバッグが生成されるため、特定のものを選択して他の行をコメントアウトすることをお勧めします。

他のログ ライブラリ (log4j など) は、それぞれの構成ファイルを使用して同様のレベルを追加して構成できます。

于 2013-10-14T15:15:17.727 に答える
3

いくつかのオプションを提案できます。

  • ログのしきい値を下げます。DEBUGWeld でどのログ フレームワークが使用されているかはわかりませんが、それを確認して構成することはできます。INFO

  • ソース コードを取得し、BeanManager実装にブレークポイントを設定します (BeanManagerImplおそらく)。これは CDI のメイン クラスであり、ほとんどすべてを処理します。

  • たとえば、別の実装を入れてみてください (アプリケーション サーバーに関連付けられていない場合) OpenWebBeans。その例外メッセージの方が良いかもしれません

  • 仕様を開いて、特定のケースについて読んでください。多くの場合、特定の前提条件を見逃しています。たとえば、注釈には特定@Targetの が必要です。そうでない場合、CDI によって処理されません。

Weld の例外メッセージはかなり残念なものであることが確認できます。私は Guice を使用したことはありませんが、Spring では非常に有益です。Weld では、上記の 4 番目のポイント (仕様を開いた) を参照し、すべての前提条件を確認する必要がありました。これは最初の私の疑いでした.仕様は非常によく見えますが、実装は(少なくとも最初は)それほど光沢がありません. でも、これは慣れると思います。

于 2011-01-31T20:45:16.547 に答える