【问题标题】:Commons configuration - JNDIConfiguration - How to?公共配置 - JNDIConfiguration - 如何?
【发布时间】:2010-01-29 10:28:16
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java configuration properties jndi apache-commons


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • "....您仍然需要一种将数据输入 JNDI 服务器的方法..." - 这是我的主要问题!怎么做?就我而言,不必担心 JNDI 服务器中的硬编码路径,因为它依赖于环境而不是应用程序依赖,这意味着当我打包使用它的应用程序时,不必将配置放置在一些我决定的路径,但可以在他/她想要的任何地方使用。
    • 将内容进出 JNDI 服务器需要 JNDI 编辑器工具。我不知道 JBoss 附带一个,但这样的东西一定存在于某个地方。
    【解决方案2】:

    我对@9​​87654322@ 和JNDIConfiguration 了解不多,但是如果您想要的是一组键/值对,那么按照Java EE 规范执行此操作的标准方法是使用@987654324 @ 在web.xmlejb.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 中,因此可以查找或注入。

    【讨论】:

    • 谢谢 ewernli,这将很有用!但这不是我要寻找的具体问题。
    【解决方案3】:

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

    正如@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>
    

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

    【讨论】:

    • 就是这样!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2023-03-17
    • 2020-07-19
    • 2021-11-29
    • 1970-01-01
    • 2018-10-29
    • 2011-12-29
    相关资源
    最近更新 更多