ich*_*rin 6 dependency-injection cdi ejb-3.1 jboss-weld
目前我正在尝试将无状态EJB注入到Jboss 6 AS Final上的CDI管理控制器中.控制器在上下文中管理,可从JSF页面访问.如果我注入无状态bean @EJB正在工作.如果我注入无状态EJB,@Inject我会得到以下异常:
我的控制器:
@Named("TestController")
public class TestController {   
    @Inject
    private TestManagerLocal myTestManager;
        ...
    }
}
我的无状态豆:
@SuppressWarnings("unchecked")
@Stateless
public class TestManagerBean implements TestManagerLocal {
    @PersistenceContext
    private EntityManager em;
        ...
}
Bean的接口使用@Local注释.
如果我尝试调用myTestManager,我会得到以下异常:
WELD-000079在JNDI中找不到EJB:class de.crud.org $ jboss $ weld $ bean-jboss $ classloader:id ="vfs:$$$ usr $ local $ jboss $ server $ default $ deploy $ test $耳朵"-SessionBean-TestManagerBean _ $$ _ WeldProxy
多谢.
对于那些没有奢侈品来改变战争的人,我发现了以下解决方法:
@Inject与预选赛的生产方法:码:
// This bean is defined in the WEB module
@Stateless
public class EJBFactory {
    @EJB
    protected UserDAO userDAO;
    // ~X other EJBs injected here
    @Produces @EJBBean
    public UserDAO getUserDAO() {
        return userDAO;
    }
    // ~X other producer methods here
}
现在可以在EAR中的任何位置注入EJB:
// This bean is also defined in the web module
@RequestScoped
public class MyBean {
    @Inject @EJBBean
    private UserDAO userDAO; // injection works
    public void test() {
        userDao.getByID(...); // works
    }
}
EJBBean是一个简单的标准限定符注释.为了完整起见,这里是:
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface EJBBean {
}
| 归档时间: | 
 | 
| 查看次数: | 19911 次 | 
| 最近记录: |