[BioC] Failed installing SJava on MacOS (success!)

Seth Falcon seth at userprimary.net
Thu Jan 21 20:26:55 CET 2010


Hi all,

Michael, your debugging details inspired me and this morning Martin and 
had some time to dig for a solution.

There were a couple of issues.  The FindClass call was failing because 
the RForeignReference class depends on native code and the required 
"DLL" was not being found.  The reason the "DLL" was not being found was 
because the wrong path was being set for java.library.path -- R now uses 
an architecture-specific subdirectory of $PACKAGE/libs (e.g. 
$PACKAGE/libs/x86_64).  In addition, Java is looking for a .dylib not a .so.

In any case, we've updated the source for SJava in svn, and you can 
checkout the latest to give it a try:

svn co --username=readonly \
   --passowrd=readonly \
   https://hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpacks/SJava

Please let us know if it works for you.

There are still some outstanding issues on OS X.  In particular, GUI 
code that uses the AWT classes are not currently working.

+ seth


On 1/21/10 7:44 AM, Michael Dondrup wrote:
> Hi,
> this is just an update. After having it running on Linux, I thought I could debug around in the mac install,
> maybe it helps to isolate the problem. here is what I tried so far to rule out any simple error:
>
> -- First question: where does the error message come from?
>
> function is isRReference in RReferenceCall.c:
>
> /* #line 378 "RReferenceCall.cweb" */
> jboolean
> isRReference(jobject obj, JNIEnv *env)
> {
>      jclass klass;
>      jboolean ans;
>      klass = VMENV FindClass(env, "org/omegahat/R/Java/RForeignReference");
>      if(!klass) {
>          PROBLEM "Can't find org.omegahat.R.Java.RForeignReference"
>              ERROR;
>      }
>      ans = VMENV IsInstanceOf(env, obj, klass);
> //XX Do we need to release this klass.
>
>      return(ans);
> }
>
> conclusion: FindClass does not find it.
> (So I would like to inspect the "env" variable, but don't know how to do this.)
>
> -- Then, where is that class org.omegahat.R.Java.RForeignReference?
> This class is compiled from /SJava/inst/org/omegahat/R/Java/RForeignReference.java and installed to
> /Library/Frameworks/R.framework/Versions/2.10/Resources/library/SJava/org/omegahat/R/Java/
> Does it contain the class? Yes:
>
> $ javap -classpath . RForeignReference
> Compiled from "RForeignReference.java"
> public class org.omegahat.R.Java.RForeignReference extends org.omegahat.Interfaces.NativeInterface.ForeignReference{
>      static boolean LoadLibrary;
>      public org.omegahat.R.Java.RForeignReference(java.lang.String);
>      public org.omegahat.R.Java.RForeignReference(java.lang.String, org.omegahat.Interfaces.NativeInterface.OmegaInterfaceManager);
>      public org.omegahat.R.Java.RForeignReference(org.omegahat.Interfaces.NativeInterface.ForeignReference);
>      public org.omegahat.R.Java.RForeignReference(org.omegahat.Interfaces.NativeInterface.ForeignReference, org.omegahat.Interfaces.NativeInterface.OmegaInterfaceManager);
>      public java.lang.Object localEval(org.omegahat.Environment.Parser.Parse.List, java.lang.String, java.lang.String, java.lang.String[])       throws java.lang.Exception;
>      public native java.lang.Object reval(java.lang.String, java.lang.Object[], java.lang.String, java.lang.String, java.lang.String[]);
>      static {};
> }
>
> -- Is it on the classpath? Add this path explicitly to  $CLASSPATH and set it during .JavaInit and turned on verbose=T:
> Didn't work, looks as if the classpath setting is ignored.
>
>> .JavaInit(default=javaConfig(classPath=c("/Library/Frameworks/R.framework/Versions/2.10/Resources/library/SJava/org/omegahat/R/Java/", javaConfig()@classPath)), verbose=T)
> An object of class "JavaConfiguration"
> Slot "classPath":
> [1] "/Library/Frameworks/R.framework/Versions/2.10/Resources/library/SJava/org/omegahat/R/Java/:/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/Environment.jar:/Library/Frameworks/R.framework/Resources/library/SJava/org/..:/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/antlr.jar:/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/jas.jar:/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/jhall.jar"
>
> Slot "libraryPath":
> [1] "/Library/Frameworks/R.framework/Resources/library/SJava/libs"
>
> Slot "properties":
> [1] "-DEmbeddedInR=true"
> [2] "-DInterfaceManagerClass=org/omegahat/Interfaces/NativeInterface/OmegaInterfaceManager"
> [3] "-DForeignReferenceBaseClass=org/omegahat/R/Java/RJavaInstance"
> [4] "-Djava.compiler=NONE"
> [5] "-DOMEGA_HOME=/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat"
> [6] "-DOmegahatSearchPath=.,${OMEGA_HOME}/Environment/Scripts/Run,${OMEGA_HOME}/Jars/Environment.jar"
> [7] "-Djava.library.path=/Library/Frameworks/R.framework/Resources/library/SJava/libs"
>
> Slot "options":
> character(0)
>
> Slot "args":
> character(0)
>
> Got it
>
>> example(.Java)
> ....
> Error in .Java(v, "add", "A string element") :
>    Can't find org.omegahat.R.Java.RForeignReference
>
>
> -- Put all classes into a jar file and added the jar file to the class path in .JavaInit
> Didn't work.
>
>
> So I'm giving up for now. Would really like to have this work and in principle it should, but something seems to be very odd on the mac :(
>
> Thank you again, and sorry for this lengthy email.
>
>
> Best
> Michael
>
>
>
>
>
> Am Jan 19, 2010 um 6:37 PM schrieb Seth Falcon:
>
>> On 1/19/10 8:58 AM, Martin Morgan wrote:
>>> Michael Dondrup wrote:
>>>> Am Jan 19, 2010 um 3:39 PM schrieb Martin Morgan:
>>>>
>>>>> Michael Dondrup wrote:
>>>>>> Hi,
>>>>>> I would like to use RWebServices and therefore SJava on Mac OS snow leopard. The documentation does not explicitly mention Mac os, so it's
>>>>>> maybe not supported, but i hope it can be made working anyway.
>>>>>> Maybe somebody out there got this configuration running and could help? I am trying to install SJava 0.72. I try the following:
>>>>>>
>>>>>>> library(SJava)
>>>>>> Load the Java VM with .JavaInit()
>>>>>>> .JavaInit()
>>>>>>> example(.Java)
>>>>>> .Java>     v<- .JavaConstructor("java.util.Vector", as.integer(10))
>>>>>>
>>>>>> .Java>    .Java(v, "add", "A string element")
>>>>>> Error in .Java(v, "add", "A string element") :
>>>>>>   Can't find org.omegahat.R.Java.RForeignReference
>>>
>>> this is in org.omegahat/Jars/RJava.jar, e.g.,
>>>
>>>    jar tf org.omegahat/Jars/RJava.jar
>>>
>>
>> Curious, as this jar did not appear on your classpath in your previous mail.
>>
>> I'm able to reproduce the error on my Snow Leopard laptop.  I also notice that I don't have this jar.  There are .class files under the package structure in org/omegahat/R/Java/*.class. RForeignReference.class is among them and this would seem to be the purpose of the "<...>/SJava/org/.." entry in class path.
>>
>>> more below...
>>>> Here is the output of javaConfig().
>>>>
>>>>> javaConfig()
>>>> An object of class "JavaConfiguration"
>>>> Slot "classPath":
>>>> [1] "/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/Environment.jar"
>>>> [2] "/Library/Frameworks/R.framework/Resources/library/SJava/org/.."
>>>> [3] "/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/antlr.jar"
>>>> [4] "/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/jas.jar"
>>>> [5] "/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat/Jars/jhall.jar"
>>>>
>>>> Slot "libraryPath":
>>>> [1] "/Library/Frameworks/R.framework/Resources/library/SJava/libs"
>>>>
>>>> Slot "properties":
>>>>                                                                   EmbeddedInR
>>>>                                                                        "true"
>>>>                                                         InterfaceManagerClass
>>>>               "org/omegahat/Interfaces/NativeInterface/OmegaInterfaceManager"
>>>>                                                     ForeignReferenceBaseClass
>>>>                                           "org/omegahat/R/Java/RJavaInstance"
>>>>                                                                 java.compiler
>>>>                                                                        "NONE"
>>>>                                                                    OMEGA_HOME
>>>>        "/Library/Frameworks/R.framework/Resources/library/SJava/org/omegahat"
>>>>                                                            OmegahatSearchPath
>>>> ".,${OMEGA_HOME}/Environment/Scripts/Run,${OMEGA_HOME}/Jars/Environment.jar"
>>>
>>> My javaConfig() (not on Mac) has ${OMEGA_HOME} expanded
>>
>> Mine is not expanded.  I tried expanding it, but that didn't seem to make a difference either. :-(
>>
>>
>> --
>> Seth Falcon
>> Bioconductor Core Team | FHCRC
>>
>> _______________________________________________
>> Bioconductor mailing list
>> Bioconductor at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor


-- 
Seth Falcon | @sfalcon | http://userprimary.net/user



More information about the Bioconductor mailing list