在GlassFish 4.0中部署期间修改ejb-jar.xml的配置属性

时间:2016-01-28 14:17:50

标签: java-ee glassfish ejb ejb-jar.xml

我有一个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>

当我的项目构建和打包然后分发给用户时,我需要能够确保可以修改此值,因为用户具有不同的服务器地址。

目前我可以选择在属性文件中设置地址。无论如何我可以在使用属性值在glassfish 4.0上部署期间修改此xml吗?

如果不是,每次有人想要应用程序并重新构建它时,我是否必须设置该值?

我愿意将配置放在我需要动态的地方,以便用户可以在属性文件中设置服务器地址。

2 个答案:

答案 0 :(得分:3)

您可以尝试的一件事是使用@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://stackoverflow.com/a/14276270/1530938  */
                   Annotations[] annotations = iCtxt.getClass().getAnnotations(); 
    
                    iCtxt.proceed(); //this will allow processing to continue as normal
               } catch (Exception ex) {
    
               } 
       }
    
  3. 除了不自觉地需要自己扫描和修改注释之外,这种方法给你带来的好处是,你可以进入MDB的生命周期并修改注释的值,就在bean之前intantiated。当bean投入使用时,它将获取您已设置的值,并且所有内容都应按顺序排列

答案 1 :(得分:0)

我找到了一种修改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命令设置主机地址。

完成后,您需要重新启动glassfish。

这显然是依赖于玻璃鱼容器,但这就是我所需要的。