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

Bruce bbruen at ...2308...
Sun Sep 2 03:44:20 CEST 2012


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





More information about the User mailing list