createJVM {arji}R Documentation

create a JVM in a JNI environment

Description

create a JVM in a JNI environment

Usage

createJVM(optstr, globalize=TRUE, RobjName="..arjiJVM")

Arguments

optstr string encoding JVM options in the form used by the executing platform, i.e., "-Djava.class.path=:." on unix descendants, semicolon-separated on windows.
globalize logical; if TRUE, an assignment to .GlobalEnv will be used to store the JVM reference (JavaVMRef) object, using the value of RobjName. If FALSE, the JavaVMRef object is returned directly.
RobjName string encoding the name to be used for a global JavaVMRef object.

Details

This function uses JNI C routine JNI_CreateJavaVM and returns an object that includes a pointer to the JVM. Note that the associated JNIEnv can be recovered in C using getEnv method of the JVM, so this is not provided.

Value

returns an instance of class JavaVMRef

Note

Author(s)

Vince Carey <stvjc@channing.harvard.edu>

References

See Also

Examples

opts <- paste("-Djava.class.path=",
         system.file("java", package="arji"),
         sep=ifelse(.Platform$OS.type == "windows",
                ";", ":"))
createJVM(optstr=opts)
cc <- getJavaClass("demo")
mm <- getJavaStaticMethodID("main", "([Ljava/lang/String;)V", cc)
#callJavaStaticMethod(mm, cc, as.character("A"))
callJNIArgable(mm, .jtask("CallStaticMethod"), .jtype("void"))
m2 <- getJavaStaticMethodID("doit", "()Ljava/lang/String;", cc)
#callJavaStaticMethod(m2, cc, as.character("A"))
callJNIArgable(m2, .jtask("CallStaticMethod"), .jtype("void"))
m3 <- getJavaStaticMethodID("doit2", "([ILjava/lang/String;)Ljava/lang/String;", cc)
#callJavaStaticMethod(m3, cc, as.integer(c(213,33)), "newth")
callJNIArgable(m3, .jtask("CallStaticMethod"), .jtype("String"),
        as.integer(c(213,22)), "newth")
#callJavaStaticMethod(m3, cc, as.integer(c(213,33)), "newth")
m3b <- getJavaStaticMethodID("doit2barr", "([ZLjava/lang/String;)Ljava/lang/String;", cc)
callJNIArgable(m3b, .jtask("CallStaticMethod"), .jtype("String"),
        as.logical(c(1,0)), "newth")
cat("the following shows that we can pass numbers and strings from R to java\n")
m4 <- getJavaStaticMethodID("doit3", "([DLjava/lang/String;)Ljava/lang/String;", cc)
m4out <- callJNIArgable(m4, .jtask("CallStaticMethod"), .jtype("void"),
        as.double(c(213.45,22.23)), "newth")
m5 <- getJavaNonstaticMethodID("<init>", "()V", cc)
demo <- .arjiNew("demo")
str <- .arjiNew("java/lang/String", "abc")
.arjiCallStaticMethod( demo, "doit", "()Ljava/lang/String;")
m4outb <- .arjiCallStaticMethod( demo, "doit3", "([DLjava/lang/String;)Ljava/lang/String;",
        as.double(c(213.45,33.23)), "newthd")
fid <- getJavaStaticFieldID( "demoSField", "I", cc )
fid2 <- getJavaStaticFieldID( "demoSFieldD", "D", cc )
#fid3 <- getJavaStaticFieldID( "demoSFieldC", "C", cc )
getJavaStaticField(fid, cc)
getJavaStaticField(fid2, cc)
#getJavaStaticField(fid3, cc)
#
# demonstrate object passage
#
cat("following shows passage of java object reference from R to java\n")
d2 <- .arjiNew("demo2")
md2 <- getJavaStaticMethodID("bing", "(Ldemo;)V", d2@classObj)
callJNIArgable(md2, .jtask("CallStaticMethod"), 
        .jtype("void"), demo@objref)
cat("following show conversions of scalar reference types from java to R\n")
nv <- getJavaStaticMethodID("intback", "()I", cc) 
nvo <- callJNIArgable( nv, .jtask("CallMethod"), .jtype("int") )
#convertJavaObj( nvo@outObjRef, .jtype("int") )
dv <- getJavaStaticMethodID("doubleback", "()D", cc) 
dvo <- callJNIArgable( dv, .jtask("CallMethod"), .jtype("double") )
bv <- getJavaStaticMethodID("boolback", "()Z", cc) 
bvo <- callJNIArgable( bv, .jtask("CallMethod"), .jtype("boolean") )
#
# now we want to return a string from java to R
sv <- getJavaStaticMethodID("stringback", "()Ljava/lang/String;", cc) 
svo <- callJNIArgable( sv, .jtask("CallStaticMethod"), .jtype("String") )
dcl <- .arjiCallNonstaticMethod(demo, "getClass", "()Ljava/lang/Class;")
cstr <- .arjiCallNonstaticMethod(dcl@outObjRef, "toString", "()Ljava/lang/String;")

 ass <- .arjiNew("arjiSupport")
 gcm <- getJavaStaticMethodID("tellClassName", "(Ljava/lang/Object;)Ljava/lang/String;", ass@classObj)
 callJNIArgable(gcm, .jtask("CallStaticMethod"), .jtype("String"), ass@objref)
 callJNIArgable(gcm, .jtask("CallStaticMethod"), .jtype("String"), demo@objref)


[Package arji version 0.3.0 Index]