問題タブ [weld-se]
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 - src/test/META-INF/beans.xml の代替プロデューサーを使用して溶接する
Weld SE 2.3.0.Final を使用して、テスト中に注入された依存関係の代替実装を交換しようとしていますbeans.xml
。src/test/resources/META-INF
ただし、常にメインバージョンを使用しているように見えますが、そのbeans.xml
理由はわかりません。
まず、サポートクラスはこちら
エンジン.java
DefaultEngine.java
車.java
EngineProducer.java
App.java
そして、の製品beans.xml
版src/main/resources/META-INF
上記のコードを App.java から実行すると、出力されるはずです (出力されます)。
SportsEngine
テストコードから、実装を使用したいと思います。だから私は次のものを持っています
SportsEngine.java
TestEngineProducer.java
AppTest.java
WeldJUnit4Runner.java
そして、のテストbeans.xml
版src/test/resources/META-INF
テストメソッドが実行されると、印刷されます
しかし、代わりに のEngineProducer
代わりにを使用しているようでTestEngineProducer
、出力を 2 回出力します。
テストの beans.xml を使用しないのはなぜですか?
テストの beans.xml からセクションを配置<alternatives>
してメインの beans.xml に配置すると機能しますが、テスト中に main/resources/META-INF の beans.xml を交換したくありません。
java - 溶接 SE アプリケーションの実行可能 jar を取得する方法
eclipse 内からアプリケーションを実行すると (weld se: org.jboss.weld.environment.se.StartMain の main メソッドを使用して) 正常に動作する、weld se を使用する小さな cli アプリケーションがあります。
問題は、動作する実行可能な jar を作成できないことです。現時点では、maven-assembly-plugin を使用しています。
また、シェードプラグインを次のように試しました:
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
しかし、すべての場合で、同じ多くのエラーが発生します。
その間、私も追加しようとしました
ここで提案されているように、私の beans.xml に。変化なし...
java - Java SE の Weld は代替を使用しません
projectA
、projectB
、およびprojectC
Eclipse Maven プロジェクトがあります。
ProjectA
内容:IMyApi
インターフェース。- 「空の」
META-INF\beans.xml
ファイル。
ProjectB
内容:IMyConfig
インターフェース。MyConfigJndi
の実装IMyConfig
。MyApiImpl
IMyApi
プロパティを持つ の実装@Inject private IMyConfig config;
。- 「空の」
META-INF\beans.xml
ファイル。
ProjectC
内容:- としてマークされた の
MyConfigAlter
実装。IMyConfig
@Alternative
- Weld SE を初期化し、 Beanを取得する
Main
クラス (およびメソッド) 。IMyApi
- セクションに記載されている
META-INF\beans.xml
場所。MyConfigAlter
alternatives
- としてマークされた の
ここで、Main
クラスを実行すると、 Bean が (インスタンスIMyApi
として) 正常に取得されます。MyApiImpl
しかし、そのようなインスタンスには、そのプロパティで、代替バージョンの代わりにインスタンスがconfig
注入されています ( )MyConfigJndi
MyConfigAlter
Eclipse Luna + M2Eclipse を使用しています。
私は何を間違っていますか?
@Specializes
更新:代わりに使用すると問題が解決することがわかりましたが@Alternative
、それでも適切な解決策ではないと思います(状況によっては、「デフォルト」の実装にアクセスできない場合があります)。
更新 2:
私はWeld-se、2.2.10.Finalを使用しています:
そして、初期化は単純です
xml - Weld 実装を使用した Java SE アプリでの IllegalAccessError
CDI の Weld 実装を備えたスタンドアロン アプリを実行しようとしています。そのアプリでは、Oracle データベースと連携するために EntityManager が必要です。
(Weld メイン メソッドを使用して) アプリを実行すると、cmd 行に次のように表示されます。
このようなエラーの原因は何ですか?
ここに私のpersistence.xmlがあります:
依存関係は次のとおりです。
かなり標準的な Entity Manager を作成する方法は次のとおりです。
java - Weld Se Applicaton を実行しようとするとエラーが発生する - Weld SE コンテナを初期化できない - Bean アーカイブが見つからない
Weld SE を使用して単純な JavaSE アプリを作成します。私はgradle runで実行しようとしていますが、例外がスローされます:
私が理解しているのは、beans.xml ファイルが見つからないということです。しかし、それは src/main/resources/META-INF/beans.xml にあります:
私の主なクラスは次のとおりです。
ビルド gradle ファイルは次のとおりです。
spring-data - Weld SE CDI の Spring Elasticsearch データ リポジトリ - UnsatisfiedResolutionException
Weld SE を使用して、SE アプリケーションに Spring データ リポジトリ (この場合は Elasticsearch) を挿入しようとしています。
リポジトリ
ElasticsearchTemplate の定義:
Main (アプリケーションは org.jboss.weld.environment.se.StartMain で実行されます) は次のように単純です。
依存関係は次のとおりです。
春のコンテキストを除外しましたが、コンテキストを除外するかどうかにかかわらず、同じ例外が発生します。
resources\META_INF\beans.xml 内:
スローされる例外は次のとおりです。
この問題の原因は何ですか?
java - Java SE環境でのアプリケーションの溶接コンテナサービスはどうですか?
私は溶接の初心者であり、数日間の調査を通じて、溶接の基本的な概念しか知りません。
私はJava SE環境で溶接コンテナを使用するつもりです。Java SEでCDIとJPAを使用する最も簡単な方法は何ですか? 私のコードセグメントは以下の通りです:
私のアプリケーションはmavenに基づいています。pom.xmlの jar 依存関係セグメントは次のとおりです。
私の意図は、SayHello オブジェクトを UseInject オブジェクトに挿入することであり、このアプリケーションの最終出力は "Hello" です。しかし、物事はそれほどスムーズではなく、jvm は次のエラーを報告します。
そして、インターネットから検索すると、空のbeans.xmlを作成しても問題ないということわざがあり、私はそれに従うと効果がありません。そして、主な方法については、私が模倣する Java SEでCDIとJPAを使用する最も簡単な方法は何ですか? Java SE で CDI と JPA を使用する最も簡単な方法は何ですか? @Producesアノテーションを使用します。私もそれを使用する必要があるかどうかわかりません。そして、SayHelloクラスに使おうと思ったのですが、どのjarをインポートすればいいのか分からず、断念。
今私がしたいこと: 1. se アプリケーションの溶接サービスの方法、つまり main メソッドが何をするかを知りたいですか?
2. 溶接を使用してアプリケーションを正常に実行するにはどうすればよいですか?
3. @Produces アノテーションを使用する必要がある場合
そして、私は多くの関連する問題、例えば、weld や java se JUnit テストでweld-se をブートストラップする方法などを参照しましたが、それらはすべて私にとって上級者であることがわかりました。 ご清聴ありがとうございました。
dependency-injection - CDI 拡張機能によるあいまいな依存関係の解決
独自のプロキシ Bean を作成する既存の CDI 拡張機能を変更しようとしています。これで、サービスごとに 1 つのプロキシのみが作成されます。サービスにはアプリケーション スコープのようなものがあるため、サービスのインスタンスは常に 1 つだけです。
私が達成したいことは、すべての注入ポイントに対して単一のプロキシ Bean を作成することです。特定の注入ポイントに固有の情報を保存するために必要です。同じサービスに対してより多くの注入ポイントがある場合、より多くのプロキシ Bean が存在しますが、それらの背後にあるサービスの 1 つのインスタンスは依然として存在します。ただし、このように動作を変更すると、まったく同じ 2 つのプロキシから選択できないため、Weld はあいまいな依存関係について不平を言います。
どうすればこれを修正できますか? 基本的に、私がしていることは、イベントを観察しProcessBean
、発見されたすべての Bean の注入ポイントごとに新しいプロキシを作成することです。次に、メソッドを使用してこれらすべてのプロキシ Bean をコンテナーに追加しますAfterBeanDiscovery#addBean
。この最後のステップをスキップして手動で注入ポイントに注入するか、注入する正しい Bean を選択する決定に影響を与えることができるようにする必要があります。注入ポイントと、そこに注入できるあいまいな依存関係のリストが与えられた場合、その属性に基づいて正しいものを選択できます。しかし、Weld でこの決定を下すことが可能かどうか、またどのようにしてそれを行うことができるかはよくわかりません。
編集:単に私がやりたいことは、@Dependent
特定の注入ポイントに関連する追加情報を保存できるプロキシを使用して、同様の独自のスコープを実装することです。
EDIT2:特定の注入ポイントに関する情報を運ぶ新しい修飾子を作成することで、最終的に修正しました。この修飾子は、注入ポイントとそのプロキシの両方に追加されます。しかし、修飾子コレクションの変更を可能にする独自の実装で注入ポイントを置き換える必要があるため、これはあまり良い解決策ではありません。もっとエレガントな解決策が必要だと思います。思いつくことがあれば教えてください。
java - Java SE アプリケーションをウェルド付きで実行可能 Jar にパッケージ化する
コマンド ラインから Java SE 実行可能 jar を実行しようとしたときに、次の例外が発生しました。
ただし、Eclipseでプログラムを正常に実行できますが、jarにパッケージ化すると、常にこのエラーが発生します。
ここに私のMavenパッケージプラグインがあります:
そして、これが私が溶接をブートストラップする方法です:
(コメント付きとコメントなしの両方のコードを試しましたが、それでも同じエラーが発生します)。どんな助けでも素晴らしいでしょう、私は本当にすべてのことを試しました。