deltaspike-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pablo Pita <pablo.p...@gmail.com>
Subject Re: DeltaSpike configuration with absolute path of a properties file
Date Thu, 27 Nov 2014 09:57:42 GMT
I have been looking into DeltaSpike code for my problem. Ideally, I would
like to load a properties file with an absolute path by implementing
PropertyFileConfig, but it seems that is not feasible.

The reason is that DeltaSpike will resolve the filename using
PropertyFileUtils.resolvePropertyFiles. This method is :

 public static Enumeration<URL> resolvePropertyFiles(String
propertyFileName) throws IOException
    {
        ClassLoader cl = ClassUtils.getClassLoader(null);

        Enumeration<URL> propertyFileUrls =
cl.getResources(propertyFileName);

        //fallback - see DELTASPIKE-98
        if (!propertyFileUrls.hasMoreElements())
        {
            cl = PropertyFileUtils.class.getClassLoader();
            propertyFileUrls = cl.getResources(propertyFileName);
        }

        return propertyFileUrls;
    }


After reading some Resource information [1] and [2], by just using
getResources in this method to locate the propertyFileName, the case when
it is an absolute file path in the system is not covered as getResources
searches by taking  the classpath into account. If I extend the method this
way, then it works:

    public static Enumeration<URL> resolvePropertyFiles(String
propertyFileName) throws IOException
    {
        ClassLoader cl = ClassUtils.getClassLoader(null);

        Enumeration<URL> propertyFileUrls =
cl.getResources(propertyFileName);

        //fallback - see DELTASPIKE-98
        if (!propertyFileUrls.hasMoreElements())
        {
            cl = PropertyFileUtils.class.getClassLoader();
            propertyFileUrls = cl.getResources(propertyFileName);
        }

        if (!propertyFileUrls.hasMoreElements())
        {
            File f = new File(propertyFileName);
            if (f.isFile()) {
                Vector<URL> v = new Vector<URL>();
                v.add(f.toURI().toURL());
                propertyFileUrls = v.elements();
            }
        }
        return propertyFileUrls;
    }


Should then the resolvePropertyFiles try a bit more as done here? Any
feedback on this?


[1] https://docs.oracle.com/javase/jp/8/technotes/guides/lang/resources.html
[2]
http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading

On Wed, Nov 26, 2014 at 3:56 PM, Pablo Pita <pablo.pita@gmail.com> wrote:

> Uhmm ... I have not succeeded with the gist, but I have just created a
> small project that can be cloned:
>
> https://github.com/pleira/ds-config-file.git
>
> Move the file myconfig.properties to D:/EMOS.web/cfg/myconfig.properties
> and launch the test. I get:
>
> 26.11.2014 15:41:51
> org.apache.deltaspike.testcontrol.api.junit.CdiTestSuiteRunner$LogRunListener
> testStarted
> INFO: [run] com.pleira.MyConfigFileTest#testGetPropertyFileName
> 26.11.2014 15:41:51
> org.apache.deltaspike.testcontrol.api.junit.CdiTestSuiteRunner$LogRunListener
> testFailure
> INFO: [failed] com.pleira.MyConfigFileTest#testGetPropertyFileName
> message: expected:<somevalue> but was:<null>
> 26.11.2014 15:41:51
> org.apache.deltaspike.testcontrol.api.junit.CdiTestSuiteRunner$LogRunListener
> testFinished
> INFO: [finished] com.pleira.MyConfigFileTest#testGetPropertyFileName
>
>
>
> On Wed, Nov 26, 2014 at 2:41 PM, John D. Ament <johndament@apache.org>
> wrote:
>
>> For the second option, can you post a gist w/ log file output?
>>
>> On Wed Nov 26 2014 at 8:35:58 AM Pablo Pita <pablo.pita@gmail.com> wrote:
>>
>> > As I am on Windows, and I have been using thiese kind of
>> > PropertyFileConfig's without success:
>> >
>> > 1.-
>> >
>> > public class MyConfigFile implements PropertyFileConfig {
>> >
>> >     @Override
>> >     public String getPropertyFileName() {
>> >         return "D:\\web\\cfg\\my.properties";
>> >     }
>> >
>> > }
>> >
>> > 2.- returning the file:// :
>> >
>> > public class MyConfigFile implements PropertyFileConfig {
>> >
>> >     @Override
>> >     public String getPropertyFileName() {
>> >         return "file:///D:/web/cfg/my.properties";
>> >     }
>> >
>> > }
>> >
>> > Can you succeed loading the properties with a full file path?
>> >
>> > Pablo Pita
>> >
>> >
>> >
>> > On Wed, Nov 26, 2014 at 2:27 PM, John D. Ament <johndament@apache.org>
>> > wrote:
>> >
>> > > What value did you provide?  All of the property file loading is done
>> via
>> > > URLs, so if I had to guess you need file://
>> > >
>> > >
>> > > https://github.com/apache/deltaspike/blob/master/
>> > deltaspike/core/api/src/main/java/org/apache/deltaspike/
>> > core/util/PropertyFileUtils.java
>> > >
>> > > John
>> > >
>> > >
>> > > On Wed Nov 26 2014 at 7:47:22 AM Pablo Pita <pablo.pita@gmail.com>
>> > wrote:
>> > >
>> > > > Hello,
>> > > >
>> > > > I would like to use DeltaSpike configuration mechanisms using a
>> > > properties
>> > > > file which is not in the classpath. I had no success by implementing
>> > > > MyPropertyFileConfig and returning the absolute path of the file in
>> the
>> > > > String getPropertyFileName() method. Is there a simple way to load
a
>> > > > property file that is not in the classpath?
>> > > >
>> > > > Thanks for any hints,
>> > > > --
>> > > > Pablo Pita Leira
>> > > >
>> > >
>> >
>> >
>> >
>> > --
>> > Pablo Pita Leira
>> >
>>
>
>
>
> --
> Pablo Pita Leira
>



-- 
Pablo Pita Leira

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message