我有一个包含三个项目的多模块Maven项目。具有共享数据test-base
的第一个ejb项目。第二个ejb项目test-timer
应该部署在glassfish 4.x应用服务器上,以运行定期任务(@Scheduel
)并依赖于test-base
。最后是第三个战争项目test-webapp
,它具有简单的Web应用程序,该项目也依赖于test-base
,并且还将被单独部署到glassfish 4.x应用服务器上。
test-base
项目中有一个CDI bean。该对象包含beans.xml。
test-webapp
的作用就像是一个吊饰。但是,如果我尝试部署test-timer
,则会遇到部署异常。
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [MyCdiBean] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private org.test.MyTimer.bean]
搜索网络(即here或here)后,我认为这与beans.xml
有关。 test-base
包含一个beans.xml
并且webapp运行正常。与test-timer
一样,我是否拥有beans.xml
也没有关系。
beans.xml
由netbeans ide生成,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
我还试图同时更改bean-discovery-mode="all"
和test-base
中的test-timer
,但没有任何改变。
这是我的项目结构。
test-parent
|--test-base
|--src
|--main
|--java
|--org/test/MyCdiBean.java
|--resources
|--META-INF
|--beans.xml
|--test
|--pom.xml
|--test-timer
|--src
|--main
|--java
|--org/test/MyTimer.java
|--resources
|--META-INF
|--beans.xml
|--test
|--pom.xml
|--test-webapp
|--src
|--main
|--java
|--org/test/WebAppBean.java
|--resources
|--META-INF
|--beans.xml
|--webapp
|--WEB-INF
|--web.xml
|--index.xhtml
|--test
|--pom.xml
|--pom.xml
任何关于我在做什么错的提示都值得赞赏。
如有必要,我可以附加来源。
EDIT (其他信息),如评论所要求。
现在是新的beans.xml
。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
仍然无法正常工作。
我正在使用WELD版本WELD-000900 2.0.0 (SP1)
,并且还使用WELD-000900: 2.2.13 (Final)
test-base
中的MyCdiBean.java
@javax.inject.Named
@javax.enterprise.context.RequestScoped
//@javax.enterprise.context.Dependent /* also tried with */
public class MyCdiBean {
public void doSomething() {
System.out.println("Hello World!");
}
}