![](/img/trans.png)
[英]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.