问题标签 [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.
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
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 。没变...
java - Java SE 上的 Weld 不使用替代方法
我有projectA
、projectB
和projectC
Eclipse 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.xml
中MyConfigAlter
列出的位置alternatives
。
- 的
现在,我运行Main
该类,并且IMyApi
成功检索到 bean(作为MyApiImpl
实例)。但是这样的实例在其config
属性中被注入了一个MyConfigJndi
实例,而不是替代版本 ( MyConfigAlter
)
我正在使用 Eclipse Luna + M2Eclipse。
我究竟做错了什么?
更新:我发现使用@Specializes
而不是@Alternative
解决问题,但我仍然认为这不是正确的解决方案(在某些情况下,我可能无法访问“默认”实现)。
更新 2:
我正在使用 Weld-se,2.2.10.Final:
初始化很简单
xml - 带有 Weld 实现的 Java SE 应用程序中的 IllegalAccessError
我正在尝试运行一个具有 CDI 焊接实现的独立应用程序,并且在该应用程序中我需要 EntityManager 来使用 Oracle 数据库。
当我运行我的应用程序(通过 Weld 主方法)时,cmd 行中显示以下内容:
什么可能导致这样的错误?
这是我的persistence.xml:
以下是依赖项:
这是我创建实体管理器的方法,相当标准:
java - 尝试运行 Weld Se Applicaton 时出错 - Weld SE 容器无法初始化 - 找不到 bean 档案
我使用 Weld SE 创建了一个简单的 JavaSE 应用程序。我尝试使用 gradle run 运行它会引发异常:
我的理解是它找不到 beans.xml 文件。但它在 src/main/resources/META-INF/beans.xml 中:
我的主要课程是:
构建 gradle 文件是:
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 中:
抛出的异常是:
这个问题的原因是什么?
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等,但发现它们对我来说都是高级的。 感谢您提前关注。
dependency-injection - 使用 CDI 扩展解决模棱两可的依赖关系
我正在尝试修改我们现有的创建自己的代理 bean 的 CDI 扩展。现在只为每个服务创建了一个代理。服务具有类似于应用程序范围的内容,因此始终只有一个服务实例。
我想要完成的是为每个注入点创建一个代理 bean。我需要它们来存储一些特定于给定注入点的信息。如果同一个服务有更多的注入点,就会有更多的代理 bean,但它们后面仍然有一个服务实例。但是,当我以这种方式更改行为时,Weld 抱怨依赖关系不明确,因为它无法在两个完全相同的代理之间进行选择。
我怎样才能解决这个问题?基本上,我所做的是观察ProcessBean
事件并为每个发现的 bean 的每个注入点创建一个新代理。然后我使用AfterBeanDiscovery#addBean
方法将所有这些代理 bean 添加到容器中。我会以某种方式需要跳过最后一步并将它们手动注入到它们的注入点,或者能够影响选择要注入的正确 bean 的决定。如果给我一个注入点和一个可以注入其中的模棱两可的依赖项列表,我将能够根据其属性选择正确的依赖项。但我真的不知道是否有可能为 Weld 做出这个决定,以及我该怎么做。
编辑:我想做的只是实现我自己的范围,类似于@Dependent
但使用代理,我可以在其中存储一些与给定注入点相关的附加信息。
EDIT2:我终于通过创建一个新的限定符来修复它,该限定符携带有关特定注入点的信息。这个限定符被添加到注入点和它的代理中。但这不是很好的解决方案,因为我必须用我自己的实现替换注入点,这允许修改限定符集合。我觉得必须有一个更优雅的解决方案。请让我知道如果你能想到任何。
java - 将带有焊接的 Java SE 应用程序打包到可执行的 Jar 中
尝试从命令行运行 JAVA SE 可执行 jar 时出现以下异常:
但是,我能够在 Eclipse 中成功运行该程序,但是一旦打包到 jar 中,我总是会遇到这个错误。
这是我的 Maven 包插件:
这是我引导 Weld 的方式:
(我已经尝试了注释和未注释的代码,但仍然得到相同的错误)。任何帮助都会很棒,我真的尝试了所有事情。
cdi - 将 DeltaSpike 和 Weld SE 打包为 uber-jar 时“参数 bean 不得为空”
我正在尝试使用 CDI、DeltaSpike(引导)和 Weld SE 作为 CDI 实现来打包命令行应用程序。从我的 IDE 启动时,应用程序运行良好,但在将应用程序打包到 uber-jar 时收到一条模糊错误消息:
这是 maven-shade-plugin 配置:
boot()
功能很简单:
鉴于这在从 IDE 启动时有效,它一定是包装问题,但我不知道原因可能是什么。
一个区别可能是 CDI 在扫描 bean 时会选择什么。在我beans.xml
的应用程序中,我基本上排除了所有包,除了我自己的应用程序:
关于从这里开始的任何想法?