【问题标题】:Session bean injection with CDI使用 CDI 进行会话 bean 注入
【发布时间】:2013-01-13 17:08:28
【问题描述】:

我试图将一个会话 bean 注入另一个会话 bean(在这种特殊情况下,它是同一个会话 bean),我得到了这个错误:

org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308 无法解析类型的任何 bean:[接口 com.windriver.dsm.labmanagement.ejb.stub.GeneralSession];绑定: [@javax.enterprise.inject.New(value=com.windriver.dsm.labmanagement.ejb.stub.GeneralSession.class)]

这就是我尝试的方式:

@Stateless
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@Local(GeneralSessionLocal.class)
@Remote(GeneralSession.class)
public class GeneralSessionBean extends CRUDSessionBase
{
    @Inject @New
    Instance<GeneralSession> generalSessionInstance;

    // ...
}

当我调用generalSessionInstance.get(); 时出现此错误。有人可以帮忙吗?

【问题讨论】:

  • 您没有在问题中指定您使用的编程语言。无论多么容易猜测,使用适当的编程语言添加标签总是一种很好的形式。考虑编辑您的问题并这样做。

标签: java dependency-injection cdi jboss-weld


【解决方案1】:

尝试指定 bean 类 (GeneralSessionBean) 实现 GeneralSession。

在你的情况下:

@Stateless
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@Local(GeneralSessionLocal.class)
@Remote(GeneralSession.class)
public class GeneralSessionBean extends CRUDSessionBase implements GeneralSession
{
    @Inject @New
    Instance<GeneralSession> generalSessionInstance;

    // ...
}

【讨论】:

    【解决方案2】:

    根据 WebBeans 规范,远程接口不是对注入有效的 bean 类型。因此,您必须为字段类型采用本地接口(在这种情况下为 GeneralSessionLocal)(并且您还应该实现此接口,否则它也不是您的 EJB 的 bean 类型)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2014-06-02
      • 2011-09-19
      相关资源
      最近更新 更多