問題タブ [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.
java - 溶接では、注入される前にオブジェクトを初期化するにはどうすればよいですか?
簡単なPOJOクラスがあり、さまざまな場所に注入しています。そのための明示的なプロデューサーはありません。私はただそうします@Inject POJO mypojo
、そしてそれは素晴らしい働きをします。
ここでの私の問題は、POJOオブジェクト(データソースからの読み取りを含む)を他の場所に注入する前に初期化したいということです。データソース自体は@Resource(name = "jdbc/xx") DataSource ds;
、POJO内のように挿入されます。私のPOJOのコンストラクターでは、これds
はnullであり、コンストラクターが完了した後にのみ注入されます。
オブジェクトの作成後、インジェクションの前に取得できるフックはありますか?インジェクションの前にオブジェクトを初期化できますか?
methods - プロデューサーメソッドによって作成された Bean への CDI インジェクションを有効にする
プロデューサー メソッドは、インスタンスをプログラムで作成し、コンテキストで公開する場合に非常に便利です。問題は、プロデューサー メソッドによって作成され、返されるインスタンスのすべてのプロパティが、new
CDI によって注入されないことです。Weld のドキュメントでは、これは意図的な動作であると読みましたが、多くの場合、これらの Bean への注入は非常に便利です。
そのような Bean へのインジェクションを有効にする回避策はありますか?
java - 溶接が注入されていません
私はjavaSEでweldの非常に単純な実装をセットアップしようとしています。
私は拡張クラスを持っています:
次に、注入したい単純なクラスがあります。
そして最後に、私がそれを注入したいクラス:
結果の出力は次のとおりです。
Test()が構築され、期待されるテキストを出力するpostconstructメソッドが呼び出されるときに、単純なクラスが注入されることを期待します。
私は正確に何を間違っているのですか?
javafx-2 - 溶接を使用したJavafx2.0のブートストラップ
Weld-SEを使用して小さなjavafxアプリケーションをブートストラップしようとしています。@Inject
のアノテーションを削除しMenubar
て手動でインスタンス化すると、アプリケーションを実行できました。しかし、@ Injectを追加すると、アプリケーションは例外をスローします。以下にリストされているのは、注入ポイントとプロデューサーメソッドです。これが私が行ったすべての構成ですが、何かが足りませんか?
インジェクションポイント
プロデューサーメソッドを使用したクラス
例外
eclipse - WLS12cおよびOEPEでのデプロイメント・エラーWeld-001408
OEPE で次のプロジェクトを作成しました。
- weld001408 (Java EE - エンタープライズ アプリケーション プロジェクト)
- weld001408utility (Java EE - Uitility Project)、耳のweld001408に属します
- weld001408web (Web - 動的 Web プロジェクト)、耳のweld001408 に属します。
プロジェクトを作成したとき、デフォルト (耳のメンバーシップのみ) を変更せず、ターゲット ランタイムは Oracle WebLogic Server 12.1.1 です。そして、ウィザードで作成されたクリーン ドメインがワークスペースに追加されます。
コードは次のとおりです。
ユーティリティ プロジェクト
クラス 'weld001408utility/ValueProducer.java'
META-INF/beans.xml
ウェブプロジェクト
weld001408web/ValueConsumerServlet.java
WEB-INF/beans.xml
問題
アプリケーションを Eclipse にデプロイしようとすると、常に WELD-001408 エラーが発生します。
しかし、Eclipse から ear をエクスポートし、そのファイルを weblogic 管理コンソールにデプロイすると、すべてが正常に機能し、値がサーブレットに正しく挿入されます。展開に問題はありません。
weblogic にはいくつかのパッチがあり、最新のものをインストールしています (私の問題に関連する可能性のある多くのバグをチェックしましたが、それらはすべて 12.1.1.0.2 に含まれているはずです):
Windows Vista と、最新の OEPE バージョン (オールインワン パッケージ) を備えた Linux ベースのシステムで同じアプリケーションを試しましたが、成功しませんでした...
質問
誰かがまったく同じ問題を抱えていますか? 誰かが問題を再現することは可能ですか? そうでない場合、どの構成でどのパッチが機能していますか?
それが Eclipse 用の Oracle Enterprise Pack なのか、WebLogic の問題なのかはわかりません。
助けてくれてありがとう!
servlets - Jetty 8のサーブレット(埋め込まれていません!)+CDI用の溶接
Jetty 8にWARをデプロイしたいと思います。WARには、CDI(Weld)を介して依存関係が注入された単純なサーブレットが含まれています。
私がオンラインで見つけたすべての例/質問は、埋め込まれたJettyのみを扱っているようです-外部サーブレットコンテナとしてJettyを使用することについては何もありません。
私はこれらの部品がどのように組み合わされるかについての私の知識を最大限に活用してすべてを設定しましたが、システムがすべてが注入に問題ないと言ったとしても、注入は行われないようです。
META-INFに裸のbeans.xmlがあります。
私のpom.xml、jetty-context.xml + jetty-env(私のWEB-INF内)、サーブレット、インジェクトの実装+実装:
戦争が展開されると、最初はすべてが問題ないように見えます。
Mar 08, 2013 3:38:42 PM org.jboss.weld.bootstrap.WeldBootstrap <clinit>
INFO: WELD-000900 1.1.10 (Final)
Mar 08, 2013 3:38:42 PM org.jboss.weld.bootstrap.WeldBootstrap startContainer
INFO: WELD-000101 Transactional services not available. Injection of @Inject Use
rTransaction not available. Transactional observers will be invoked synchronousl
y.
Mar 08, 2013 3:38:42 PM org.jboss.weld.environment.jetty.JettyPost72Container in
itialize
INFO: Jetty7 detected, JSR-299 injection will be available in Listeners, Servlet
s and Filters.
init init init init init init init init init init init init init init init!!!!!!
!!!!!!!!!!!!!!
...次に、サーブレットの41行目のインジェクティにアクセスしようとするとnullポインタを取得します。
明らかな何かが欠けていますか?Weldは、CDIにとってすべてが良いと言っていますが、そこには何も表示されません。
編集:私はまた、すべてをJetty 7.6.9.v20130131(ドキュメントによるとWeldでサポートされています)に合わせてこれを試しました
乾杯、あなたが提供できる洞察に感謝します。
java - WELD-001303 スコープ タイプ javax.enterprise.context.SessionScoped のアクティブなコンテキストがありません
私はあらゆる場所を検索しましたが、このエラーを解決するための最良の答えを見つけることができないようです.スタックトレースがあります.誰かが私に何が起こっているのか教えてもらえますか. :(
netbeans - 溶接-seとnetbeans:デバッグが機能しない
依存性注入のサポートを得るために、javaSEアプリケーションをWeldSEに移植しようとしています。アプリケーションが起動し、正しく動作します(ContainerInitializedイベントのメインをオブザーバーに変更し、beans.xmlを追加し、org.jboss.weld.environment.se.StartMainクラスで開始しています。また、いくつかのインジェクトが表示されます。正常に動作します)。
ただし、netbeansではデバッグが機能しなくなったようです。変更を元に戻して、溶接SEを使用せずにセットアップに戻し、デバッグが再開されました。
私はnetbeans7.3を使用しています。私は何か間違ったことをしていますか、それともWeld SEアプリケーションのデバッグが期待どおりに機能するようにNetBeansで構成するための特別な何かがありますか?
編集:この同じJavaSEプロジェクトには、GlassfishサーバーへのJMS要求を行うことができるように、Glassfishへの依存関係も埋め込まれているため、競合であることが判明しました。
Glassfish-embeddedとweld-seの溶接ライブラリが互いに競合しているか、デバッガを混乱させていると思います。今のところ、この作業を行うことができませんでした。
cdi - Bean クラスがパラメーター化されたインターフェースを実装し、一部のパラメーター化されたインターフェースも拡張する場合の CDI Bean タイプの解決の問題
問題を説明するための語彙が不足しているため、失敗を再現し、原因を見つけるのに役立つ例を使用して説明します。
2 番目のブロックは、 に従って、Bean クラスBeanClass1
およびの Bean タイプのセットを示しています。そこで、Bean タイプ セットにorの代わりにタイプが含まれていることがわかりました。BeanClass2
Weld
BaseType<T>
BaseType<SomeType1>
BaseType<SomeType2>
そのため、記憶BeanClass2
する間接インターフェースに対応するBaseType<P>
のBean タイプは、実際の型パラメーターではなく、型変数を持ちます。したがって、この仕様の最後の点によると、は誤って に割り当て可能と見なされます。Weld
T
SomeType2
BeanClass2
BaseType<SomeType1>
これは望ましい動作ですか、それともバグですか? 回避策はありますか? 新しいWeld
バージョンで修正されましたか。
テストは、maven アーティファクト org.jboss.as:jboss-as-weld:7.1.1 を使用する JBoss AS 7.1.1 で実行されました。
編集:この問題の原因は、最初の回答が示唆するように型の消去ではなく(削除されました)、のバグだと思いますWeld
。Bean タイプを生成するために必要なすべての情報は、実行時に利用できます。Weld
バグは、リフレクションによって Bean クラスの Bean タイプを生成するときだと思います。型変数の解決は再帰的であるべきですが、明らかにそうではありません。
ライブラリを使用してこれを達成するメソッドを作成およびテストしたため、間接インターフェイスの Bean タイプを生成するために必要な情報が実行時に利用できると確信しています。つまりType
、Java クラスの祖先ごとにインスタンスを生成/取得し、型変数を再帰的に解決します。関連するメソッドをここに書き込もうとしましたが、コードを貼り付けるときにフォーマットの問題がありました。そして、ライブラリが長く、文書化が不十分であるという事実が、私にあきらめる理由を与えました。
少なくとも、間接インターフェースの型変数を解決する方法の本質を示すために、次のコードを書きました。これは特定のクラスに対してのみ機能しますが、ある程度の努力で一般化できます。
これにより、型の消去がこの問題の原因であると信じられなくなることを願っています。
java - セッションスコープのBeanに挿入されたHttpSessionがnullである
Jetty6.1とWeld2.0でGWTアプリを実行しています。次のコードを取得しました:
何が欠けていますか、なぜHttpSessionが挿入されないのですか?参照によるとInjecting the HttpSession will force the session to be created.