I bet that there is probably
a simpler solution, but how about writing you own ObjectPrivider? It is really
not that much code.
The
ObjectProvider:
public class
ConfigObjectProvider implements ObjectProvider {
/**
*/
public ConfigObjectProvider() {
super();
}
*/
public ConfigObjectProvider() {
super();
}
/**
* @see org.apache.hivemind.service.ObjectProvider#
* provideObject(org.apache.hivemind.internal.Module, java.lang.Class, java.lang.String, org.apache.hivemind.Location)
*/
public Object provideObject( Module contributingModule, Class propertyType, String locator, Location location ) {
* @see org.apache.hivemind.service.ObjectProvider#
* provideObject(org.apache.hivemind.internal.Module, java.lang.Class, java.lang.String, org.apache.hivemind.Location)
*/
public Object provideObject( Module contributingModule, Class propertyType, String locator, Location location ) {
File configFile =
new File( locator );
Properties properties = new Properties();
try {
properties.load( new FileInputStream( configFile ) );
return properties;
} catch ( FileNotFoundException fnfe ) {
throw new ApplicationRuntimeException( "Could not locate file: " + locator, fnfe );
} catch ( IOException ioe ) {
throw new ApplicationRuntimeException( "Could not load config file: " + locator, ioe );
}
}
Properties properties = new Properties();
try {
properties.load( new FileInputStream( configFile ) );
return properties;
} catch ( FileNotFoundException fnfe ) {
throw new ApplicationRuntimeException( "Could not locate file: " + locator, fnfe );
} catch ( IOException ioe ) {
throw new ApplicationRuntimeException( "Could not load config file: " + locator, ioe );
}
}
}
The hivemind fragment to
define it:
<contribution
configuration-id="hivemind.ObjectProviders">
<provider prefix="config" service-id="ConfigObjectProvider"/>
</contribution>
<provider prefix="config" service-id="ConfigObjectProvider"/>
</contribution>
<service-point
id="ConfigObjectProvider"
interface="org.apache.hivemind.service.ObjectProvider">
<create-instance class="yourpackage.objectprovider.ConfigObjectProvider"/>
</service-point>
<create-instance class="yourpackage.objectprovider.ConfigObjectProvider"/>
</service-point>
Usage example:
<service-point
id="ConfigObjectProviderTest" interface="java.util.Map">
This "service" now contains the config properties from c:\temp\test.properties!
<invoke-factory>
<construct class="java.util.HashMap">
<object>config:c:\temp\test.properties</object>
</construct>
</invoke-factory>
</service-point>
This "service" now contains the config properties from c:\temp\test.properties!
<invoke-factory>
<construct class="java.util.HashMap">
<object>config:c:\temp\test.properties</object>
</construct>
</invoke-factory>
</service-point>
With the ObjectProvider you
can inject the properties everywhere where you need a
config file as a map.
config file as a map.
Hope that helps a little bit.
Stefan
Von: Fernando Enrique Ocampo Calero [mailto:[EMAIL PROTECTED]
Gesendet: Mo 19.09.2005 16:44
An: [email protected]
Betreff: properties file
Hi,
I am looking hivemind a few days ago (I think my project solution so far) and in a little example I tried to load in a Map some "key/values" based in the example of your hivemind documentation (successful test)... here the example:
<configuration-point id="Simple">
<schema>
<element name="test" key-attribute="key">
<attribute name="key"/>
<attribute name="value" required="true"/>
<rules>
<push-attribute attribute="value"/>
<invoke-parent method="addElement"/>
</rules>
</element>
</schema>
</configuration-point>
<contribution configuration-id="Simple">
<test key="Message" value="com.digicomm.messages.Message"/>
<test key="BytesMessage" value="com.digicomm.messages.BytesMessage"/>
<test key="ObjectMessage" value="com.digicomm.messages.ObjectMessage"/>
<test key="StreamMessage" value="com.digicomm.messages.StreamMessage"/>
<test key="TextMessage" value="com.digicomm.messages.TextMessage"/>
<test key="MapMessage" value="com.digicomm.messages.MapMessage"/>
<test key="xstreamalias.properties" value="nono"/>
</contribution>
As I say It is OK, but my question is what is the way (in hivemind) to avoid write the data (the key/values) in the .xml file? can does HiveMind read a properties file and convert it in a properties object? what is the way to do that?.
If you don't understand my question, please let me know.
Regards,
Fernando
I am looking hivemind a few days ago (I think my project solution so far) and in a little example I tried to load in a Map some "key/values" based in the example of your hivemind documentation (successful test)... here the example:
<configuration-point id="Simple">
<schema>
<element name="test" key-attribute="key">
<attribute name="key"/>
<attribute name="value" required="true"/>
<rules>
<push-attribute attribute="value"/>
<invoke-parent method="addElement"/>
</rules>
</element>
</schema>
</configuration-point>
<contribution configuration-id="Simple">
<test key="Message" value="com.digicomm.messages.Message"/>
<test key="BytesMessage" value="com.digicomm.messages.BytesMessage"/>
<test key="ObjectMessage" value="com.digicomm.messages.ObjectMessage"/>
<test key="StreamMessage" value="com.digicomm.messages.StreamMessage"/>
<test key="TextMessage" value="com.digicomm.messages.TextMessage"/>
<test key="MapMessage" value="com.digicomm.messages.MapMessage"/>
<test key="xstreamalias.properties" value="nono"/>
</contribution>
As I say It is OK, but my question is what is the way (in hivemind) to avoid write the data (the key/values) in the .xml file? can does HiveMind read a properties file and convert it in a properties object? what is the way to do that?.
If you don't understand my question, please let me know.
Regards,
Fernando
