我通常使用Commons Configuration来管理我的应用程序配置。我已经使用了属性文件配置。现在我对使用JNDIConfiguration很感兴趣,但是我无法理解这是如何工作的阅读文档或谷歌搜索它。
上下文化,我正在使用在JBoss AS中运行的webapp。
属性存储在哪里?在文件中?数据库中的一些表?
我会感激这个级别的任何指导,即使它是链接的形状,我可以阅读有关它的一些有价值的信息。
作为最后一点,我的目标是让我免除链接文件与我的属性的硬编码路径,但也不要强迫我在数据库表中使用我的配置。如果您对如何以其他方式做到这一点有任何建议可以自由分享。
答案 0 :(得分:1)
我对Commons Configuration
和JNDIConfiguration
了解不多,但如果您想要的是一组键/值对,那么根据Java EE规范执行此操作的标准方法是在env-entry
或web.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>
如果这不是你想要的,那么我不明白你在寻找什么:)在这种情况下,你应该澄清一下。