私はサービスを提供するカスタムJBoss 7モジュールを持っています(例えば、電子メールの送信にはEmailService
)。これらのサービスは、同じASにデプロイされているアプリケーションで使用したいと考えています。CDIを使用してプロデューサメソッドなしでカスタムJBossモジュールを挿入することはできますか?
私はmodule.xml
(modules/jboss/module/main
にあります)のサービスジャーを指定しました。
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="jboss.module">
<resources>
<resource-root path="email-service-api.jar" />
<resource-root path="email-service-impl.jar" />
</resources>
</module>
email-service-api.jar
には、サービスのインターフェイスのみが含まれています。私はこれをインターフェイスの実装(email-service-impl.jar
)とそのサービスを使用するアプリケーションの依存関係として使用します。
email-service-impl.jar
にはjboss.module.EmailService
というファイルがあります(META-INF/services
フォルダ内)。ファイルには、(これまでのところ、私は1つしかない)すべての私の実装の完全修飾名が含まれています
jboss.module.impl.DefaultEmailService
私は、アプリケーションにサービスを注入したいと思います。
現在、プロデューサメソッドを使用して、 アプリケーションからサービスのインスタンスを取得しています。私はプロデューサメソッドを除外すると
package bean;
public class Bean {
@Inject
EmailService emailService;
@Produces
public EmailService getEmailService() {
ServiceLoader<EmailService> emailServices = ServiceLoader.load(EmailService.class);
for (EmailService emailService : emailServices) {
if (emailService != null) {
return emailService;
}
}
return null;
}
}
私はWELD-001408 Unsatisfied dependencies for type [EmailService] with qualifiers [@Default] at injection point [[field] @Inject bean.Bean.emailService]"}}
を言っorg.jboss.weld.exceptions.DeploymentException
を取得します。
私は、アプリケーション内のjboss-deployment-structure.xml
ファイルがあります:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="jboss.module" services="export" />
</dependencies>
</deployment>
</jboss-deployment-structure>
をそして私は、「実装プロジェクト」(すなわちemail-service-impl.jar
)にbeans.xml
ファイルを追加しようとしましたが、それは影響を与えませんでした。とにかく例外が発生しました。
サービスを挿入し、CDIを使用してプロデューサメソッドを省略することはできますか?
は、私がコメントで書いたものをまとめると、
デニス
例外は、CDIは「解決」注入点にしようとした結果であり、それはフィールドに注入するための任意の豆を見つけることができません。 プロデューサがヌル以外のものを返すことを確認しようとしましたか?例えば。実際にあなたの実装を見つけることができますか? そうしないと、CDIの観点から設定が有効に見えます。 – Siliarus
ご意見ありがとうございます。これはプロデューサメソッドで適切に動作します。このメソッドは私の実装を見いだします。しかし、私はそれを削除すると、例外がスローされます。 –
ご清聴ありがとうございます。 ATM私は簡単にこれを行う別の方法を考えることができません。しかし、 '@Produces'を使いたくない理由はありますか? – Siliarus