问题标签 [cdi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
365 浏览

java - CDI - 有条件的安装

我有几个应用程序范围的组件。根据我所处的环境,我想安装一个或另一个。在 JBoss Seam 中,我会使用 @Install(false),然后通过 components.xml 配置我想要的 bean。

在 CDI / WELD 中有类似的方法吗?

谢谢,

沃尔特

0 投票
1 回答
2007 浏览

java - 休眠 - CDI

我有一些用于审计目的的 Hibernate Envers 监听器。我刚刚开始使用 CDI,到目前为止,我对它的简单性和强大功能感到惊喜。由于似乎一切都在集成 CDI 功能,我想我会提出一个问题,Hibernate 是支持它还是会支持它?

不仅可以访问各种组件会很好,而且可以轻松访问其他上下文信息并且不受 Hibernate 接口的限制。

0 投票
1 回答
1598 浏览

java - CDI - 处理错误

我正在将我的 Seam 2 支持的应用程序迁移到 CDI,而对我来说至关重要的一件事就是错误处理。在 Seam 2 中,我只是用我自己的替换了默认的异常处理程序,但在 CDI 中,我猜我将不得不使用一个拦截器。

我将如何设置它,因为使用拦截器需要我指定它将在哪里拦截呼叫?我主要想完成审计,所以当发生异常时,它会被记录下来,然后向管理员发送通知(电子邮件、xmpp、短信、电话)。

当异常发生时,是否有一个我可以监听并采取行动的事件?

沃尔特

0 投票
1 回答
1446 浏览

jakarta-ee - CDI 在部署到 glassfish v3.0.1 的耳朵中不起作用

我在使用焊接记录器注入时遇到了一些问题。

场景:我的耳朵里面有 ejb-jar。

这是我的 ejb bean:

当 print1Partner 调用我得到异常:

|2010-07-02T19:25:35.003+0300|警告|oracle-glassfish3.0.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=48;_ThreadName=Thread-1;|调用 EJB PartnersService 方法时发生系统异常 public void ua.co.oasys.fenix.persistence.PartnersService.print1Partner() javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: 无法创建无状态EJB 在 com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:448) 在 com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2467) 在 com.sun.ejb.containers.BaseContainer。 preInvoke(BaseContainer.java:1860) 在 com.sun.ejb.containers.BaseContainer.callEJBTimeout(BaseContainer.java:3962) 在 com.sun.ejb.containers.EJBTimerService。com.sun.ejb.containers.EJBTimerService.access$100(EJBTimerService.java:98) 上的 deliverTimeout(EJBTimerService.java:1667) com.sun.ejb.containers.EJBTimerService$TaskExpiredWork.run(EJBTimerService.java:2485) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask. java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run (Thread.java:619) 原因:javax.ejb.EJBException:javax.ejb.CreateException:无法在 com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory 创建无状态 EJB。在 com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:443) 处创建(StatelessSessionContainer.java:720) ... 12 更多原因:javax.ejb.CreateException: 无法在 com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:528) 在 com.sun.ejb.containers.StatelessSessionContainer.access 创建无状态 EJB $000(StatelessSessionContainer.java:90) at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:718) ... 14 更多原因:java.util.concurrent.ConcurrentHashMap 的 java.lang.NullPointerException .get(ConcurrentHashMap.java:768) 在 org.jboss.weld.manager.BeanManagerImpl。getBean(BeanManagerImpl.java:1171) at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:132) at org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext(JCDIServiceImpl.java:145) at org.glassfish .weld.services.JCDIServiceImpl.createJCDIInjectionContext(JCDIServiceImpl.java:122) 在 com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1616) 在 com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java :469) ... 还有 16 个 |#]createJCDIInjectionContext(JCDIServiceImpl.java:122) at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1616) at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:469) ... 16更多 |#]createJCDIInjectionContext(JCDIServiceImpl.java:122) at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1616) at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:469) ... 16更多 |#]

使用:ejb 3.1,glassfish 3.0.1

一些maven依赖:

耳朵 pom.xml

META-INF/ 中的 bean.xml

在没有 ejb 的情况下使用 war in ear 的相同配置(在战争中,但如果我在战争和焊接中使用 ejb - 同样的例外)

Q1:怎么了?

Q2:weld & ejb 3.1的使用规则是什么?

0 投票
2 回答
3471 浏览

jakarta-ee - 带有 ejb 3.1 的 CDI,glassfish v3.0.1 上的焊接记录器

场景:1)创建maven ear项目,在里面创建war项目2)将beans.xml添加到war项目的WEB-INF/ 3)创建简单的@Steateless bean

项目 - http://drp.ly/1j5C3t

ejb 豆:

战争项目的maven pom-xml:

ear项目的maven pom.xml:

测试用例 1(问题):使用 beans.xml 部署项目给出异常:

[#|2010-07-04T19:36:50.003+0300|警告|oracle-glassfish3.0.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=33;_ThreadName=Thread-1 ;|在调用 EJB TestEjb 方法时发生系统异常 public void TestEjb.print1Partner() javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: 无法在 com.sun.ejb 创建无状态 EJB。 container.StatelessSessionContainer._getContext(StatelessSessionContainer.java:448) 在 com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2467) 在 com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1860)在 com.sun.ejb.containers.EJBTimerService.deliverTimeout(EJBTimerService.java:1667) 在 com.sun.ejb.containers 的 com.sun.ejb.containers.BaseContainer.callEJBTimeout(BaseContainer.java:3962)。EJBTimerService.access$100(EJBTimerService.java:98) at com.sun.ejb.containers.EJBTimerService$TaskExpiredWork.run(EJBTimerService.java:2485) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441 ) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask( ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) 原因:javax.ejb.EJBException: javax .ejb.CreateException:无法在 com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:720) 在 com.sun.ejb.containers.util.pool 创建无状态 EJB。NonBlockingPool.getObject(NonBlockingPool.java:200) at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:443) ... 12 更多原因:javax.ejb.CreateException:无法在 com 创建无状态 EJB .sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:528) 在 com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:90) 在 com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory。 create(StatelessSessionContainer.java:718) ... 14 更多原因: org.jboss.weld.manager.BeanManagerImpl.getBean 的 java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768) 的 java.lang.NullPointerException (BeanManagerImpl.java:1171) 在 org.jboss.weld.manager.BeanManagerImpl。getBean(BeanManagerImpl.java:132) 在 org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext(JCDIServiceImpl.java:145) 在 org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext(JCDIServiceImpl.java:122) 在 com.sun .ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1616) 在 com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:469) ... 16 更多 |#] [#|2010-07-04T19 :36:50.004+0300|INFO|oracle-glassfish3.0.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=33;_ThreadName=Thread-1;|EJB5119:清除计时器 [' 13@@1278255602087@@server@@oasys''TimedObject = TestEjb''应用程序 = testo''BEING_DELIVERED''PERIODIC''容器 ID = 83771744647118848' 'Sun Jul 04 19:36:45 EEST 2010' '0' '*/15 # * # * # * # * # * # * # null # null # null # true # print1Partner # 0' ] [2] 交付失败后|#]

[#|2010-07-04T19:37:00.000+0300|INFO|oracle-glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=33;_ThreadName=Thread -1;|这是测试|#]

期待结果:

伊尔贾阿

这是测试

结果 :

例外

这是测试


案例 2:删除 beans.xml

期待结果:

伊尔贾阿

这是测试

结果

伊尔贾阿

这是测试

目标:我想在包含其他战争和 ejb 项目的耳朵档案内的 web 项目中使用 ejb 焊接(CDI),但我不希望分离我的 web 项目(战争 + ejb)

工具和环境:maven & ejb 3.1 &weld & glassfish 3.0.1

Q1:这可能是某种特定的玻璃鱼虫吗?Q2:什么可能是问题的原因?Q3:这种情况有什么设计吗?

谢谢你。

0 投票
1 回答
777 浏览

java - 和 SessionScoped bean

问题:寻找一些更合适的设计。

目标:我想有一些用户信息的表格,并在每个用户的列中使用“更改密码”按钮,单击后:“更改密码”按钮消失(呈现为“假”)并出现 inputSecrea 字段 - 用户输入密码并提交它(通过点击一些额外的按钮或通过热键)。提交后 - “更改密码”按钮像以前一样粘贴。

我的豆子

和页面:

所以我在列中使用我的bean:

问题 2:对于这种情况,有什么更好的设计?

问题 3:如果某些组件(在我的情况下为 inputSecret),是否可以侦听某些事件(onclick,组件标签内的 ondbclick),如果它设置为 disabled=«true»?

谢谢!

0 投票
2 回答
1450 浏览

asynchronous - 使用 EJB3.1 @Asynchronous 时如何避免 ConcurrentModificationExceptions

[我的设置:Java EE 6 应用程序,EJB3.1、CDI/Weld、JSF2 在 Glassfish 3.0.1 上运行]

我阅读了一些关于 EJB3.1 中新的@Asynchronous 方法的文章,但没有一篇文章提到异步方法的危险以及您真正需要关心的内容。

在我的应用程序中,我有一个@Asynchronous E-Mail 服务,发送大量邮件。我从 CDI/Weld Bean 调用此服务。在我的测试过程中,我经常遇到 ConcurrentModificationExceptions,但直到现在我才真正理解它有时在哪里以及为什么会崩溃。

只是为了展示我的 Beans 大致是什么样子,重要的部分:

在我的 CDI-Bean 中,我像这样使用这个 EJB(向 JSF2 公开进度):

我只是想问一下:我在这里做错了什么吗(范围、注入、使用 Future)?使用 @Asynchronous 方法时我需要注意什么以避免 ConcurrentModificationExceptions?

我将电子邮件作为 EJB 注入。把整个EmailEJB做成异步,用@Inject @Asynchronous注入会不会更好?会有什么区别?

欢迎任何提示!

0 投票
6 回答
9188 浏览

dependency-injection - Java EE 6:切换到 CDI - 最佳资源

我手头有一个小而完整的 Java EE 6 应用程序。

正在使用传统的注释: @Resource, @EJB, @Singleton, @PostConstruct, @PreDestroy, @PersistenceContext, @ManagedBean, @ManagedProperty, @RequestScope, @ApplicationScope,...

我想评估引入 CDI 是否有意义,并标准化依赖注入、bean 生命周期管理等的通用策略。

问题:有人知道将传统 Java EE 6 注释转换为 CDI 注释的好文章、示例或手册吗?

0 投票
4 回答
289680 浏览

java - 为什么使用@PostConstruct?

在托管 bean 中,@PostConstruct在常规 Java 对象构造函数之后调用。

为什么我要使用@PostConstructbean 来初始化,而不是常规构造函数本身?

0 投票
2 回答
604 浏览

java - 如何在 CDI 中实现会话范围?

它是通过一些拥有某种结构的会话密钥来完成的?