問題タブ [weld]
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.
unit-testing - CDI-Unit Jglue を使用した CDI の単体テスト
CDI アプリケーションの単体テストに Jglue フレームワークを使用したいと考えています。ビルドにはgradleを使用しています。
次のようなものを用意しました。
1) テストするクラス:
2) インターフェース:
3) Gradle の設定 ( http://jglue.org/cdi-unit/の開始に従いました)
4) テストクラス:
この単純なテストを実行すると、常に次の例外が発生します。
/build/reports/tests/index.html には次のものがあります。
この例外を回避する方法を知っている人はいますか? 必要に応じて、さらに詳細を追加できます。
jsf - Apache Tomcat 7.0.47 の BeanManager がリソース インスタンスを作成できない
実行中: Apache Tomcat 7.0.47 OmniFaces 1.6.3 JSF Mojarra 2.1.26 CDI Weld 2.1.0.Final
RuntimeException
JNDI "java:comp/BeanManager" にアクセスすることにより、Apache Tomcat 7.0.47 上に 3つあります。CDI BenManager はjava:comp/env/BeanManager
、BeanManager クラスに到達していない " " vut にバインドされています。
スタックトレース: 追加
Faces-Config:
web.xml:
META-INF の下に context.xml を追加しました。
jakarta-ee - @SessionScoped CDI Bean を @Stateless EJB に注入する
セッションスコープの CDI Bean をステートレス EJB に注入したいと考えています。EJB のアクセス時に、sessionscoped cdi Bean の正しいインスタンス (つまり、呼び出し元の sessionscope にあるインスタンス) を使用する必要があります。ステートフル EJB でこれを解決できることはわかっていますが、CDI でも解決できるかどうか知りたいです。EJB とサーブレットは同じ war で実行されるため、それらは同じスレッドを共有し、コンテナは EJB で正しいセッション スコープ Bean を見つけられるはずだと思いますか?
例えば:
EJB:
CDI ビーン:
サーブレットなどからステートレス EJB にアクセスするとき、呼び出し元の HTTPSession に関連付けられている CDI Bean を testMethod で使用したいと考えています。したがって、異なるブラウザ/http セッションから 2 つのクライアントがサーブレットにアクセスする場合、両方とも異なる結果文字列を取得する必要があります。
Provider
の代わりにCDI が必要Instance
ですか? はいの場合、特定のセッションに対して Bean の正しいインスタンスを生成するにはどうすればよいですか? おそらく BeanManager を取得して SessionData のインスタンスを検索することを考えましたが、正しいものを取得する方法がわかりません。
どんな助けでも大歓迎です、ありがとう!
java - CDI がマネージド Bean と見なすものを制限するにはどうすればよいですか?
私は何年にもわたってSpringを使用し、JEE7とCDIを見始めたばかりなので、この質問に行き着きました。
Spring の世界では、Bean に固執@Component
して、Spring が依存関係を注入する Spring Bean に変える必要がありますが、CDI では に相当するものはないようです@Component
。
私にとって CDI は、私の Web アプリケーションのすべてのクラスが CDI Bean と見なされることを暗示しているように思われます。これは、インジェクションを使用していない Java クラスがたくさんあり@Inject
、それらのクラスに固執して CDI を持っている人を望んでいないためです。その魔法を行います。
2 つの質問:
- CDI が jar ファイル内のマネージド Bean と見なすものを制限するにはどうすればよいですか?
- CDI がすべての Bean をマネージド Bean と見なすことの利点は何ですか?
java - CDI デプロイメントの失敗: WELD-001414 Bean 名があいまいです
複数のモジュールとさまざまな依存関係を持つアプリケーションがあります。アプリケーションを Glassfish 4 にデプロイすると、次のエラーが発生します。
原因は何ですか?これに関するトピックは既に見ましたが、解決策は注釈を編集することでしたが、これは私のものではなくEJB
、単なる依存関係です。この例外を回避するにはどうすればよいですか?
Java EE 6 と JDK 1.7 および Glassfish 4.0 を使用しています。
cdi - CDI 拡張機能、処理されたタイプの変更
Arquillian でのテストで Weld 1.1.13.Final を使用する....
フィールドに揮発性の何かを注入するとしましょう。変更されるプロパティのようなもので、注入ポイントを所有する Bean が変更イベントを受け取るようにする必要があります。CDI 拡張機能の作成について考えました。
ProcessAnnotatedType イベントをキャッチし、フィールド インジェクション ポイントにカスタム アノテーションを持つすべてのフィールドを探します。
その後、フィールドのすべての注入ポイントを取得し、基礎となる WeldField を「ラッパー」タイプに対応する新しいフィールドに置き換えました。そうでない場合、Bean の検証は失敗します。
しかし、これは起動中のセットアップでのみ機能します。たとえば、Arquillian が Bean Manager を使用して「ラップ」の 1 つを注入するクラスを初期化する場合ではありません。Bean Resolver は Type をハッシュ キーとして使用して Bean を検索するため、失敗します。
基本的に、カスタム イベントを受け取るための追加のメソッドを使用して、CDI によって注釈が付けられた (Bean になった) クラスを "マスク" できるとは思いません。クールだったでしょうが、Type は Type です (つまり、equals/hashCode をプロキシまたは偽造する方法がわかりません)。
java - JBoss と Weld が Eclipse にインポートしない
Beginning Java EE7 book の例に取り組んでいます。最初の例では、単純な Maven プロジェクトで Weld を使用する必要があります。すべてのファイルを Eclipse (Kepler) の Maven プロジェクトにコピーしました。しかし、Main.java アプリケーションには、機能しないインポート ステートメントがあります。Eclipse は、import org.jboss.weld.environment.se.Weld
「インポート org.jboss を解決できません。」私は Eclipse Marketplace に行き、最新の JBoss バンドルをダウンロードしました。これには Weld が含まれていると思われますが、それでもエラーが発生します。
行を右クリックして「プロジェクトのセットアップを修正する」を選択すると、ポップアップしていた他のエラーのいくつかを助ける修正を選択することができました。しかし、この特定の問題に対して行ったのは、「インポート org.jboss.weld.environment を解決できません」というメッセージを拡張したことだけでした。プロジェクトのセットアップの修正を再度実行しようとすると、解決策が提示されません。
ビルド パス ツールを調べてみましたが、このインポートを機能させる方法がわかりません。