如何将JNDI-name动态插入Spring

时间:2015-11-24 14:46:13

标签: java spring maven jndi

我的问题从这里开始。我有休息服务,我想查找remote-ejbs。 我使用Jersey和Spring作为框架。 我的实际认可是有效的,但它不够动态。

我在上下文中定义了类似的内容:

<jee:remote-slsb id="myServiceBean" 
                 jndi-name="ejb/ServiceBean" 
                 business-interface="..." 
                 >
      <jee:environment>
      ...
      </jee:environment>
</jee:remote-slsb>

我想做点什么

<jee:remote-slsb id="myServiceBean" 
                     jndi-name="${ejb.ServiceBean.JNDI_NAME}" 
                     business-interface="..." 
                     >
    <jee:environment>
    ...
    </jee:environment>
</jee:remote-slsb>

我需要这样做,因为JNDI_NAME可以因版本而改变。

ServiceBean{
     public static String JNDI_NAME = ejb/2.1/ServiceBean
}

我正在考虑通过编写Java代码来实现这一点,当我使用maven构建Project时,它会替换值。但那感觉不对。

因此,一般的问题是如何在使用maven构建项目时将Java类中的String转换为xml。

1 个答案:

答案 0 :(得分:0)

  

使用maven-resources-plugin和Filtering:

src/main/config
    +dev
        +app.properties
    +int
        +app.properties

src/main/resources
    +context.xml

app.properties (dev)
    +ejb.ServiceBean.JNDI_NAME=XXX
app.properties (int)
    +ejb.ServiceBean.JNDI_NAME=YYY

In context.xml
<jee:remote-slsb id="myServiceBean" 
                     jndi-name="${ejb.ServiceBean.JNDI_NAME}" 
                     business-interface="..." 
                     >
<jee:environment>

In pom.xml

<properties> 
    <env_dyn>dev</env_dyn> 
...
... 
<build>
    <resources> 
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
    </resources> 
    <filters>
            <filter>src/main/config/${env_dyn}/app.properties</filter>
    </filters>
...
...

mvn clean install=> ejb.ServiceBean.JNDI_NAME=XXX in context.xml because default properties>env_dyn=dev     
mvn clean install -Denv_dyn=dev => ejb.ServiceBean.JNDI_NAME=XXX in context.xml
mvn clean install -Denv_dyn=rec => ejb.ServiceBean.JNDI_NAME=YYY in context.xml