3

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

语境化,我在 JBoss AS 中运行的 webapps 中工作。

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

我将感谢此级别的任何指导,即使它以链接的形式出现,我可以在其中阅读一些有价值的信息。

最后一点,我的目标是让我不必为我的属性链接一个带有硬编码路径的文件,但也不要强迫我将我的配置放在数据库表中。如果您对如何以其他方式做到这一点有任何建议,请免费分享。

4

3 回答 3

1

Commons Configuration我对and了解不多JNDIConfiguration,但是如果您想要的是一组键/值对,那么按照 Java EE 规范执行此操作的标准方法是env-entryweb.xmlor中使用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 中,因此可以查找或注入它们。

于 2010-01-29T10:53:53.597 回答
1

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

在我看来,JNDI 不是您想要的,它只是稍微推动了问题。JBoss 仍然需要将配置数据存储在某个地方,因此您仍然会遇到同样的基本问题。

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

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

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

于 2010-01-29T10:54:52.810 回答
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>

如果这不是您要查找的内容,那么我不明白您要查找的内容:) 在这种情况下,您也许应该澄清一下。

于 2010-02-01T13:51:27.720 回答