我有一个自定义JBoss 7模块,它提供服务(例如,EmailService
用于发送电子邮件)。我想在部署在同一AS上的应用程序中使用这些服务。
我在module.xml
(位于modules/jboss/module/main
)中指定了该服务的jar。
<?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
文件夹中)。该文件包含我所有实现的完全限定名称(到目前为止我只有一个):
jboss.module.impl.DefaultEmailService
我想将服务注入应用程序。
目前,我使用producer方法从中获取服务的实例 应用。
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;
}
}
当我省略制作人方法时,我得org.jboss.weld.exceptions.DeploymentException
说WELD-001408 Unsatisfied dependencies for type [EmailService] with qualifiers [@Default] at injection point [[field] @Inject bean.Bean.emailService]"}}
。
我在应用程序中有jboss-deployment-structure.xml
个文件:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="jboss.module" services="export" />
</dependencies>
</deployment>
</jboss-deployment-structure>
我尝试将beans.xml
文件添加到“实施项目”(即email-service-impl.jar
)中,但它没有效果。无论如何都发生了例外。
是否可以使用CDI注入服务并省略生产者方法?
谢谢,
丹尼斯
答案 0 :(得分:0)
总结我在评论中所写的内容:
@DefaultImpl
,@ProUser
等)。beans.xml
)。Extension
,因为它们是作为CDI启动执行的,因此允许您将实现注册为bean。