首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@专门化Java EE CDI中的JNDI

@专门化Java EE CDI中的JNDI
EN

Stack Overflow用户
提问于 2012-07-23 20:45:17
回答 1查看 1.8K关注 0票数 1

在Java EE 6.0项目中,我们有很多要测试的bean。为了获得一些额外的信息并放置额外的测试探针,我们使用了CDI的@Specializes注解,它工作得很好。带有@Specializes注解的bean替换了它们的父类bean。

例如,我们有两个bean:

代码语言:javascript
复制
@Stateless    
public class Bean extends ... {}

@Specializes
public class BeanMock extends Bean {}

对于正常的注射,这是非常有效的。一个

代码语言:javascript
复制
@Inject
private Bean bean;

将BeanMock引入bean。

在一个测试中,我们通过JNDI访问名为" bean“的Bean。这个测试带来了一个例外:

代码语言:javascript
复制
14:29:07,867 ERROR [fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.deployment.unit."XXX.ear".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."XXX.ear".WeldService: org.jboss.weld.exceptions.DefinitionException: WELD-000047 Specializing bean must extend another bean:  Managed Bean [class xxx.BeanMock] with qualifiers [@Any @Default]
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:83)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_31]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_31]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_31]
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000047 Specializing bean must extend another bean:  Managed Bean [class xxx.BeanMock] with qualifiers [@Any @Default]
    at org.jboss.weld.bean.ManagedBean.preSpecialize(ManagedBean.java:449)
    at org.jboss.weld.bean.AbstractBean.initialize(AbstractBean.java:121)
    at org.jboss.weld.bean.AbstractClassBean.initialize(AbstractClassBean.java:196)
    at org.jboss.weld.bean.ManagedBean.initialize(ManagedBean.java:322)
    at org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy(AbstractBeanDeployer.java:115)
    at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:204)
    at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:344)
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:82)
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)
    ... 5 more

如果可能的话,我想通过JNDI得到"BeanMock“。;-)

在这种情况下定义的行为是什么。我已经看过JSR299了,但是没有发现@Specializes通过JNDI会发生什么。它们也被替换了吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-07 00:52:59

我会尝试用一个CDI作用域(应用程序、会话、请求)来限定ejb的范围,或者至少添加@Named注解,看看它是否会被视为CDI bean。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11612816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档