Java 排除基于PropertyFileConfig(DeltaSpike,WebSphere 8.5.5)的CDIBean
我试图使用DeltaSpike 1.0Java 排除基于PropertyFileConfig(DeltaSpike,WebSphere 8.5.5)的CDIBean,java,jakarta-ee,cdi,deltaspike,Java,Jakarta Ee,Cdi,Deltaspike,我试图使用DeltaSpike 1.0@exclude-注释排除Bean实现。排除应基于如下属性值: @Exclude(onExpression = "providerimplementation!=mock") 我创建了一个PropertyFileConfig返回我的.properties文件名,让DeltaSpike获取配置的值,并在两个不同的实现bean中使用这个@Exclude,每个bean都像上面一样被排除 配置作为.jar文件包含在EAR中,两种实现都位于EAR中不同的.jar文件
@exclude
-注释排除Bean实现。排除应基于如下属性值:
@Exclude(onExpression = "providerimplementation!=mock")
我创建了一个PropertyFileConfig
返回我的.properties
文件名,让DeltaSpike获取配置的值,并在两个不同的实现bean中使用这个@Exclude
,每个bean都像上面一样被排除
配置作为.jar
文件包含在EAR中,两种实现都位于EAR中不同的.jar
文件中
我试图将整个归档部署到WebSphere8.5.5服务器上,在启动时,我得到了一个用于注入点的javax.enterprise.inject.AmbiguousResolutionException
在我看来,PropertyFileConfig
在表达式解析之前没有被提取,尽管我发现了对这种模式的引用(和),所以我想知道我的设置有什么问题。第一个答案:
不幸的是,通过PropertyFileConfig工具定义的属性不能与@Exclude一起使用
这是因为扩展只在容器初始化结束时注册PropertyFileConfig(这可能是强制性的,因为PropertyFileConfig类用作CDIBean)
相反,您必须使用默认的ConfigSource实现:
或者创建自己的自定义配置源
这里的一个快速解决方法是在默认属性文件中定义属性:META-INF/apache deltaspike.properties
而不是自定义属性文件
编辑:
事实上,我之前的回答是不完整的(至少对于DeltaSpike的最新版本(今天是1.3.0)):
javadoc for PropertyFileConfig现在记录了这一限制,并展示了使用serviceloader工具配置自定义属性文件的另一种方法:
使用战争是一种选择吗?由于各种类加载器问题,我们目前在DeltaSpike中对EAR没有很好的支持。据我所知,WebSphere(至少完整的概要文件)不支持单独部署WAR文件。我们目前在部署中使用“skinny WAR”设置,因此每个依赖JAR都直接放在EAR中。这个设置可能是问题所在吗?正常注射效果很好。