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

java - 使用来自 src/test/META-INF/beans.xml 的替代生产者进行焊接

我正在尝试使用 Weld SE 2.3.0.Final 在测试期间通过提供不同beans.xml的 in来交换注入依赖项的替代实现src/test/resources/META-INF

它似乎总是使用beans.xml虽然的主要版本,我不知道为什么。

首先这里是支持类

引擎.java

DefaultEngine.java

汽车.java

EngineProducer.java

应用程序.java

beans.xml和in的生产版本src/main/resources/META-INF

从 App.java 运行时,上面的代码应该打印(确实如此)

现在从测试代码中我想使用SportsEngine实现。所以我有以下

SportsEngine.java

TestEngineProducer.java

AppTest.java

WeldJUnit4Runner.java

beans.xml和in的测试版src/test/resources/META-INF

当测试方法运行时,它应该打印

但相反,它似乎使用了EngineProducer而不是TestEngineProducer并且打印了两次输出

为什么不使用测试 beans.xml?

如果我将<alternatives>测试 beans.xml 中的部分放在 main beans.xml 中,那么它可以工作,但是我不想在测试时交换 main/resources/META-INF 中的 beans.xml

0 投票
1 回答
1477 浏览

java - 如何获取焊接 SE 应用程序的可执行 jar

我有一个使用weld se 的小cli 应用程序,如果我从eclipse 中运行该应用程序,它可以正常工作(使用weld se 的主要方法:org.jboss.weld.environment.se.StartMain)

问题是我无法创建一个可以工作的可执行 jar。目前我使用 maven-assembly-plugin:

我还尝试了阴影插件: <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

但在所有情况下,我都会遇到同样多的错误:

同时我也尝试添加

按照这里的建议到我的 beans.xml 。没变...

0 投票
2 回答
1172 浏览

java - Java SE 上的 Weld 不使用替代方法

我有projectAprojectBprojectCEclipse Maven 项目。

  • ProjectA包含:
    • IMyApi界面。
    • “空”META-INF\beans.xml文件。
  • ProjectB包含:
    • IMyConfig界面。
    • MyConfigJndi的实施IMyConfig
    • MyApiImpl执行IMyApi,带有一个属性@Inject private IMyConfig config;
    • “空”META-INF\beans.xml文件。
  • ProjectC包含:
    • MyConfigAlter实现IMyConfig,标记为@Alternative
    • 初始化 Weld SE 并检索bean的Main类(和方法) 。IMyApi
    • a部分META-INF\beans.xmlMyConfigAlter列出的位置alternatives

现在,我运行Main该类,并且IMyApi成功检索到 bean(作为MyApiImpl实例)。但是这样的实例在其config属性中被注入了一个MyConfigJndi实例,而不是替代版本 ( MyConfigAlter)

我正在使用 Eclipse Luna + M2Eclipse。

我究竟做错了什么?

更新:我发现使用@Specializes而不是@Alternative解决问题,但我仍然认为这不是正确的解决方案(在某些情况下,我可能无法访问“默认”实现)。

更新 2:

我正在使用 Weld-se,2.2.10.Final:

初始化很简单

0 投票
1 回答
259 浏览

xml - 带有 Weld 实现的 Java SE 应用程序中的 IllegalAccessError

我正在尝试运行一个具有 CDI 焊接实现的独立应用程序,并且在该应用程序中我需要 EntityManager 来使用 Oracle 数据库。

当我运行我的应用程序(通过 Weld 主方法)时,cmd 行中显示以下内容:

什么可能导致这样的错误?

这是我的persistence.xml:

以下是依赖项:

这是我创建实体管理器的方法,相当标准:

0 投票
3 回答
3533 浏览

java - 尝试运行 Weld Se Applicaton 时出错 - Weld SE 容器无法初始化 - 找不到 bean 档案

我使用 Weld SE 创建了一个简单的 JavaSE 应用程序。我尝试使用 gradle run 运行它会引发异常:

我的理解是它找不到 beans.xml 文件。但它在 src/main/resources/META-INF/beans.xml 中:

我的主要课程是:

构建 gradle 文件是:

0 投票
1 回答
159 浏览

spring-data - Weld SE CDI 中的 Spring Elasticsearch 数据存储库 - UnsatisfiedResolutionException

我正在尝试使用 Weld SE 在 SE 应用程序中注入 Spring 数据存储库(在本例中为 Elasticsearch)。

存储库

定义 ElasticsearchTemplate:

Main(应用程序使用 org.jboss.weld.environment.se.StartMain 执行)很简单:

依赖项是:

我已经排除了 spring 上下文,但无论我是否排除上下文,我都会得到相同的异常。

在资源\META_INF\beans.xml 中:

抛出的异常是:

这个问题的原因是什么?

0 投票
1 回答
1557 浏览

java - java se环境下应用的weld容器服务如何?

我是焊缝新手,经过几天的探索,我只知道焊缝的一些基本概念。


我打算在java se环境中使用焊接容器。并遵循在 Java SE 中拥有 CDI 和 JPA 的最简单方法是什么?我的代码段如下:


我的应用程序基于maven。这是pom.xml中的 jar 依赖段

我的意图是将 SayHello 对象注入到 UseInject 对象中,因此该应用程序的最终输出是“Hello”。但是事情并没有那么顺利,jvm报如下错误

在此处输入图像描述

并且通过网上搜索,有一种说法是建立一个空的beans.xml是可以的,我按照它不能生效。至于我模仿的主要方法在Java SE中拥有CDI和JPA的最简单方法是什么? 我不知道它做了 什么,在 Java SE 中拥有 CDI 和 JPA 的最简单方法是什么?使用@Produces注解,我不知道我是否也应该使用它。我本来打算将它用于 SayHello 类,但我不知道应该导入哪个 jar 才能使用它,所以我放弃了。


现在我想: 1.知道se应用程序的焊接服务如何,换句话说,主要方法是做什么的?


2. 如何使用焊接成功运行我的应用程序?


3. 什么时候应该使用注解@Produces


我参考了一些相关问题,例如weld 和java se如何在JUnit 测试中引导weld-se等,但发现它们对我来说都是高级的。 感谢您提前关注。

0 投票
1 回答
313 浏览

dependency-injection - 使用 CDI 扩展解决模棱两可的依赖关系

我正在尝试修改我们现有的创建自己的代理 bean 的 CDI 扩展。现在只为每个服务创建了一个代理。服务具有类似于应用程序范围的内容,因此始终只有一个服务实例。

我想要完成的是为每个注入点创建一个代理 bean。我需要它们来存储一些特定于给定注入点的信息。如果同一个服务有更多的注入点,就会有更多的代理 bean,但它们后面仍然有一个服务实例。但是,当我以这种方式更改行为时,Weld 抱怨依赖关系不明确,因为它无法在两个完全相同的代理之间进行选择。

我怎样才能解决这个问题?基本上,我所做的是观察ProcessBean事件并为每个发现的 bean 的每个注入点创建一个新代理。然后我使用AfterBeanDiscovery#addBean方法将所有这些代理 bean 添加到容器中。我会以某种方式需要跳过最后一步并将它们手动注入到它们的注入点,或者能够影响选择要注入的正确 bean 的决定。如果给我一个注入点和一个可以注入其中的模棱两可的依赖项列表,我将能够根据其属性选择正确的依赖项。但我真的不知道是否有可能为 Weld 做出这个决定,以及我该怎么做。

编辑:我想做的只是实现我自己的范围,类似于@Dependent但使用代理,我可以在其中存储一些与给定注入点相关的附加信息。

EDIT2:我终于通过创建一个新的限定符来修复它,该限定符携带有关特定注入点的信息。这个限定符被添加到注入点和它的代理中。但这不是很好的解决方案,因为我必须用我自己的实现替换注入点,这允许修改限定符集合。我觉得必须有一个更优雅的解决方案。请让我知道如果你能想到任何。

0 投票
1 回答
1317 浏览

java - 将带有焊接的 Java SE 应用程序打包到可执行的 Jar 中

尝试从命令行运行 JAVA SE 可执行 jar 时出现以下异常:

但是,我能够在 Eclipse 中成功运行该程序,但是一旦打包到 jar 中,我总是会遇到这个错误。

这是我的 Maven 包插件:

这是我引导 Weld 的方式:

(我已经尝试了注释和未注释的代码,但仍然得到相同的错误)。任何帮助都会很棒,我真的尝试了所有事情。

0 投票
1 回答
952 浏览

cdi - 将 DeltaSpike 和 Weld SE 打包为 uber-jar 时“参数 bean 不得为空”

我正在尝试使用 CDI、DeltaSpike(引导)和 Weld SE 作为 CDI 实现来打包命令行应用程序。从我的 IDE 启动时,应用程序运行良好,但在将应用程序打包到 uber-jar 时收到一条模糊错误消息:

这是 maven-shade-plugin 配置:

boot()功能很简单:

鉴于这在从 IDE 启动时有效,它一定是包装问题,但我不知道原因可能是什么。

一个区别可能是 CDI 在扫描 bean 时会选择什么。在我beans.xml的应用程序中,我基本上排除了所有包,除了我自己的应用程序:

关于从这里开始的任何想法?