[Gambas-user] Files inside executables - access strategy advice (advanced)

Bruce bbruen at ...2308...
Sun Sep 2 05:40:02 CEST 2012


On Sun, 2012-09-02 at 03:54 +0200, Benoît Minisini wrote:
> Le 02/09/2012 03:44, Bruce a écrit :
> > Is there an easy way to access files inside a library or component
> > executable?  Or more correctly, "What is the best way..."
> >
> > I am abstracting some common database methods into a library out of
> > several of our apps.  The problem I am having is that these methods rely
> > on some metadata files that currently have to be copied into each
> > application (and thus is a potential version error source).  I would
> > like to put the metadata inside the library executable so that every app
> > using the library will be using the same metadata files.
> >
> > Here's the structure that is giving me Grief!
> >
> > MyApplication ---uses---> LibAppData ---uses--> LibBO
> >
> > LibBO provides the low level database access and consists of primarily a
> > class that acts as the parent class for all the LibAppData classes,
> > which in turn represent fairly complex "business data objects".  At the
> > moment the metadata representing the persistence maps for the objects
> > reside in a "BOMeta" subdir in (each of) the MyApplication executables.
> > These metadata files are needed by LibBO.  I can access them simply by
> > using
> >          File.Load("BOMeta/" & <objectfilename>)
> > which works fine as it's just like accessing any file within the
> > executable archive.
> >
> > Maybe a real example would help explain.  Two of our major apps are
> > "ManageStable" and "ManageAuctions" (the latter allows the user to
> > submit horses for sale at auctions.)
> > Both of these use a "horse" business object in LibAppData, so they both
> > currently need to have the metadata file "horseBO.meta" included at the
> > application level.  I want to move that metadata file into LibAppData.
> > But then LibBO cannot just access the file using the above simple
> > method.
> >
> > So far I have planned it along the following line:
> > 1) In LibAppData HorseBO._init() needs to copy all its metadata files
> > into a Temp$ directory.  This should be done in _init so that the files
> > are only copied once during an execution, not everytime a horse object
> > is created.
> > 2) LibBO can then expect to find the metadata in the
> > relevant /tmp/gambas.500/<process> directory.
> >
> > However, this fails to impress as firstly, there are over 30 different
> > business object classes and the copy would be invoked every time one of
> > the LibAppData classes is loaded and secondly, only some of the business
> > object classes are used by an individual app.
> >
> > Can anyone see or suggest a better way to do this?
> >
> > tia
> > Bruce
> >
> 
> I don't think I have understood everything...
> 
> A library can access any file located in the main project (by using the 
> special notation "../<path>").
> 
Yes, and that works fine.

> But a library cannot access files from other libraries, and the main 
> project cannot access files of any library too.
> 
That's right too.

> A workaround is opening the file where it is accessible, and sending 
> File references through libraries.
> 
This is the bit that I can't get to work. The library cannot open a file
inside its' @own executable@ using that "special notation" as that
refers to the main project (and therefore I can't send the File
references).

> Regards,
> 

regards
Bruce






More information about the User mailing list