問題タブ [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 - cdi を使用してキャッシュされたインスタンスを注入する
@Inject を使用して、外部フレームワークによって管理されているインスタンスを CDI アプリケーションに公開したいと考えています。これらのインスタンスは、ライフサイクルがさまざまなキャッシング戦略に基づいているため、この別のフレームワークを提供する必要があります。
例: 同じスレッド スコープ内で同じインスタンスが表示され、多くのリクエスト スコープにわたって存在する可能性があり、セッション スコープは適用されません。これらの種類のインスタンスを対象とする新しいスコープを定義する必要があるようですか?
これを行う最善の方法は何ですか?エクステンション、プロデューサーメソッドで可能ですか?
以下を使用してプロデューサーメソッドで動作するようになりました。
しかし、これにより、共通のフレームワーク インターフェイスがないため、生成された型について明示することができなくなりました。
どんな助けでも感謝します。
java - WELD-000044org.jboss.weld.bean-se-module-ProducerFieldからインスタンスを取得できません
DAOクラスにエンティティマネージャーを挿入し、溶接コンテナを使用してテストしようとしていますが、次の例外が発生し続けます。
org.jboss.weld.exceptions.NullInstanceException:WELD-000044org.jboss.weldのorg.jboss.weld.bean-se-module-ProducerField-com.playground.cdi_tutorial.beans.Resources.emからインスタンスを取得できません。 bean.builtin.CallableMethodHandler.invoke(CallableMethodHandler.java:60)at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)at javax.persistence.EntityManager _ $$ _ javassist_2.createQuery(EntityManager _ $$_javassist_2。 java)at com.playground.cdi_tutorial.model.EventDAO.getAllEvents(EventDAO.java:22)at com.playground.cdi_tutorial.beans.ValidationService.validateEvenNumbers(ValidationService.java:23)at com.playground.cdi_tutorial.beans.MyFactory .sayHi(MyFactory.java:15)at com.playground.cdi_tutorial.beans.MyFactoryTest.should_say_bye(MyFactoryTest.java:26)atsun.reflect。NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method。 java:601)org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)atorg.junit。 runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java: 79)org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)でorg.junit.runnersで。BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)at org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193)at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52)at org.junit .runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184)at org.junit.runners.ParentRunner.run(ParentRunner.java:236)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)atorg.eclipse.jdt.internal.junit。 runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner。 runTests(RemoteTestRunner.java:683)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
私は次のようにエンティティマネージャーを注入しようとします:
EmProducerは次のようになります。
}
そして、プロデューサークラスは次のようになります。
私のテストでは、このコード行がヒットすると、Query q = em.createQuery( "from Employee"); 上記の例外が発生します。ただし、エンティティマネージャemはnullではありません。
PS:テストの実行にはWeldJUnit4Runner(http://www.hostettler.net/blog/2012/04/02/how-to-test-a-jsf-named-bean/)を使用しています。
よろしくお願いします。
ありがとう!
java - Seam 永続性をスタンドアロン アプリ (Web コンテナーの外部) で使用できますか?
Seam の永続性 (http://www.seamframework.org/Seam3/PersistenceModule) をスタンドアロンの溶接アプリケーションで使用できますか? スタンドアロンは、Web コンテナーの外部にあるアプリケーションを意味します。単純な Java アプリケーションです。
答えは理論的にはイエスだと思いますが、闇に潜む依存関係 (サーブレット / Java EE / など) ではないかと思います。
スタンドアロン アプリケーションで Weld を使用して満足しています。Seam の永続性を使用できるかどうかを調べてみました。
この可能性を検証/無効にするドキュメントは見つかりませんでした。
cdi - CDI を使用したクラス アノテーションの変更
CDI 拡張イベントを使用してJAX-RS リソースProcessAnnotatedType
を変更しようとしています。@javax.ws.rs.Path
...その後、ブートストラップの後、使用してBeanを構築するとjavax.enterprise.inject.spi.BeanManager
、次のコードが「change_me/....」を出力することが期待されていました
...しかし、これは機能しません。javax.ws.rs.Path
JAX-RS リソース 'jaxrsClass' については変更されていません。
なにが問題ですか?
ant - ArquillianWeld-ant+ivyを使用したEEテストのセットアップ
スタートガイドに従ってプロジェクトを立ち上げました。私はツタを使わなければなりません。これらは私の依存関係です:
問題:「*」にマップしましたが、他動詞は解決されません。ツタに悩まされているからといって、すべての瓶を手作業で追加する必要がありますか?または私は何かが欠けていますか?
明確化:
マッピング「myconf->default()」transitive="true"を使用します。私はこれを次のように読みました:「依存関係のデフォルトのconfを取得し、それを「myconf」にマップします。():依存関係が「default」を提供しない場合は、提供するすべてのconfを使用します。これはすべて推移的に行う必要があります。すべてのサブ依存関係もマップされます。
しかし、私が得たのは、指定されたjarだけであり、テストを実行すると多くのCNFEが発生します。Mavenプロジェクトで参照されているarquillian-containerpomについて読みましたが、ツタとarquillianの「すぐに使える」依存関係マッピングメカニズムが機能しないのではないかと心配し始めています。誰かがこれを確認したり、私が使用できる(最良の:テスト済みの)依存関係構成を提供したりできれば幸いです。どうもありがとうございます!
jsf - jsfでBusyConversationExceptionを回避する方法
jsfプロジェクトのページをナビゲートしているときにBusyConversationExceptionが発生します。これは主に、ユーザーがajax呼び出し中に別のページに移動しようとした場合に発生します。これは、ユーザーがページの読み込みを待たずに別のリンクをクリックした直後にリンクをクリックした場合にも発生します。
たとえば、ユーザーが以下のようなコードを介して生成された複数のリンクをクリックすると、間違いなくこの例外が発生します。別の例は、ユーザーがテキストフィールドにクエリを入力し、アプリケーションがこのクエリを検索するためにajax呼び出しを行うとします。そのクエリ中に、ユーザーがボタンをクリックして別のページに移動すると、BusyConversationExceptionも発生します。
このタイプの例外は、ExceptionHandlerWrapperクラスを拡張するExceptionHandlerクラスでキャッチできますが、現在の状態を保存できません。この場合にできる最善の方法は、この例外が発生したときにメインページにリダイレクトすることです。
これを回避するための解決策はありますか?回答とコメントを事前に感謝します。
java - 注入された (@Inject) フィールドは安全に公開されますか?
クラスでフィールド注入を使用すると、次のようになります。
このフィールドの「安全な公開」ステータスについて何か推測できますか? 別の言い方をすれば、MyClass 自体がスレッドセーフであると仮定すると、このフィールドを使用する際に注意すべき同時実行のリスクはありますか?
私の本能は通常、可能であればすべてのフィールドを最終的に作成することですが、フィールド注入では機能しません。もちろん、コンストラクター インジェクションを使用することもできますが、通常は、プロキシ処理のためだけに追加の「偽の」引数なしコンストラクターを作成する必要があります。大した問題ではありませんが、フィールド注入を使用する方が便利です。別のオプションとして、フィールドを揮発性としてマークすることもできます (または、ロックを使用することもできます...) が、それは本当に必要ですか?
JSR-299 仕様は、この質問に答えていないようです。Weld などの実装で CDI を使用しています。
- 注入先のオブジェクトは、複数のスレッドで使用されます (たとえば、@ApplicationScoped です) 。これ欲しい。
- MyClass が不変の場合、安全な公開は問題にならないことを理解しています。しかし、必ずしも不変オブジェクトだけを注入するとは限りません。
- MyClass 自体はスレッドセーフであると想定されています。これは私の関心事ではありません。Java メモリ モデルの規則により、スレッドが MyClass の半分構築されたインスタンスを参照する可能性など、厳密には安全でないパブリケーションに関する懸念があります。
java - CDI会話IDは常に1であり、会話を再開しようとしたときにNonexistentConversationExceptionがキャッチされました
CDI会話を共有している2つのJSFコントローラーと3つのバッキングBeanがあります。最初のコントローラーが呼び出された後、JSF以外のWebアプリケーションが呼び出されてユーザーがログオンし(OpenAM / OpenSSO)、次に2番目のコントローラーが呼び出されます。会話IDは、2番目のコントローラーのページ要求に「?cid=1234」を追加することで保持されます。
私のコントローラーには次のような注釈が付けられています。
@Named(javax.inject.Named)
@ConversationScoped(javax.enterprise.context.ConversationScoped)
コントローラーは次のように注入されます。
@Inject(javax.inject.Inject)
プライベートな一時的な会話会話。(javax.enterprise.context.Conversation)
バッキングBeanには次のように注釈が付けられます。
@Named(javax.inject.Named)
これは、CDIにWeldを使用するJBoss7.1で実行されています。
これは正常に機能していましたが、無関係な変更を加えた後は機能しなくなりました。
ここでの問題は、最初のコントローラーが呼び出され、conversation.begin()を呼び出すと、返された会話IDが常に1になることです。さらに、2番目のコントローラーに戻ると、次のエラーが発生します。
org.jboss.weld.context.NonexistentConversationException:WELD-000321ID1の復元する会話が見つかりません
新しいセッションでWebアプリに何度もアクセスしてみました。また、さまざまなタブやさまざまなブラウザーからWebアプリにアクセスしてみました。会話ID「1」が常に返されます。また、私が知る限り、2つのコントローラー呼び出しの間のセッションまたは会話をいつでも強制終了することはありません。
java - Java Weld null 式ファクトリー
JBoss AS 7.1.1 + CDI (Weld) + JSF + Intellij IDEA を使用しています。プロジェクトを作成し、ファイルをダウンロードしました。
そして、Weld の使用を開始する (beans.xml を作成し、ManagedBeans の名前を Named に変更する) までは、すべて問題ありません。この後、アーティファクトはエラーでデプロイを停止します:
"CONFIGURATION FAILED! WELD-001001 null の expressionFactory を渡すことはできません".
どこが間違っていますか?テクノロジーのバージョンに互換性がない可能性がありますか?IDE Idea でファイルをダウンロードしました。
編集: