2014-11-18 3 views
1

Цель: Использовать RJDBC с OpenCPU AJAX Почтовый вызов.Ошибка rJava при вызове библиотеки RJDBC из API OpenCPU

Использование: Мне нужно связаться с базой данных Apache phoenix и получить некоторые данные. И по этим данным я должен заниматься аналитикой. Поэтому для подключения к Phoenix я использую rjdbc (phoenix не поддерживает какой-либо другой способ подключения).

Окружающая среда: public.opencpu.org

Вот что я пытаюсь:

HTML

<textarea> 
library(RJDBC) 
.. do some data fetching and then r statistics 
</textarea> 
<br /> 
<button id="submitbutton" >Execute</button> 
<br /> 
<br /> 
<div id="output"> 
</div> 

яваскрипта

<script type="text/javascript"> 
    //When Document is Ready 
    $(function() { 
     var baseurl = "https://public.opencpu.org"; 
     //because identity is in base 
     ocpu.seturl(baseurl+"/ocpu/library/base/R"); 
     //actual handler 
     $("#submitbutton").on("click", function(){ 
      //arguments 
      var mysnippet = new ocpu.Snippet($("#input").val()); 
      //perform the request 
      var req = ocpu.call("identity", { 
       "x" : mysnippet 
      }, function(session){ 
       session.getStdout(function(outtxt){ 
         $("#output-txt").text(outtxt); 
       }); 
      }); 
      //if R returns an error, alert the error message 
      req.fail(function(){ 
       alert("Server error: " + req.responseText); 
       $("#output").hide(); 
      });  
      req.always(function(){ 
       $("button").removeAttr("disabled"); 
      }); 
     });  
    }); 

</script> 

сценарий

, когда я нажимаю кнопку выполнения, получает пользователя, введенное значение из текстового поля (здесь библиотека (RJDBC) и некоторые операции БД) и отправляет Ajax пост и отвечает обратно ниже ошибки

Google журнал хрома консоль:

POST https://public.opencpu.org/ocpu/library/base/R/identity 400 (Bad Request) 
OpenCPU error HTTP 400 
package 'rJava' could not be loaded 

Надеется, что это дает большую четкость.

Необходимо проверить, работает ли rJava с OpenCPU, если это возможно, чтобы исправить это?

+0

ответил автор на https://groups.google.com/forum/#!topic/opencpu/74Kth_ic3Mc – Amith

+0

https://github.com/jeroenooms/opencpu/ вопросы/123 – Amith

ответ

0

Ядро моего решения выглядит следующим образом. Код берется из класса R6, который имеет некоторые протоколирования. Для того, чтобы документировать, что происходит, я оставил в командах private$log, но если вы используете версию этого кода, вы хотите оставить его. Точно так же есть вызовы к функциям, которые вам действительно не нужны, чтобы выполнить эту работу, и я собираю информацию о хосте в списке, а не передаю отдельные переменные для паролей и т. Д. И т. Д. Короче говоря, код, который я здесь представляю, не минимально воспроизводимые.

Однако код я обеспечиваю в this gist должно быть несколько воспроизводимой (как только вы обеспечить соединение с базой данных classPath и driverClass). Этот предмет был подвергнут приблизительно 0 очистке, так что там есть тонна кода, которая, строго говоря, лишняя для выполнения работы. Ни один из этого кода не симпатичный, изящный и т. Д. - как правило, мне стыдно за это, но в духе совместного использования я все равно встал.

Пояснительная сегмент кода:

 jvmNode <- makeCluster(1, methods=FALSE, port = sample(11000:11999,1), rscript_args="--vanilla") 
      connected <- isTRUE(try(clusterEvalQ(jvmNode, 2)==2, silent=TRUE)) 
     private$log$finest("forkable node started") 
     clusterEvalQ(jvmNode,{library(DBI);library(rJava);library(RJDBC)}) 

     clusterEvalQ(jvmNode, systemRAMFree <- function() { 
    #in GB, platform dependent 
    as.numeric(system('FREE_KB=$(($(echo `sed -n \'2p;3p;4p\' < /proc/meminfo | sed "s/ \\+/ /g" | cut -d\' \' -f 2 ` | sed "s/ /+/g")));echo $FREE_KB', intern=TRUE))/1024/1024 
})  
     clusterEvalQ(jvmNode, options(java.parameters = paste0("-Xmx",systemRAMFree(),"g"))) 

     hostInformation <- private$hostInformation 
     classPath <- "~/redshift/redshiftJDBC41.jar" 
     driverClass <- private$driverClass 
     java.parameters <- getOption("java.parameters") 
     toExportList <- list(statement,driverClass, classPath, hostInformation, java.parameters) 
     names(toExportList) <- c("statement","driverClass","classPath", "hostInformation", "java.parameters") 
     toExport <- as.environment(toExportList) 
     clusterExport(jvmNode, ls(toExport), envir=toExport) 
     clusterEvalQ(jvmNode, options(java.parameters = java.parameters)) 

     clusterEvalQ(jvmNode, rJava::.jinit()) 
     private$log$finest("JVM Started") 
     clusterEvalQ(jvmNode, drv <- RJDBC::JDBC(driverClass, classPath)) 
     private$log$finest("Driver obtained") 

     clusterEvalQ(jvmNode, conn <- dbConnect(drv, 
             url = hostInformation$host, 
             user = hostInformation$user, 
             password = hostInformation$password)) 
     private$log$debug(logPrefix("query:", statement)) 
     result <- try(clusterEvalQ(jvmNode, dbGetQuery(conn, statement))[[1]]) 
     clusterEvalQ(jvmNode, dbDisconnect(conn)) 
     stopCluster(jvmNode) 
Смежные вопросы