The way I have proceeded is by registering my custom ConfigSource
extension.

I have created a custom PropertiesConfigSource which extends DeltaSpike's
BaseConfigSource.
My implementation basically uses PropertyFileUtils.loadProperties(url) to
load the properties file.
The URL parameter is the absolute file path with the "file:" prefix.
Otherwise, my custom implementation is very similar to DeltaSpike's
PropertiesConfigSource.



On Mon, Dec 1, 2014 at 1:23 PM, Charlie Mordant <[email protected]> wrote:

> Hi,
>
> So you can always make your own ConfigSourceProvider.
>
> Regards,
>
> Charlie
>
> 2014-11-27 10:57 GMT+01:00 Pablo Pita <[email protected]>:
>
> > 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 <[email protected]>
> 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 <[email protected]>
> > > 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 <[email protected]>
> > 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 <
> [email protected]
> > >
> > >> > 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 <[email protected]
> >
> > >> > 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
> >
>
>
>
> --
> Charlie Mordant
>
> Full OSGI/EE stack made with Karaf:
> https://github.com/OsgiliathEnterprise/net.osgiliath.parent
>



-- 
Pablo Pita Leira

Reply via email to