问题标签 [weld-se]

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 投票
0 回答
138 浏览

cdi - 获取所有带有限定符的 Bean

我希望获得所有带有限定符的 Bean。我目前的方法是获取所有已注册的 Bean 并查找 Qualifier 注释。但由于 Bean 是代理对象,这是不可能的。

我正在使用 Weld SE 2.2

0 投票
0 回答
432 浏览

maven - 带有多个模块的weld-se CDI和intellij idea

我有一个案例,我正在开发由 maven 构建的 3 个 jar(A、B、C)构建的简单独立应用程序。每个 jar 都是 intellij idea 中的一个单独模块。

jar A 依赖于 jar B 和 C。jar A 启动weld-se 容器并从其自身和其他jar 加载bean。

现在,当所有 jars 都是从 maven/cmd 构建和启动时,这工作得很好。但是如果我从 intellij 启动它,weld-se 无法从其他模块中找到 bean - 即使 beans.xml 正确放置在 META-INF 中并且 META-INF 被复制到目标目录。

出现问题是因为 IDEA 在启动应用程序时将目标/类(对于每个托管模块)放在类路径上,而不是构建 jars(因此在制作项目后立即获取对源的任何更新)。

在 IDEA 中是否有任何解决方法可以使用这种配置进行开发???我正在使用 IDEA 12,但我认为这并不重要。

我知道为战争存档构建工件有时很棘手,我不得不排除模块并强制 inetllij 加载 jar 来存档。但我不能在这里做。

任何帮助表示赞赏!

0 投票
2 回答
5526 浏览

java - CDI:从 JUnit 测试调用时不调用拦截器

我按照JBoss 文档创建了一个拦截器。

为了测试拦截器,我放了:

现在我想使用WeldJUnit4Runner 类在单元测试中测试这个拦截器。

现在预期的输出当然是

但相反,输出是

主要问题是,如果我将 bean 注入到我的测试中,这也是正确的:我调用的 bean 的第一个方法被拦截,但如果此方法调用另一个方法,则不会调用拦截器。

任何想法都非常感谢!


我只是尝试按照@adrobisch 的建议修改我的代码,这很有效:

输出是(如预期的那样)

但是,以下方法不起作用

这里的输出是

但是,这似乎符合规范!现在一切都很好。

0 投票
1 回答
846 浏览

log4j2 - Weld-SE 不使用 log4j2 记录

我将weld-se 和log4j2 用于记录器。但我无法从 Weld 那里得到任何东西。其他日志记录工作正常。

图书馆:

log4j2.xml

谢谢你的建议。

0 投票
2 回答
747 浏览

java - 带有 Weld-SE 上下文的 Java 反射实例

我在使用 Weld 上下文通过反射创建对象时遇到问题。

我正在从外部文件加载类及其配置。

简化我的代码如下:

然后我正在创建这个类的实例

模块类:

模块创建成功,但它没有焊接上下文来注入测试类。而且我找不到正确的方法。我尝试制作自己的生产者,但我对 Java SE 中的 Weld 和 CDI 还不太熟悉。

我破碎的制片人(我认为它非常糟糕)

我找不到关于这个问题的任何东西,所以如果有人可以帮助我,我会很高兴。我真的需要这种创建类的方式,因为我不想在每次需要更改 Module 类中的某些属性时都更改我的代码。

编辑:

我无法与制片人合作。但我找到了解决方法。我不确定这是否是一个好的解决方案,但它现在有效。

我创建了一个带有 Weld 上下文的单例类。

然后我可以初始化我的应用程序

稍后在代码中我可以重用它进行反射

编辑2:

我找到了更好的解决方案。我可以注入焊接实例

那么我只能这样做

我认为这是一个很好的解决方案。

0 投票
1 回答
24545 浏览

java - 从线程调用 bean 时,范围类型 javax.enterprise.context.RequestScoped 没有活动上下文

在使用 Weld-SE 2.1.2.Final 获取 bean 并从线程调用它时,我遇到以下异常:

线程“主”org.jboss.weld.context.ContextNotActiveException 中的异常:WELD-001303:范围类型 javax.enterprise.context.RequestScoped 没有活动上下文

我的 bean 用 @RequestScooped 注释。如果我注释@ApplicationScoped 那么它工作正常,但我需要保留@RequestScooped。

这是一个复制器:

你遇到过这种行为吗?请问有什么想法可以完成这项工作吗?

0 投票
2 回答
701 浏览

jakarta-ee - 由于未找到拦截器类,gradle 测试失败

我正在完成开始 Java EE 7中的练习,但我正在尝试使它们适应使用 Gradle 而不是 Maven。对于第 2 章拦截器练习,我编写了这个 build.gradle:

我只是直接从作者的 GitHub使用 src 目录。 ./gradlew -x test build成功然后java -jar build/libs/gradleTest.jar给出预期的输出(尽管它也会吐出很多意外警告)。 ./gradlew test但是失败并出现此错误:

beans.xml 和所有类文件都直接来自作者在 GitHub 上的存储库,并且似乎与上述错误所说的完全一样。beans.xml中声明了拦截器,拦截器类用@Interceptor注解。

我的猜测是问题出在我的 gradle 构建上。有谁看到问题是什么?

0 投票
5 回答
4990 浏览

java - 将weld-se 与Gradle 应用程序插件一起使用时的Bean 发现问题

我正在构建一个基于 Gradle 的 Java SE 应用程序,该应用程序基于 Hibernate 作为我选择的 ORM。我的计划是使用weld-se能够在EntityManagers整个应用程序中使用 CDI 注释进行注入。

基于在HibernateUtilHibernate 文档中找到的通用帮助器类,我转向 JPA 接口并添加@Produces注释以提供生产者方法(我也添加了一个空META-INF/beans.xml的):

但是,当我尝试@Inject在字段上使用注释时,Weld 无法解析正确的生产者方法并产生异常:

线程“主”org.jboss.weld.exceptions.UnsatisfiedResolutionException 中的异常:WELD-001308:无法解析任何类型的 bean:类 app.DemoApplication;限定符:[@javax.enterprise.inject.Any()] at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:101) at app.Main.main(Main.java:14)

有问题的代码通过 Weld 容器实例化以支持 CDI,并且非常基础:

我在这里错过了一个明显的观点吗?如何让 Weld 发现注入依赖项的生产者方法?

我在Github上整理了一个最小的项目来重现我的问题。感谢您提供任何有用的建议!:)

2015 年 5 月 18 日更新:

好像我误解了错误信息。事实上,Weld 甚至没有解析DemoApplicationbean,这让我相信 bean 的发现过程有问题。在将我的weld-se 依赖项更新到新发布的3.0.0.Alpha8 版本(请参阅链接的Github 存储库)之后,我能够通过手动告诉Weld 我的bean 来让应用程序工作Main.java

尽管如此,任何关于为什么尽管有一个空META-INF/beans.xml的位置但没有自动发现 bean 的建议都非常感谢!

2015 年 5 月 19 日更新:

谜团已解开,请参阅下面我自己的答案。我更改了问题标题,以反映问题的实际性质。

0 投票
1 回答
593 浏览

java - 我是否需要通过 CDI 中的生产者进行所有对象实例化

我刚开始一个CDI项目。在这个项目中,一个 Beans2 被注入到一个 Beans1 中。但是 Beans2 有一个创建文件的方法。此方法像这样实例化文件对象:

因为这个实例化不是由 CDI 容器管理的,所以 Bean2 没有注入到 Beans1 中。我尝试让生产者将文件注入到 Beans2 中,但我是否需要为我将使用的所有 java 基类做同样的事情?

是否有另一种解决方案可以简单地使用不需要注入的类?

豆1:

豆2:

pathDir 生产者:

PathDir 注释:

在此示例中,如果在 foo() 方法中调用 new File,则 PathDir 不是 Inject。

0 投票
0 回答
191 浏览

selenium - 如何在 JUnit @BeforeClass 中使用 CDI

我尝试将 CDI 与 JUnit 一起使用。我看到了很多实现使用非静态方法的自定义 Runner 的示例。但我还有一个约束。我在 JUnit 和 selenium 之上使用 Cucumber runner。所以我不能使用 BlockJUnit4ClassRunner。我必须使用 Cucumber Runner。

任何想法