问题标签 [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 投票
5 回答
19565 浏览

jsf - JSF 2 本地化(托管 bean)

我有一个用于本地化的属性文件:

这与resource-bundlefaces-config 中的 a 相关联:

我可以使用 EL 在 facelets 视图中很好地访问它:

但是,如果有 SQLExceptions 之类的东西,我需要能够从托管 bean 写入消息。这一切也都有效:

这是问题所在:我希望这些消息来自属性文件,以便它们也可以根据语言环境进行更改。有没有一种简单的方法可以使用注入访问属性文件?

0 投票
1 回答
2287 浏览

glassfish - 在 Glassfish 中将 @Stateless EJB 的 CDI(焊接)注入到 @SessionScoped JSF2 bean 中的“无法将 ejbRef 转换为 ejb”

[更新:在http://forums.java.net/jive/thread.jspa?messageID=480532讨论 Glassfish 论坛/ML 后,针对 Glassfish https://glassfish.dev.java.net/issues提交了一个错误/show_bug.cgi?id=13040对于这个问题。]

我正在尝试将 @Stateless EJB 的本地无接口视图注入 JSF2 @Named @javax.enterprise.context.SessionScoped 支持 bean。EJB 是扩展抽象通用基类的几个之一。注入“@Inject TheEJBClass varName”失败,并显示“无法将 ejb TheEJBClass 的 ejbRef 转换为 my.package.name.TheAbstractBase 类型的业务对象”。[编辑:实际上,事实证明注入成功,但是从超类继承的方法的注入代理中的方法解析失败。]如果我使用“@EJB TheEJBClass varName”,则 varName 保持为空,即没有注入任何内容。

细节:

我在 Linux 上运行 Glassfish 3.0.1(Ubuntu 10.04 以防万一)并且在处理使用 CDI(焊接)将我的数据模型 EJB 注入到我的 JSF2 会话范围模型中时遇到了实际问题。是的,在你问之前,我已经准备好 beans.xml 并且 CDI 正在激活以执行注入。

如果我用 @EJB 注释注入它,例如:

... EJB 实际上并没有被注入,因此 memberName 为空。

如果我用 CDI @Inject 注释注入它:

...然后,当我调用在 TheEJBClass 的超类中实现且未在 TheEJBClass 中覆盖其自身的“memberName”方法时,CDI 会抱怨,报告:

我已经尝试将基础转换为具体类并对其进行反泛化,但遇到了同样的问题,所以我认为我不会使用通用基础来解决 Weld 错误(https://jira.jboss.org/browse /WELD-305,https://jira.jboss.org/browse/WELD-381,https://jira.jboss.org/browse/WELD-518)。_ _ _

为清楚起见,添加了注释的完整包限定的代码大纲是:

请注意,如果我在 TheEJBClass 中覆盖 TheAbstractBase.getValue(),或者如果我调用在 TheEJBClass 中定义的方法而不是任何超类,则注入确实有效。似乎这个问题与继承有关。

使用 JSF2 的内置生命周期和注入功能的非常相似的代码有效,但鉴于这是一个新项目,而且 CDI 是未来的发展方向,我认为最好尝试使用 CDI。这是我开始使用 JSF2/EJB 注入的方法,它有效:

我目前正在整理一个独立的测试用例,但我想我现在会提出这个问题,以防我只是在做一些愚蠢的事情,或者我的 Google-fu 有一个众所周知的解决方案'直到找到。为什么它适用于 JSF2/EJB 注入,但会因 CDI 注入而失败?

(由于在 Glassfish 论坛上重新发布为http://forums.java.net/jive/thread.jspa?threadID=152567

0 投票
1 回答
113 浏览

java - 你能让 jboss Weld 在开发过程中不断扫描新添加的类吗?

我正在用焊缝在tomcat 6.0.29 上建立一个JSF2 项目。也使用 jrebel - 不确定这是否有所作为。

在测试 JRebel 时,我可以看到更新容器启动时存在的类处理得很好。

但是,如果我添加了一个新定义的 CDI 组件类并在不重新启动应用服务器的情况下重新展开应用程序,我无法从 facelets 访问它,直到我重新启动。JRebel 似乎正在加载类,所以我猜焊接没有在 beanmanager 中注册它

我意识到 CDI 是为了在启动时连接配置,但是最好有某种开发开关来启用连续扫描,就像 JSF 有一个开发模式来获取更改的 facelet 模板一样。

这和 JRebel 提供的功能将极大地提高生产力。

可以这样做吗?快速查看了焊接文档,但找不到任何东西。

谢谢。

0 投票
2 回答
5208 浏览

java-ee-6 - CDI - 观察容器事件

我正在尝试观察 CDI Web 应用程序的启动和关闭事件。我有一个监听这些事件的 ApplicationScoped bean:

我在日志中看不到任何内容。

我错过了什么?

0 投票
2 回答
10526 浏览

dependency-injection - GlassFish、CDI 和构造函数注入

GlassFish 3.1 的托管 bean 的 CDI 实现是否支持构造函数注入?我有一个@SingletonEJB,我想使用构造函数注入向其中注入另一个托管 bean(包含在同一个 EJB 模块中)。现场注入确实有效。但是通过构造函数注入,我得到了一个NullPointerExceptionfrom AbstractSingletonContainer

这确实有效:

这不起作用:

0 投票
1 回答
877 浏览

java-ee-6 - 嵌入式 Glassfish - EJB 3.1 - @Schedule

我是 Java EE 6 的新手,正在努力让一些演示应用程序最终运行。

我有一个应用程序范围的 bean,它上面有一个 @Schedule 注释,理论上应该每分钟触发一次该方法。但是,该方法似乎从未被调用过。它只是写入它被调用的日志。

我可以在嵌入式 glassfish 上使用 EJB3.1 吗?我需要做一些特别的事情来让它工作吗?

沃尔特

0 投票
2 回答
3211 浏览

java - CDI 可以减少到 Java SE 吗?

JSR-330 依赖注入可以应用于 Java SE 和 Java EE 环境,而 JSR-299 的标题是“Java EE 平台的上下文和依赖注入”。

除了严格面向 Java EE 的特性外,还有哪些 CDI 特性对 Java SE 有意义?有可用的例子吗?谢谢!

[修订] 这是JSE 上的 Weld。

0 投票
2 回答
1076 浏览

java - CDI - 事件观察者

我有事件观察者,它们都观察相同的事件,所以我有一个抽象超类来观察该事件,然后子类覆盖/实现特定功能。

这样做的问题是它不会观察事件,除非我将事件观察者方法放在子类中(这违背了我的设计目的)。

我当然可以这样做,但我想编写尽可能少的代码。

它应该以这种方式工作(我做错了什么吗)?

如果它不应该以这种方式工作,那么我可以为一件事编写一个生产者,然后编写一个拦截器。我认为我的第一种方法更简单,更有可能被其他开发人员正确使用。

示例代码:

超类:

子类

如果我这样写,handleReady 永远不会被调用(而且 onReady 也不会被调用);但是,如果我使用子类中的观察者方法编写它,它会按预期工作。我想以这种方式编写它,因为我必须编写的代码要少得多,而且抽象程度要少一点,这应该使它更容易理解。

沃尔特

0 投票
2 回答
1787 浏览

java - JEE6 如何在 Observer 和 Observee 之间建立联系(观察者模式)

我已经阅读了一些关于 JEE6 上的观察者模式实现的博客文章,有些事情困扰着我......我找不到任何信息 atm 所以我在那里问......

我发现了以下示例:

我无法理解事件消费者和事件生产者之间的链接是如何完成的......

是通过方法的命名约定吗?(“on”、“after”、“before”……这些词是有意义的)

是通过比较给定的参数(这里是 String 和 MyEvent)吗?

我不知道,也看不出还有什么……

0 投票
2 回答
1594 浏览

java-ee-6 - CDI注入点@httpparam问题

我遵循Weld 的文档

在第 4.11 节中。注入点对象

有一个非常有趣的例子是关于如何使用 CDI 获取 http 参数

但是我将代码复制粘贴到netbeans中,一切都编译了,但是有一个部署错误

原因:org.jboss.weld.exceptions.DeploymentException: WELD-001408 注入点具有不满足的依赖关系。注入点:java.lang.String com.test.HttpParamProducer.getParamValue(javax.enterprise.inject.spi.InjectionPoint,javax.servlet.ServletRequest)的参数1;限定符:[@javax.enterprise.inject.Default()]

如何解决这个问题呢???