Изменить свойства конфигурации ejb-jar.xml во время развертывания в GlassFish 4.0

У меня есть ejb-jar.xml, который содержит информацию о конфигурации для одного из моих MDB. В конфигурации есть:

 <activation-config-property>
        <activation-config-property-name>addressList</activation-config-property-name>
        <activation-config-property-value>mq://test.server.uk:7676</activation-config-property-value>
</activation-config-property>

Поскольку мой проект построен и упакован, а затем распространен среди пользователей, я должен быть в состоянии убедиться, что это значение может быть изменено, поскольку у пользователей разные адреса серверов.

В настоящее время у меня есть возможность установить адрес в файле свойств. Можно ли как-то изменить этот XML-код во время развертывания на glassfish 4.0 со значением свойства?

Если нет, то придется ли мне устанавливать значение каждый раз, когда кто-то хочет приложение, и перестраивать его?

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

2 ответа

Решение

Я нашел простой способ изменить список адресов в Glassfish 4.0. Это решение позволяет использовать оставшуюся часть вашего @ActivationConfigProperty. Для меня, когда пользователь использует сценарий установки для установки, я могу запустить следующие команды:

asadmin server.jms-service.type = REMOTE

asadmin set configs.config.server-config.jms-service.jms-host.default_JMS_host.host=
"testserver.test.te.uk" 

asadmin restart-domain

Вы задаете для узла JMS по умолчанию тип REMOTE, после чего брокер использует адрес, определенный в узле JMS по умолчанию.

Затем вы устанавливаете адрес хоста с помощью команды asadmin set.

Как только это будет сделано, вам нужно перезагрузить стеклянную рыбу.

Это, очевидно, зависит от стеклянного контейнера, но это все, что мне нужно.

Одна вещь, которую вы можете попробовать, это использовать @AroundConstruct перехватчик, чтобы установить значение на MDB во время выполнения. Стоит отметить, что хотя в вашем файле ejb-jar.xml можно использовать заполнители, он в основном зависит от контейнера, и явное отсутствие материалов для чтения о том, как это делается для Glassfish, должно вызывать у вас беспокойство. Давайте попробуем это:

  1. Определите перехватчик на вашем MDB:

    @MessageDriven
    @Interceptors(AddressListInterceptor.class)
    public class YourMDB
    
  2. Определите ваш перехватчик

    public class AddressListInterceptor {
    
        @AroundConstruct
        private void begin(InvocationContext iCtxt) {
    
            /**load your property prior to this point */
    
    
            ActivationConfigProperty addressList = new ActivationConfigProperty{
    
                                                      public String propertyName(){
                                                        return "addressList";
                                                      }
                                                      public String propertyValue(){
                                                        return theAddressList;
                                                       }
    
                                     public Class<? extends Annotation> annotationType(){
                                          return ActivationConfigProperty.class;
                                      }                 
    
                                                   };
    
              try {
                    /**get the annotations, with the intention of adding yours (addressList) to the array using the method demonstrated in 
                      http://stackru.com/a/14276270/1530938  */
                   Annotations[] annotations = iCtxt.getClass().getAnnotations(); 
    
                    iCtxt.proceed(); //this will allow processing to continue as normal
               } catch (Exception ex) {
    
               } 
       }
    

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

Другие вопросы по тегам