下面的MyService是一个无状态EJB。如果我用CDI查找它,例如交易时,它的行为会不同吗?
InitialContext initialContext = new InitialContext();
MyService myService1 = (MyService) initialContext.lookup("...MyService...");
VS
BeanManager beanManager = CDI.current().getBeanManager();
Bean<?> bean = beanManager.getBeans(MyService.class).iterator().next();
CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
MyService myService2 = (MyService) beanManager.getReference(bean, MyService.class, ctx);
答案 0 :(得分:1)
使用CDI方法,您将获得一个依赖实例。使用EJB方法,您将获得EJB管理引用。
对于Dependent实例,您需要注意在完成时销毁引用,否则您可能会遇到一些内存泄漏。该规范实际上从this section
开始调出此问题虽然在大多数情况下,CDI查找是首选,如果它背后的bean是EJB并且您需要进行编程查找,那么最好使用EJB方法。