[英]OpenWebbeans CDI Decorator throws InvocationTargetException
[英]Enabling CDI Decorator based on environmental properties
我知道可以在要部署的EAR中嵌入的“ beans.xml”文件中配置Decorators。
问题是我在所有环境中都使用相同的EAR,并且属性或特定配置集存储在软件包外部的某个文件夹中。
我需要确定是否使用Decorator,或者是否使用“ external beans.xml”或某种类似的机制(在EAR之外的某种东西)。
有任何想法吗?
非常感谢你。
通常,这是行不通的-启用的标准方法是针对每个归档方法的beans.xml
和用于全局启用的@Priority
。 没有像“ external beans.xml”这样的东西。
尽管有一种方法可以通过extension启用它。 您需要设置扩展并观察AfterTypeDiscovery
事件 。 从那里可以使用public List<Class<?>> getDecorators();
它返回装饰器的MUTABLE列表-因此您可以将自己的装饰器添加到列表中(以Class
的形式)。 那应该启用它。
您可以使用的另一种情况是利用构建时包含和处理。 如果您事先知道,哪些属性会在构建时激活特定的装饰器,那么您可以使用Maven资源以及系统属性来定义要过滤的其他资源,因此:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompant</groupId>
<artifactId>my-project-id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<some.kind.of.selector.properties>$basedir}/src/main/resources/development</some.kind.of.selector.properties>
</properties>
<build>
<resources>
<resource>
<directory>${some.kind.of.selector.properties}</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>test</id>
<properties>
<some.kind.of.selector.properties>$basedir}/src/main/resources/test</some.kind.of.selector.properties>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<some.kind.of.selector.properties>$basedir}/src/main/resources/prod</some.kind.of.selector.properties>
</properties>
</profile>
</profiles>
</project>
在构建时,可以为每个环境指定不同的beans.xml
:
mvn全新安装-Pprod
甚至直接指定属性
mvn全新安装-Dsome.kind.of.selector.properties = /路径/到/其他/资源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.