问题标签 [jboss-weld]

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 投票
2 回答
1409 浏览

glassfish-3 - CDI(焊接)/Seam 3 持久性模块/Glassfish 3 - 启动服务器时出现无法解释的异常

我正在使用 Weld,Jboss 的 CDI 实现。JPA/Hibernate 用于持久性。对于不同的东西,我在 Glassfish 3 上给了它一个我以前没有使用过的裂缝。我正在使用 Maven 进行依赖管理。

由于 CDI 没有开箱即用的事务管理,我决定使用 Seam 3 Persistence 模块而不是自己滚动。现在,我很清楚目前这仅在 Alpha 中,所以也许我是在自找麻烦。我希望其他人已经看到了这一点,并且可以帮助我解决它,或者至少让我知道为什么我会遇到这样的问题。

因此,在添加持久性模块之前,一切都构建并运行良好。我可以很好地打开应用程序的主页。但是,当我将 Seam 3 持久性模块添加到我的 pom.xml 时,应用程序在启动时会引发异常。工作和不工作之间的唯一区别是我添加到 pom.xml 的一个依赖项

我添加到 pom.xml 的依赖项是:

我根据http://seamframework.org/Seam3/PersistenceModule上的说明添加了这个依赖项。我知道,当单击此页面上的文档时,它提到了一些其他依赖项,但是在添加它们时我也遇到了同样的问题。这是我将问题缩小到的依赖项。

因此,在添加上面的依赖项并启动服务器后,我在启动时得到以下信息:

正如你所看到的,真的没有什么可做的。

你以前见过这个例外吗?你知道是什么原因造成的吗?最后,你知道如何解决它吗?

0 投票
5 回答
7423 浏览

java - 如何使用 Weld 轻松注入字符串常量?

我们有一种情况,我们以 Map 的形式为正在运行的程序提供外部配置。我发现 JSR-330 依赖注入提供了一种更简洁的方式来在代码中使用该配置映射,而不是传递映射或使用 JNDI 来获取它。

让 JSR-330 实现自动填写此字段。

使用 Guice,我可以设置值

我希望能够在 Weld 中做同样的事情(将“server.username”绑定到例如“foobar”)并且我知道机制最有可能是 beans.xml,但我更喜欢简单的“将此地图提供给 Weld ,请”代码替代。什么是这样做的好方法?


编辑 2013-10-16:在研究了在编译时而不是运行时工作的 Dagger 之后,我发现我们通常每个程序有 10-20 个,我们可以@Provider接受每个配置字符串的方法,然后在配置中查找地图。这允许特定于方法的行为(包括默认值)、提供 javadoc 的能力以及将所有这些方法放在同一个类中的能力。它也适用于开箱即用的 Weld。我正在考虑在博客条目中写一个更完整的解释。

0 投票
3 回答
16101 浏览

java - 使用 CDI @Inject 注入 Spring bean

我正在尝试将 Spring 上下文中定义的 bean 注入 CDI 托管组件,但没有成功。bean 没有被注入,而是在每次应该执行注入时创建一个新实例。我的环境是带有 JBoss Weld 的 Tomcat 7。

Spring ApplicationContext 很简单:

CDI 托管 bean 如下所示:

这是我的faces-config.xml

但是,当我test从 JSF 页面中访问该属性时,Test每次访问都会创建一个新实例。这是一个简单的例子:

我得到以下输出:

刷新后:

我可以看到第一个输出是正确的。无论我多久刷新一次页面,testFromSpring都会从 Spring 上下文中定义的 bean 返回值。然而,第二个输出清楚地表明,每次调用组件getTest上的方法时,都会创建并注入一个新实例,而不是像我期望的那样使用 Spring 上下文中的实例。testTest

那么,这种行为的原因是什么?

如何将 Spring 上下文中的 bean 注入 CDI 托管 bean?

我还尝试使用使用 Spring 上下文中定义的名称的限定符,但现在抛出异常,指示找不到 bean:

对于代码

0 投票
1 回答
1946 浏览

java-ee-6 - CDI 注入如何在 MDB 和 @Scheduled bean 中工作?

我正在开发一个部署在 JBoss 6 Final 上的大型 Java EE 6 应用程序。我当前的任务涉及始终使用@Inject 而不是@EJB,但是我在某些类型的bean 上遇到了一些问题,特别是@MessageDriven beans 和带有@Scheduled 方法的bean。

发生的情况是,如果我对时间不走运(对于@Schedule),或者如果在启动时 MDB 的队列中有消息,bean 的实例化将失败,因为注入的资源(它们本身是 EJB)尚未绑定.

因为我使用@Inject,所以我猜测EJB 容器认为我的bean 已经准备好了,因为容器本身并不关心@Inject;它可能只是假设由于没有@EJB 注入,bean 已准备好使用。然后,注入的 CDI 代理将失败,因为要注入的资源实际上尚未绑定。

小例子:

上面的示例可能不会经常失败,因为只有两个 bean,但是我正在处理的项目绑定了很多 EJB,这会放大问题。但它可能会失败,因为不能保证首先绑定 MySupportingBean,如果在绑定 MySupportingBean 之前调用 onTimeout,则 MyScheduledBean 的实例化将失败。如果我改用 @EJB,则在满足对 MySupportingBean 的依赖之前,不会绑定 MyScheduledBean。

请注意,该示例不会在 onTimeout 本身失败,而是在 CDI 尝试注入 MySupportingBean 时失败。

我在不同的论坛上阅读了很多帖子,很多人认为@Inject 总是更好。一般来说,我同意,但他们如何处理@Schedule 或@MessageDriven 与@Inject 结合?以我的经验,在这些情况下 bean 是否可以工作归结为运气不好,并且 bean 将任意失败,具体取决于 EJB 的部署顺序以及何时调用 @Schedule 或 onMessage。

0 投票
1 回答
833 浏览

seam - 焊缝(以前的焊接扩展项目)未初始化

我想在我的 java web 应用程序中使用记录器。

我正在使用 JBossAS 6.0.0.final、cdi (weld)、jsf ... 等。Seam Solder 建议使用抽象记录器不绑定到使用 jboss-logging api 的具体实现(slf4j、log4j 等)。

为了在您的代码中获取此记录器,您需要编写

seam-solder.jar 有这个记录器的生产者。

部署应用程序时出现错误

这是因为 seam-solder.jar 没有 META-INF/beans.xml 文件,而 cdi 容器是必需的。

如果手动在 seam-solder.jar 中添加 beans.xml 文件,则应用程序运行良好。

没有黑客怎么办?

为了构建我的应用程序,我使用了 maven,所以我的解决方案不舒服而且不好。

PS:以前的焊接扩展项目在 jar 中包含 META-INF/beans.xml 文件。

0 投票
2 回答
1812 浏览

gwt - 将 GWT 与 CDI 集成(缝/焊)

将 CDI 与 GWT 集成的最佳方式是什么?特别是,我想知道如何使依赖注入为我的 RemoteServiceServlet 扩展工作。显然 CDI 不适用于从 javax.servlet.Servlet 派生的类。如果有替代方案,我很乐意放弃 RemoteServiceServlet。

我真的不需要 GWT 客户端上的 DI,但如果它刚刚工作,我会很乐意使用它。

0 投票
2 回答
2956 浏览

java - 如何在 Servlet 中注入 ConversationScoped bean

我需要将一个ConversationScopedbean注入一个servlet。我使用标准的简单@Inject标记,并使用 cid 参数调用 servlet,但是当它调用注入 bean 中的任何方法时,我收到以下错误:

org.jboss.weld.context.ContextNotActiveException:WELD-001303范围类型没有活动上下文javax.enterprise.context.ConversationScoped

我可以在 servlet 中注入这些 bean,还是只能注入 Session 和 Request 范围的 bean?

0 投票
3 回答
8496 浏览

java - Weld/CDI 的最佳调试技巧是什么?

Java EE 6 的优点之一是新的依赖注入框架 - 带有 Weld 参考实现的 CDI - 这促使我们开始以与实现无关的方式在内部迁移到 JSR-330,其明确目标是能够拥有一个被冻结的核心 jar,然后能够添加额外的 jar,提供新模块替换核心 jar 中的功能。

我现在正在与 Weld 一起完成上述工作,坦率地说,幕后的魔法实在是太多了。它要么起作用,要么不起作用,并且默认情况下它不会对发生的事情提供太多帮助,因此您可以调查错误并修复它。

我希望有一些开关可以轻松启用以下功能:

  • 扫描了哪些类路径条目以及在哪里扫描?结果如何?
  • 哪些 bean 可用于哪个类的注入?
  • 是什么导致给定的 bean 以后不考虑?给定的罐子?

换句话说,我需要更详细地了解决策过程。出于某种原因,这不是 Guice 所需要的,也许是因为魔法少得多,也许是因为错误消息非常好。

您如何调试 Weld 应用程序,它有多大帮助?

0 投票
7 回答
7734 浏览

scope - 在 CDI Weld 中查看范围

我想@ViewScoped在我的应用程序中使用 - 范围作为某些网页的支持 bean。我还使用 CDI 将依赖项注入支持 bean。

但是,当我使用像这样注释的支持 bean

@Inject注释不会注入任何东西,NullPointerException一旦我访问依赖项,我就会得到一个。

然而,当我用

注入工作正常,但现在@ViewScoped被忽略,因为它不是 CDI / Weld 的一部分。

如何@ViewScoped与 CDI Weld 一起使用?

0 投票
1 回答
1061 浏览

jsf - 将 Weld CDI 集成到 jboss 6 AS 上的 JSF 1.2 EJB 应用程序中

从两个晚上开始,我一直在尝试将焊接 CDI 集成到带有 JSF 1.2 的 EJB 3.1 应用程序中。我只是尝试在 JSF 页面中调用带@Named注释的控制器。问题是,当我部署项目时没有抛出异常,调用页面时也没有抛出异常。

简单示例仅包含:

控制器:

它的调用:

谢谢