2016-09-20 1 views
0

Я знаю, что можно настроить Decorators в файле beans.xml, который встроен в EAR для развертывания.Включение CDI Decorator на основе свойств окружающей среды

Проблема в том, что я использую один и тот же EAR для всех сред, а набор свойств или конкретных конфигураций хранится в некоторой папке за пределами пакета.

Мне нужно определить, будет ли использоваться декоратор или нет «внешний beans.xml» или какой-либо аналогичный механизм (что-то, что находится за пределами EAR).

Любые идеи?

спасибо.

ответ

1

Как правило, это не сработает - стандартными средствами обеспечения являются beans.xml для подхода на основе архива и @Priority для глобального включения. Нет ничего подобного «external beans.xml».

Хотя есть способ включить его с помощью расширение. Вам необходимо настроить расширение и наблюдать за AfterTypeDiscovery event. Оттуда вы можете использовать public List<Class<?>> getDecorators();, который возвращает MUTABLE список декораторов - так что вы можете добавить свой собственный в список (в форме Class). Это должно помочь.

1

Другим сценарием, который вы можете использовать, является использование включения и обработки времени сборки. Если вы знаете, прежде чем руки, какие свойства активизируют определенные декоратор при построении времени, то вы можете использовать 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 =/путь/к/дополнительные/ресурсы

Смежные вопросы