Commons配置 - JNDIConfiguration - 如何?

时间:2010-01-29 10:28:16

标签: java configuration properties jndi apache-commons

我通常使用Commons Configuration来管理我的应用程序配置。我已经使用了属性文件配置。现在我对使用JNDIConfiguration很感兴趣,但是我无法理解这是如何工作的阅读文档或谷歌搜索它。

上下文化,我正在使用在JBoss AS中运行的webapp。

属性存储在哪里?在文件中?数据库中的一些表?

我会感激这个级别的任何指导,即使它是链接的形状,我可以阅读有关它的一些有价值的信息。

作为最后一点,我的目标是让我免除链接文件与我的属性的硬编码路径,但也不要强迫我在数据库表中使用我的配置。如果您对如何以其他方式做到这一点有任何建议可以自由分享。

3 个答案:

答案 0 :(得分:1)

我对Commons ConfigurationJNDIConfiguration了解不多,但如果您想要的是一组键/值对,那么根据Java EE规范执行此操作的标准方法是在env-entryweb.xml中使用ejb.xml

<env-entry>
  <env-entry-name>maxExemptions</env-entry-name>
  <env-entry-value>10</env-entry-value>
  <env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>

(取自JBoss web conf. reference.

的例子

这些值绑定在JNDI中,以便可以查找或注入它们。

答案 1 :(得分:1)

JNDIConfiguration在JNDI服务器(在您的情况下,JBoss JNDI服务器)上查找配置数据。但是,您仍然需要一种方法将数据首先放入JNDI服务器,而Commons-Configuration对此无法帮助您。

听起来我觉得JNDI不是你想要的,只是把问题推到了一边。 JBoss仍然需要在某处存储配置数据,因此您仍然会遇到相同的基本问题。

如果您不想要硬编码的文件路径,并且您不想要数据库,那么我建议您通过系统属性传递属性文件的位置,例如

java -Dmy.config.path=/my/config.properties com.MyClass

然后将该位置传递给Commons Configuration,让它以这种方式加载您的配置。没有硬编码路径,没有数据库。

答案 2 :(得分:0)

  

属性存储在哪里?在文件中?数据库中的一些表?

正如@ewernli所提到的,在JNDI树中添加条目的Java EE方法是在部署描述符中使用env-entry

现在,如果您不想在多个部署描述符中重复相同的env-entry,那么有一个用于指定全局JNDI绑定的服务:JNDIBindingServiceMgr

下面是提供的jboss-service.xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server PUBLIC "-//JBoss//DTD MBean Service 4.0//EN"
          "http://www.jboss.org/j2ee/dtd/jboss-service_4_0.dtd">
<server>
   <mbean code="org.jboss.naming.JNDIBindingServiceMgr"
         name="jboss.tests:service=JNDIBindingServiceMgr">
      <attribute name="BindingsConfig" serialDataType="jbxb">
         <jndi:bindings
            xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:jndi="urn:jboss:jndi-binding-service:1.0"
            xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd"
            >
            <jndi:binding name="urls/jboss-home">
               <jndi:value type="java.net.URL">http://www.jboss.org</jndi:value>
            </jndi:binding>

            <jndi:binding name="hosts/localhost">
               <jndi:value editor="org.jboss.util.propertyeditor.InetAddressEditor">
                  127.0.0.1
               </jndi:value>
            </jndi:binding>

            <jndi:binding name="maps/testProps">
               <java:properties xmlns:java="urn:jboss:java-properties"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
                  xs:schemaLocation="urn:jboss:java-properties resource:java-properties_1_0.xsd">
                  <java:property>
                     <java:key>key1</java:key>
                     <java:value>value1</java:value>
                  </java:property>
                  <java:property>
                     <java:key>key2</java:key>
                     <java:value>value2</java:value>
                  </java:property>
               </java:properties>               
            </jndi:binding>
         </jndi:bindings>
      </attribute>
      <depends>jboss:service=Naming</depends>
   </mbean>

</server>

如果这不是你想要的,那么我不明白你在寻找什么:)在这种情况下,你应该澄清一下。