問題タブ [cdi]
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.
jsf - JSF 2 ローカリゼーション (マネージド Bean)
ローカライズ用のプロパティ ファイルがあります。
resource-bundle
これは、faces-config で次のように関連付けられています。
EL を使用して facelets ビューでこれに問題なくアクセスできます。
ただし、SQLException などがある場合は、マネージド Bean からメッセージを書き込めるようにする必要があります。これもすべて機能しています:
問題は次のとおりです。これらのメッセージをプロパティ ファイルから取得して、ロケールに基づいて変更できるようにしたいのです。インジェクションを使用してプロパティ ファイルにアクセスする簡単な方法はありますか?
glassfish - Glassfish の @SessionScoped JSF2 Bean への @Stateless EJB の CDI (Weld) インジェクションで「ejbRef を ejb に変換できません」
[更新: Glassfish フォーラム/ML でhttp://forums.java.net/jive/thread.jspa?messageID=480532で議論した後、Glassfish https://glassfish.dev.java.net/issuesに対してバグが報告されました。この問題については/show_bug.cgi?id=13040を参照してください。]
@Stateless EJB のローカルの非インターフェース ビューを JSF2 @Named @javax.enterprise.context.SessionScoped バッキング Bean に注入しようとしています。EJB は、抽象ジェネリック基本クラスを拡張するいくつかのクラスの 1 つです。「@Inject TheEJBClass varName」の挿入は、「ejb TheEJBClass の ejbRef をタイプ クラス my.package.name.TheAbstractBase のビジネス オブジェクトに変換できません」で失敗します。[編集: 実際には、インジェクションは成功しますが、スーパークラスから継承されたメソッドのインジェクトされたプロキシでのメソッド解決は失敗します。]「@EJB TheEJBClass varName」を使用すると、varName は null のままです。つまり、何もインジェクトされません。
詳細:
Linux (重要な場合は Ubuntu 10.04) で Glassfish 3.0.1 を実行していますが、CDI (Weld) を使用してデータ モデル EJB を JSF2 セッション スコープ モデルに挿入する際に問題が発生しています。はい、あなたが尋ねる前に、beans.xml が配置されており、CDI がアクティブ化されてインジェクションが実行されています。
@EJB アノテーションを挿入すると、次のようになります。
... EJB は実際には注入されず、memberName は null のままです。
CDI @Inject アノテーションを使用して注入すると、次のようになります。
...次に、TheEJBClass のスーパークラスに実装され、TheEJBClass 自体でオーバーライドされていない「memberName」のメソッドを呼び出すと、CDI が不平を言い、次のように報告します。
ベースを具象クラスに変換して非ジェネ化しようとしましたが、同じ問題が発生したため、一般的なベースで Weld バグにヒットしているとは思いません ( https://jira.jboss.org/browse /WELD-305、https://jira.jboss.org/browse/WELD-381、https://jira.jboss.org/browse/WELD-518 )。
わかりやすくするために注釈に完全なパッケージ修飾を追加したコードの概要は次のとおりです。
TheEJBClass で TheAbstractBase.getValue() をオーバーライドするか、スーパークラスではなく TheEJBClass で定義されたメソッドを呼び出すと、インジェクションが機能することに注意してください。問題は継承に関係しているようです。
JSF2 のビルトイン ライフサイクルとインジェクション機能を使用する非常によく似たコードが機能しましたが、これが新しいプロジェクトであり、CDI が将来に向かっていることを考えると、CDI を試すのが最善だと思いました。JSF2/EJB インジェクションの使用から始めたものは次のとおりです。
私は現在、自己完結型のテスト ケースの作成に取り組んでいますが、これが何かばかげたことをしているだけの場合や、Google-fu ではないよく知られている解決策がある場合に備えて、今すぐ質問を開始すると考えました。見つけるまでt。JSF2/EJB インジェクションでは機能するのに、CDI インジェクションでは失敗するのはなぜですか?
(Glassfish フォーラムにhttp://forums.java.net/jive/thread.jspa?threadID=152567として再投稿されたため)
java - 開発中に新しく追加されたクラスを継続的にスキャンするようにjbossweldを取得できますか?
溶接を使用してTomcat6.0.29でJSF2プロジェクトを設定しています。また、jrebelを使用しています-それが違いを生むかどうかはわかりません。
JRebelをテストすると、コンテナーの開始時に存在していた更新クラスが正常に処理されていることがわかります。
ただし、新しく定義されたCDIコンポーネントクラスを追加し、アプリサーバーを再起動せずにアプリを再展開すると、再起動するまでファセットからアクセスできません。JRebelがクラスをロードしているように見えるので、weldがそれをbeanmanagerに登録していないと思います
CDIは起動時に構成をフックすることを意図していることを理解していますが、JSFが変更されたファセットテンプレートを取得する開発モードを備えているのと同じように、継続的なスキャンを有効にするために何らかの開発スイッチを用意するとよいでしょう。
これとJRebelが提供する機能は、生産性を大幅に向上させます。
これはできますか?溶接ドキュメントをざっと見てみましたが、何も見つかりませんでした。
ありがとう。
java-ee-6 - CDI-コンテナイベントの監視
CDIWebアプリケーションの起動イベントとシャットダウンイベントの両方を監視しようとしています。これらのイベントをリッスンするApplicationScopedBeanがあります。
ログに何も表示されません。
私は何が欠けていますか?
dependency-injection - GlassFish、CDI、およびコンストラクターの注入
管理対象 Bean の CDI の GlassFish 3.1 実装では、コンストラクター注入はサポートされていますか? @Singleton
コンストラクター注入を使用して別のマネージド Bean (同じ EJB モジュールに含まれる) を注入したい EJB があります。フィールドインジェクションは機能します。しかし、コンストラクター注入を使用すると、NullPointerException
from AbstractSingletonContainer
.
これは機能します:
これは動作しません:
java-ee-6 - 組み込みGlassfish-EJB3.1-@Schedule
私はJavaEE6を初めて使用し、最終的に多数のデモアプリケーションを実行できるように取り組んでいます。
理論的には毎分そのメソッドをトリガーする@Scheduleアノテーションが付いたアプリケーションスコープのBeanがあります。ただし、そのメソッドは呼び出されていないようです。呼び出されたことをログに書き込むだけです。
埋め込まれたGlassfishでEJB3.1を使用できますか?それを機能させるために何か特別なことをする必要がありますか?
ウォルター
java - CDIをJavaSEに向けて減らすことはできますか?
JSR-330の依存性注入は、JavaSE環境とJavaEE環境の両方に適用できますが、JSR-299のタイトルは「JavaEEプラットフォームのコンテキストと依存性注入」です。
厳密にJavaEE指向の機能を除いて、Java SEでもどのCDI機能が意味をなしますか?利用可能な例はありますか?ありがとう!
[改訂]これがJSEのWeldです。
java - CDI - イベントオブザーバー
私はすべて同じイベントを観察するイベントオブザーバーを持っているので、そのイベントを観察する抽象スーパークラスがあり、サブクラスが特定の機能をオーバーライド/実装します。
これの問題は、イベント オブザーバー メソッドをサブクラスに配置しない限り、イベントを監視しないことです (これは私の設計の目的を無効にします)。
私は間違いなくこの方法でそれを行うことができますが、できるだけ少ないコードを書きたいと思っています。
このように動作する必要がありますか (私は何か間違ったことをしていますか)?
このように動作することが想定されていない場合は、プロデューサーを作成してからインターセプターを作成できます。私の最初のアプローチはよりシンプルで、他の開発者が適切に使用する可能性が高いと考えました。
コード例:
スーパークラス:
サブクラス
このように記述した場合、handleReady は呼び出されません (また、onReady も呼び出されません)。しかし、サブクラス内でオブザーバー メソッドを使用して記述すると、期待どおりに動作します。書かなければならないコードがはるかに少なく、抽象化が少し少ないため、理解しやすくなるので、この方法で書きたいと思います。
ウォルター
java - JEE6 が Observer と Observee をリンクする方法 (Observer パターン)
JEE6 での Observer パターンの実装に関するいくつかのブログ記事を読みましたが、何か気になります...情報 atm が見つからないので、そこで質問します...
次の例を見つけました。
と
イベント コンシューマーとイベント プロデューサーの間のリンクがどのように行われるのか理解できません...
メソッドの命名規則によるものですか?(「オン」、「後」、「前」という言葉には意味があります)
指定された引数 (ここでは String と MyEvent) の比較によるものですか?
他に何ができるのかわかりません...
java-ee-6 - CDI インジェクションポイント @httpparam 問題
私は溶接のドキュメントに従います
セクション 4.11 で。インジェクションポイント オブジェクト
CDI を使用して http パラメータを取得する方法について、非常に興味深い例があります。
しかし、コードをコピーしてネットビーンズに貼り付けました。すべてがコンパイルされますが、展開エラーがあります
原因: org.jboss.weld.exceptions.DeploymentException: WELD-001408 インジェクション ポイントに満たされていない依存関係があります。インジェクション ポイント: java.lang.String のパラメータ 1 com.test.HttpParamProducer.getParamValue(javax.enterprise.inject.spi.InjectionPoint,javax.servlet.ServletRequest); 修飾子: [@javax.enterprise.inject.Default()]
この問題を解決する方法???