标签: cdi

CDI Bean访问Spring bean?

我知道这听起来很奇怪,将CDI(Weld)和Spring混合为控制器.

但想象一下这种情况:

  1. 使用CDI,我可以使用@ConversationScoped,这是我的要求之一(到目前为止,我不知道我是否可以使用spring作为这种范围,因为如果可以的话,我可以用Spring取代Weld, faces-config.xml中的el-resolver)
  2. 我的服务对象(@Service)和DAO(@Repository)将由Spring管理

现在出现的一个问题是,在我的控制器中,我如何访问我的服务对象?

我觉得这样的事情不会起作用:

@Named
@ConversationScoped
public class MyBean {
   @Named
   private SomeOtherBeanManagedByCDI myOtherBean; // this will work

   @Autowired
   private MySpringBean mySpringBean; // dont think that this will work

   ....
}
Run Code Online (Sandbox Code Playgroud)

关于如何在cdi bean中使用spring bean的任何想法?谢谢 !


更新

我刚刚测试了这篇文章的解决方案,到目前为止它工作正常,我感到宽慰.

谢谢 !

spring cdi jsf-2

4
推荐指数
1
解决办法
3624
查看次数

无法为ejb转换ejbRef

QuestionCommonBusiness

public interface QuestionCommonBusiness {

    void create(Question question);
    void update (Question question);
    void delete(Question question);
    Question read(Integer id);

    List<Question> all();
}
Run Code Online (Sandbox Code Playgroud)

QuestionLocalBusiness

public interface QuestionLocalBusiness extends QuestionCommonBusiness {

}
Run Code Online (Sandbox Code Playgroud)

QuestionManagerEJB

@Stateless
@Local(QuestionLocalBusiness.class)
public class QuestionManagerEJB implements QuestionLocalBusiness {

    @PersistenceContext(unitName = "MyPU")
    private EntityManager entityManager;

    @Override
    public void create(Question question) {
        entityManager.persist(question);
    }

    @Override
    public void update(Question question) {
        entityManager.merge(question);
    }

    @Override
    public void delete(Question question) {
        entityManager.remove(question);
    }

    @Override
    public Question read(Integer id) {
        return entityManager.find(Question.class, id);
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java java-ee cdi

4
推荐指数
1
解决办法
2799
查看次数

CDI会话范围传播:瞬态与长期运行

来自Weld CDI文档:

会话上下文自动传播任何JSF面部请求(JSF表单提交)或重定向.它不会自动传播非面部请求,例如,通过链接导航.

我想知道,跨越JSF的上下文传播是否也要求进行瞬态对话?更一般地说,是否存在关于瞬态和长期对话之间传播的差异的概述?

假设第一个问题的答案为"是",您是否可以提供需要长时间对话的用例?

cdi conversation-scope weld

4
推荐指数
1
解决办法
1737
查看次数

如何创建按需实例?

在调用必须将新实例作为参数传递的Java方法时,如何通过CDI容器创建此新实例?

在以下示例中:我正在向异步servlet上下文添加侦听器:

@WebServlet(value = "/example", asyncSupported = true)
public class ExampleServlet extends HttpServlet {

    @Override
    protected void doPost(final HttpServletRequest req,
        final HttpServletResponse resp) throws ServletException,
        IOException {

        // ... some code

        AsyncContext aCtx = req.startAsync(req, resp);
        aCtx.addListener(**new AsyncListener()** {
             // implementation of the async listener
        });
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我希望它不是手动执行这个新的AsyncListener()实例化,而是由CDI容器创建.

当然,我希望每个aync上下文都有自己的侦听器实例,否则我只是将@Inject注入一个AsyncListener作为servlet类的一个字段.

目前,找不到任何办法.有人有想法分享?

java asynchronous servlets java-ee cdi

4
推荐指数
1
解决办法
572
查看次数

Java EE中CDI技术的目的及其与JSF等UI技术和EJB等后端技术的关系

这个问题从我的另一个问题直接跟这里.该问题答案的最后一段提到了CDI技术.

你能解释一下这项技术的目的吗?该技术与JSF和EJB有什么关系?我已经解决了这个问题,但我还不清楚该技术的目的是什么.我特别想知道它与EJB和JSF等其他Java EE技术的匹配程度.

jsf dependency-injection ejb cdi

4
推荐指数
1
解决办法
358
查看次数

你什么时候应该明确命名一个Managed Bean?

通过我在创建托管bean方面所做的所有研究,我没有注意到(或者我可能忽略的)是何时使用bean的显式命名,例如@Named(name = "someBean").

我想我很难理解为什么你想要将bean命名为除了你的类名之外的其他东西:

@Named(name = "someBean")
public class SomeBean implements Serializebale {
}
Run Code Online (Sandbox Code Playgroud)

在我看到的所有示例中,有些使用显式名称,有些只是@Named用来保留默认的类名.这些例子没有解释为什么他们使用显式命名.尝试使用除类名之外的任何东西来访问bean似乎更令人困惑.

所以我想问题是,是否有任何经验法则或约定何时你想要提供一个与你的班级名称不同的访问名称,或者如果他们有一个他们希望能够拥有的长类名,人们就会这样做打字少打字?

jsf java-ee cdi managed-bean

4
推荐指数
1
解决办法
2388
查看次数

JSF,CDI和EJB容器:应该使用它们的组合?

我正在阅读这篇文章,这让我有些困惑:在那篇文章中提到了与每个特定容器一起使用的注释:JSF,CDI或EJB容器.

作为一个初学者,我学习了JSF框架并习惯了它的@ManagedBean注释及其可选的name参数,用于从JSF页面引用bean,并且对CDI知之甚少,而我正在使用EJB作为其强大的功能(甚至阅读这篇文章之后,我仍然认为EJB比CDI更强大,功能更强.

所以...... JSF和CDI容器都有自己的注释和在网页上引用bean的方法,但EJB只有@Stateless(或@Stateful),因此无法在网页上引用,这意味着JSF容器必须总是附加EJB(因为我假设混合EJB和CDI容器是荒谬的,因为它们几乎相似但是为了这一点,我希望有人告诉我,如果我错了).

JSF容器的问题在于它

"仍然没有完整和成熟的容器"

正如在那篇文章中说的那样,我知道的最糟糕的事情是在@ManagedBean旁边的Netbeans中发出警告信息:

"javax.faces.bean包中的注释将在下一个JSF版本中被删除.相反,建议使用CDI."

(好吧,这里有另一个注释的替代包:javax.annotation.ManagedBean,但我不知道我是否可以使用它,也不知道它是否有一个参数用于在网页上引用bean以及它是哪一个)

所以现在我开始怀疑未来还应该使用哪种容器组合.CDI + EJB是未来吗?

为所有人喝彩.

ejb java-ee cdi jsf-2

4
推荐指数
1
解决办法
1525
查看次数

Spring Prototype范围和CDI依赖范围之间有什么区别?

Spring原型范围是否与CDI相关范围相同.

谷歌搜索引导我到博客帖子声称他们是相同的和其他声称他们相似但不完全相同而没有解释差异.

那么弹簧原型范围和cdi依赖范围之间有什么区别?

java spring dependency-injection java-ee cdi

4
推荐指数
1
解决办法
3439
查看次数

EJB拦截器与CDI拦截器

在ejb-jar.xml文件中声明的EJB拦截器与beans.xml文件中声明的CDI拦截器之间是否有任何区别?

两个拦截器都使用注释@Interceptors声明.如果CDI拦截器也适用于EJB,那么为什么存在EJB拦截器?

java cdi java-ee-6 ejb-3.1

4
推荐指数
1
解决办法
1566
查看次数

EJB bean和CDI bean以及Injection

看完之后,

我仍然对以下事情感到困惑,如果我错了,请纠正我.

  1. 与bean.xml相同的包中的所有类都是CDI bean,除了注释为session/message/singleton的类.
  2. 只能使用@EJB(在另一个EJB中)注入EJB,而可以使用@inject(在EJB bean或CDI bean中)注入CDI bean和EJB bean.
  3. 使用@Inject注入的类注释为@Stateless(例如)仍然是EJB bean,而不是CDI bean,并且仍然由EJB容器管理,具有池和事务的所有优点.

非常感谢.:)

java dependency-injection ejb java-ee cdi

4
推荐指数
1
解决办法
2085
查看次数