Background: I'm looking for a way to install code and content on a MarkLogic 
installation so that it is available to any other application that gets 
installed. This is more then just including common code, but includes read-only 
XML files we want to insert into the DB. For example, we may have a Client 
Device Detection Library that has the WURFL xml file and code to use it as part 
of it's installation. Now any other application in this MarkLogic installation 
can just call some convenience functions to do device detection.

The problem: When you create an app server you specify the root. The code for 
that app server can only see files under that root. So if I want to install 
common code and also three applications, my directories in my Modules database 
might look like this:

/code
      |- libraries
          |- devices
      |- appA
      |- appB
      |- appC

The code under appA cannot see or execute anything under libraries (as far as I 
know). So how can I install common code once and allow other apps to use it?


Option 1: I could include the "libraries/devices" directory and code under each 
application (appA/libraries/devices, appB/libraries/devices, etc.). That's not 
a single installation of common code anymore and is not how I'd like to 
maintain the code.

Option 2: I could make the root for all apps "/" instead of "appA", "appB", 
etc. then each app would be have access to "/libraries/devics". But then I'd 
have to refactor all my code to change the import paths (/appA/default.xqy, 
etc.). Plus I don't like having to specify in the context in the code for every 
app. Then every app could potentially execute code it shouldn't.

Option 3: Install the code under <MarkLogic_install_dir>/Modules. This would 
allow there to be a single install of code that all apps could use. I have 
tested this and it works, but there's some behavior that I was uncertain of: It 
appears that when MarkLogic compiles my code, it links it with other existing 
code. If it doesn't find some imported code, it throws a 500 error saying it 
can't find the code. Once I add the code at the correct path (under 
<MarkLogic_install_dir>/Modules in this case), I still get a 500 error until I 
change the referring code. Meaning, I have to touch the app code so it 
recompiles and links to the now existing code under 
<MarkLogic_install_dir>/Modules. Is this a recommended approach for production 
applications?

So is there a better way to handle common code? Is putting it under 
<MarkLogic_install_dir>/Modules my best option, and are there implications 
around using this options that I should watch out for?

Thanks,
Ryan
                                          
_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to