Changeset 28979


Ignore:
Timestamp:
2014-04-16T17:33:23+12:00 (7 years ago)
Author:
ak19
Message:

GTI on nzdl needs path to java executable. Since a custom javahome property can be set in gsdlsite.cfg, this is now read in if site from gsdlsite.cfg by common-src's gsdlsitecfg.cpp and set as an env var with putenv(), following Dr Bainbridge's idea. This env var is then read back in using getenv in gtiaction.cpp, so that it can run the appropriate java.

Location:
main/trunk/greenstone2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/common-src/src/lib/gsdlsitecfg.cpp

    r16310 r28979  
    2626#include "fileutil.h"
    2727#include "gsdlsitecfg.h"
     28#include <stdlib.h> // for get/putenv
     29#include <string.h> // for get/putenv
    2830
    2931#if defined(GSDL_USE_OBJECTSPACE)
     
    126128      *collection = cfgline[0];
    127129    }
     130
     131    if(key == "javahome") {
     132
     133      // javahome is a special variable that may or may not be set by the user in gsdlsite.cfg.
     134      // It specifies a custom java install that the user wants to use. If set, assume this is
     135      // meant to override the default JAVA_HOME. Any javahome read in from gsdlsite.cfg
     136      // will not be stored into the __site_configuration struct however. Instead, directly
     137      // do putenv(javahome), just like gtiaction.cpp uses putenv, after printing out a warning
     138      // to StdErr if getenv(JAVA_HOME) shows that JAVA_HOME is already set to something.
     139
     140      text_t javahome(cfgline[0]);
     141
     142      // getenv returns NULL if not set, http://www.cplusplus.com/reference/cstdlib/getenv/
     143      // 'The string pointed by the pointer returned by this function shall not be modified by the program.'
     144      char* existing_javahome = getenv("JAVA_HOME");
     145
     146      if(existing_javahome != NULL) {
     147    // cerr goes to: apache-httpd/<OS>/logs/error_log
     148    cerr << "Warning: JAVA_HOME is already set to: " << existing_javahome << endl;
     149    cerr << "But overwriting with javahome set in gsdlsite.cfg: " << javahome << endl; 
     150      }
     151
     152      // http://www.kev.pulo.com.au/pp/RESOURCES/cplusplus/ref/cstdlib/putenv.html
     153      // putenv is not defined in ANSI-C, but is supported by many compilers, and is
     154      // already used in gtiaction.cpp
     155      javahome = "JAVA_HOME=" + javahome;
     156      char* set_javahome_cstr = javahome.getcstr();
     157      putenv(set_javahome_cstr);
     158
     159      // can't use locally declared char array that we string-copy the cstr into,
     160      // since the array's value expires from putenv, possibly after this function's local scope
     161      // Forced to assign the dynamically allocated cstr and resist the urge to delete this:
     162      //delete[] set_javahome_cstr; // may not delete it, else the env var just set will become empty     
     163    }   
    128164
    129165    if (actions != NULL && key == "actions") {
  • main/trunk/greenstone2/runtime-src/src/recpt/gtiaction.cpp

    r28973 r28979  
    8787  text_t set_gsdlos = "GSDLOS=";
    8888
    89   // path to java executable.
    90 
    91   if(java.empty()) {
     89  // Path to java executable. If javahome property was set in gsdlsite.cfg,
     90  // then common-src/src/lib/gsdlsite.cfg would have read this in and set it in the env
     91  // If the env var is empty, default to trying to use just "java"
     92  char* existing_javahome = getenv("JAVA_HOME"); // return value may not be modified by the program
     93
     94  if(existing_javahome == NULL) {
    9295    //java = "$JAVA_HOME/bin/java"; // doesn't work
    93     //java = "/research/root/jdk1.6.0_27/bin/java"; // can hardcode it, which may be necessary on nzdl or if default java is no longer version 6
    94     java = "java";
    95   }
     96    java = "java"; // works locally, but not on nzdl. On nzdl need to set javahome in gsdlsite.cfg
     97  } else {   
     98    java = existing_javahome;
     99    java += "/bin/java";
     100  }
    96101
    97102#if defined (__WIN32__)
     
    655660    //gti_arguments = "get-first-n-chunks-requiring-work " + target_language_code + " " + translation_file_key + " " + "10000" + " | /opt/jdk1.6.0/bin/java -cp /home/nzdl/gti:/home/nzdl/gti/xalan.jar ApplyXSLT /home/nzdl/gti/gti-generate-excel-xml.xsl -";
    656661
    657     //gti_arguments = "get-first-n-chunks-requiring-work " + target_language_code + " " + translation_file_key + " " + "10000" + " | /research/root/jdk1.6.0_27/bin/java -cp /research/ak19/gs2-svn-gti:/research/ak19/gs2-svn-gti/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -c -t /research/ak19/gs2-svn-gti/bin/script/gti-generate-excel-xml.xsl";
    658 
    659     // don't need to add toplevel gsdlhome to classpath actually, as the following will work from the commandline:
    660     // gti.pl get-all-chunks nl coredm | java -cp /research/ak19/gs2-svn-gti/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -t /research/ak19/gs2-svn-gti/bin/script/gti-generate-excel-xml.xsl
     662    // don't actually need to add toplevel gsdlhome to classpath
    661663    gti_arguments = "get-first-n-chunks-requiring-work " + target_language_code + " " + translation_file_key + " " + "10000" + " | " + java + " -cp " + gsdlhome + path_separator + gsdlhome + "/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -c -t " + gsdlhome + "/bin/script/gti-generate-excel-xml.xsl";
    662664
     
    664666    //gti_arguments = "get-all-chunks " + target_language_code + " " + translation_file_key + " | /opt/jdk1.6.0/bin/java -cp /home/nzdl/gti:/home/nzdl/gti/xalan.jar ApplyXSLT /home/nzdl/gti/gti-generate-excel-xml.xsl -";
    665667
    666     //gti_arguments = "get-all-chunks " + target_language_code + " " + translation_file_key + " | /research/root/jdk1.6.0_27/bin/java -cp /research/ak19/gs2-svn-gti/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -c -t /research/ak19/gs2-svn-gti/bin/script/gti-generate-excel-xml.xsl";
    667 
    668     // don't need to add toplevel gsdlhome to classpath actually, as the following will work from the commandline:
    669     // gti.pl get-all-chunks nl coredm | java -cp /research/ak19/gs2-svn-gti/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -t /research/ak19/gs2-svn-gti/bin/script/gti-generate-excel-xml.xsl
     668    // don't actually need to add toplevel gsdlhome to classpath
    670669    gti_arguments = "get-all-chunks " + target_language_code + " " + translation_file_key + " | " + java +  " -cp " + gsdlhome + path_separator + gsdlhome + "/bin/java/ApplyXSLT.jar org.nzdl.gsdl.ApplyXSLT -c -t " + gsdlhome + "/bin/script/gti-generate-excel-xml.xsl";
    671670  }
    672  
     671
    673672  text_t gti_response_xml_text = do_gti_request(gti_arguments, logout); 
    674673  if (gti_response_xml_text == "") {
  • main/trunk/greenstone2/runtime-src/src/recpt/gtiaction.h

    r28973 r28979  
    6969
    7070  text_t path_separator;
    71   text_t java; // java bin path to preferrably 1.6. Set this here or in init() if the path to java is very specific (such as on nzdl)
     71  text_t java; // path to java executable
    7272
    7373public:
Note: See TracChangeset for help on using the changeset viewer.