問題タブ [jboss-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.
servlets - サーブレットに CDI セッション Bean を挿入する
私は自分のプロジェクトでインジェクト (@ Inject) CDI Beans スコープ Request と Session をサーブレットに入れています。問題は、セッション Bean CDI の状態が維持されないことです。サーブレットから Bean の状態を変更しようとしましたが、ページから回復しようとすると、サーブレットが状態の変更に失敗したかのようになります。誰かが私を助けることができますか?
java - 工場ベースのオブジェクト作成をCDIメカニズムに置き換えます
プロジェクトにCDI(Weld)を導入したかったのですが、手動で作成されたオブジェクトで問題が発生しました。
したがって、インターフェイスを実装するクラスがいくつかIReport
あり、注入する必要のあるフィールドがあります。これらのクラスはすべて、クラスReportFactory
内のによって生成されているため、これは実行時にnullになりますReportController
。
@Produces
でアノテーションを別のカスタムアノテーションと一緒に使用できることは知っていますが、メソッド内で検証が行われた後にのみ作成できる変数ReportControllerFactory
にを使用するにはどうすればよいですか?そして、どのようにパラメータを送信しますか?が構築されたとき、オブジェクトは不明です。@Inject
ri.getClassName()
ri
ReportController
どうもありがとうございます!
よろしく、セバスチャン
2011年7月8日(10:00)に編集:
ReportFactoryクラス:
編集2(適切なレポート実装の選択)
レポートインスタンスは、JSFフロントエンドからReportControllerに向かういくつかのパスによって選択されます。ManagedBeanは、どのボタンがどこで押されたかに応じて、いくつかのメソッドを持つセッションBeanを呼び出します。これらのメソッドはすべて、レポート名を設定し、より一般的なメソッドを呼び出しますsendOrGetReport
。このメソッドは、指定されたレポートの一意のキーをデータベースから選択し、電子メールを送信するか、すぐにレポートを配信するかを決定します。配達されるべきだとしましょう。
次に、ReportController
が登場します。ReportInfo
彼は、上記のメソッドによって提供された一意のキーとその他の情報に基づいてオブジェクトをフェッチし、を呼び出してReportFactory
タイプのレポートを作成しますri.getClassName()
。
ファンシーですね このセクション全体でリファクタリングが必要になると思います。簡単な場所が見つからない場合は@Inject
、レポートの実装をスキップして、そのリソースのJDNIルックアップを実行します。
java - 溶接セコアと溶接サーブレットコアを使用すると、CDI が動作しなくなりますか?
Weld-SEで遊んでいます。プラグ可能なモジュールを持つプロジェクトがあります。1つのモジュールで、溶接が機能します。を使用する他のモジュールweld-servlet-core
がクラスパスに配置されると (deps とともに)、CDI が動作を停止し、「依存関係 XY を解決できません」または (それを削除した後@Inject
)のようなエラーが発生します。
クラスにはありますが@Interceptor
(同じクラスが他のモジュールで正常に動作します)。
をデバッグするWeldBootstrap#startContainer(Environment environment, Deployment deployment)
と、
deployment.beanDeploymentArchive.beanClasses
インターセプター ( "org.jboss.weld.environment.se.jpa.JpaTransactionInterceptor"
) が含まれます。
依存関係と TattleTale レポートを確認しましたが、すべて問題ないようです。
次に何を見たり試したりするべきか?
プロジェクトはhttp://ondrazizka.googlecode.com/svn/trunk/bots/JawaBot/branches/2.0/にあります。エラーを表示するには、mvn dependency:copy-dependencies java -cp ... org.jboss.jawabot を実行します。 JawaBotApp または、単純に NetBeans で Web モジュールを実行します。
ありがとう、オンドラ
更新: JIRA: https://issues.jboss.org/browse/WELD-940
また、Weld のスキャン拡張機能のバグが原因である可能性があることがわかりました<weld:scan>
。
java - JavaEE と CDI: @Observe を理解する
私はアーキタイプを持っておりorg.jboss.weld.archetypes:jboss-javaee6-webapp:1.0.1.CR2
、クラスを理解しようとしていますMemberListProducer
:
オブザーバーは、別のクラスから呼び出されますmemberEventSrc.fire(newMember);
。これは明らかです。一度起動されるとMemberListProducer
、メンバーのリストが更新されます。
@RequestScoped
しかし、これがBeanで行われる理由がわかりません。私の理解では、メソッドretrieveAllMembersOrderedByName
はとにかく各リクエストによって呼び出されます。これはor Bean@Observes
に配置したほうがよいのではないでしょうか? この場合、それはまったく効果がありますか?@ViewScoped
@SessionScoped
eclipse - Java EE 開発の迅速なターンアラウンドのための理想的なセットアップは何ですか?
現在、Eclipse Indigo と JBoss 6 を使用して Java EE 6 アプリケーションを実装しているときに、プロジェクトのセットアップに苦労しています。アプリケーション サーバーと IDE は、プロジェクトでほとんど設定されています。Maven 3 が使用され、WELD アーキタイプを使用して WAR を作成することにより、セットアップのベースとなりました。
さて、問題は、開発のターンアラウンドに非常に失望していることです。Eclipse 内で自動再デプロイが機能しておらず、JBoss が新しいパブリッシングと混同されて正しく再デプロイできないため、JBoss を再起動する必要があることがよくあります。これは非常にイライラし、時間がかかります。(さらに、スクリプト言語を好む人たちからのにやにや笑いを感じます。)
以前のプロジェクトでは Seam 2 を使用しており、seam-gen によって作成されたプロジェクトは、Java クラスを変更するたびに手動でアプリケーションを再起動する必要がありましたが、ある程度適切な再公開が行われました。次に、Netbeans 7 と統合された GlassFish 3.1 をいじってみると、自動再デプロイが正常に機能していることがわかりました。また、Java EE 6 は非常に広く普及しているため、現在よりも優れたセットアップが存在するに違いないと思います。
この投稿で、JBoss と Eclipse で Java EE 6 ベースの WAR プロジェクトを流暢に開発するための適切なプロジェクト設定について、さらに洞察を得たいと思います。ベスト プラクティスを共有できる人はいますか?
どうもありがとう!
jsf - JSF:フォーム送信なしのボタン/リンク
以前のプロジェクトでは、フォームを送信せず、モデルの更新が行われなかったため、何かをキャンセルするときにSeam 2のs:buttonまたはs:linkをよく使用していました。
今、私はWELD + Seam 3に切り替えましたが、もうそこに見つかりませんでした-私はただ盲目ですか、それとも他のものを使用する必要がありますか?
Geziefer
initialization - CDI / Weld SE - @Observes ContainerInitialized が機能しない
この方法でブートストラップされた Weld SE があります。
そして、次の豆
Weld docs によると、init()
メソッドを呼び出す必要があります。しかし、そうではありません。他の Bean は正常に動作しています。
何が間違っている可能性がありますか?
dependency-injection - seam-wicket CDI を使用するために wicket クイックスタートを設定するにはどうすればよいですか?
wicket クイックスタート プロジェクトで CDI を機能させるには、何をする必要がありますか? Jetty サーバーを起動しようとすると、例外が発生します。
私は改札プロジェクトを作成しています。Seam、Weld、または CDI については、最初はわかりません。小さなプロジェクトに組み込んで学びたい。私はこのリファレンスドキュメントに従っています:
http://docs.jboss.org/seam/3/wicket/latest/reference/en-US/html_single/
今、私は答えを見つけようとして、エイリアンの文書の海を泳いでいます。ヘルプ!
編集:
wicket クイックスタートの Jetty サーバーは、プログラムで作成されます。以下のドキュメントに基づいて、作成しました。
webapp/WEB-INF/jetty-env.xml
:
にweb.xml
、次のスニペットを追加しました。
次の Java コードは、Start の実行時にクイックスタート環境で Jetty サーバーをセットアップする役割を果たします。
私のMaven依存関係によると、私はjettyバージョン6.1.25を使用しています。
testng - TestNG-@ Before *アノテーションを使用するとインジェクションは失敗しますが、
@Inject
TestNGテストケースでアノテーションを使用したいと思います。テストは、リモートのJBossAS6インスタンスでArquillianによって実行されます。テストは基本的に次のようになります。
テストケース
いつ働くか...
initTestData()
単一のテストメソッドでメソッドを手動で呼び出す場合、使用するリソースを適切に注入しています。
動作しないとき...
上記のアノテーション(、、、)のいずれかを使用すると@BeforeClass
、@BeforeTest
注入@BeforeMethod
されたすべてのリソースがnull(utxとem、およびテストしたい他のクラス)であるため、テストケースは失敗します。
だから、私は自分自身とあなたの人々に尋ねています:そこで何が悪いのですか?
よろしく、セバスチャン
java - 一部のモジュールではCDIインジェクションが機能しないのに、他のモジュールでは機能しないのはなぜですか?
私のJavaEEプロジェクトには、いくつかの「JavaEE」モジュールとWebモジュールがあります。Java EEモジュールの1つは、他のモジュールによって使用されるクラスをCDIに提供します。
それらはに注入されます
ただし、これはJavaEEモジュールの1つとWebモジュールでのみ機能します。残りのすべてのJavaEEモジュールでは、インジェクションは一貫して失敗します。理由はわかりません。取得するのは WELD-1408、依存関係が満たされていないことだけです。
すべてのモジュールはbeans.xml
適切な場所にあり、インジェクションに切り替えない限り、すべて機能します。ターゲットBeanのほとんどは、JSFで注入されたBeanとしてすでに使用されています。動作するJavaEEモジュールの特別な点は、BeanがJSFではなくWebモジュールのサーブレットに注入されることです。
プロジェクトは、GlassFish3.1のJavaEE 6、EJB3.1で実行されます。依存関係はMaven3によって管理されます。X
それ自体はSerializable
、不動態化スコープを満たすためです。
以前にこれに出くわしたことがありますか?私は何を間違えたのでしょうか?
更新:上記の依存関係管理の注釈を追加しました。
更新:の位置を修正し@Actual
ましたTarget
。
更新:1日の実験の後、詳細を含む説明を更新しました。