Fennel: JniUtil Class Reference (original) (raw)

Static utility methods for dealing with JNI. More...

#include <[JniUtil.h](JniUtil%5F8h-source.html)>

List of all members.

Static Public Member Functions
static void initDebug (char const *envVarName)
Initializes JNI debugging.
static jint init (JavaVM *pVm)
Initializes our JNI support.
static void configure (const JniUtilParams &params)
Configure run-time JNI features, such as whether or not JNI handles are traced.
static void shutdown ()
Shutdown run-time JNI features, such as JNI handle tracking.
static std::string getClassName (jclass jClass)
Calls java.lang.Class.getName().
static std::string getFirstPublicInterfaceName (jclass jClass)
Calls java.lang.Class.getInterfaces() and returns result of java.lang.Class.getClassName() for the first public interface returned.
static std::string toStdString (JniEnvRef pEnv, jstring jString)
Converts a Java string to a C++ string.
static jstring toString (JniEnvRef pEnv, jobject jObject)
Calls toString() on a Java object.
static jobject getIter (JniEnvRef pEnv, jobject jCollection)
Calls java.util.Collection.iterator().
static jobject getNextFromIter (JniEnvRef pEnv, jobject jIter)
Calls java.util.Iterator.hasNext/next().
static uint lookUpEnum (std::string *pSymbols, std::string const &symbol)
Looks up an enum value.
static void detachJavaEnv ()
Detaches the JNIEnv for the current thread (undoes effect of getAttachedJavaEnv in the case where needDetach received true).
static void incrementHandleCount (const char *pType, const void *pHandle)
Increment the handle count.
static void decrementHandleCount (const char *pType, const void *pHandle)
Decrement the handle count.
static int getHandleCount ()
Retrieve the current handle count.
static std::string getXmi (const TupleDescriptor &tupleDesc)
Constructs a FemTupleDescriptor xmi string.
static ThreadTracker & getThreadTracker ()
**Returns:**the tracker for JNI thread attach/detach
Static Public Attributes
static const jint jniVersion = JNI_VERSION_1_2
Required JNI version.
static jmethodID methGetJavaStreamHandle
Java method FennelJavaStreamMap.getJavaStreamHandle.
static jmethodID methGetIndexRoot
Java method FennelJavaStreamMap.getIndexRoot.
static jmethodID methBase64Decode
Java method RhBase64.decode.
static jclass classRhBase64
static jmethodID methRandomUUID
Java method UUID.randomUUID.
static jclass classUUID
static jmethodID methFarragoTransformInit
Java method FarragoTransform.init.
static jmethodID methFarragoTransformExecute
Java method FarragoTransform.execute.
static jmethodID methFarragoTransformSetInputFetchTimeout
Java method FarragoTransform.setInputFetchTimeout.
static jmethodID methFarragoTransformRestart
Java method FarragoTransform.restart.
static jclass classFarragoTransformInputBinding
Java class FarragoTransform.InputBinding.
static jmethodID methFarragoTransformInputBindingCons
Java constructor FarragoTransform.InputBinding.InputBinding.
static jmethodID methFarragoRuntimeContextStatementClassForName
Java method FarragoRuntimeContext.statementClassForName.
static jmethodID methFarragoRuntimeContextFindFarragoTransform
Java method FarragoRuntimeContext.findFarragoTransform.
static jclass classUtil
Java class org.eigenbase.util.Util.
static jmethodID methUtilGetStackTrace
Java method org.eigenbase.util.Util.getStackTrace(Throwable).
static jclass classLong
java.lang.Long
static jclass classInteger
java.lang.Integer
static jclass classShort
java.lang.Short
static jclass classDouble
java.lang.Double
static jclass classFloat
java.lang.Float
static jclass classBoolean
java.lang.Boolean
static jmethodID methLongValueOf
java.lang.Long.valueOf(long)
static jmethodID methIntegerValueOf
java.lang.Integer.valueOf(int)
static jmethodID methShortValueOf
java.lang.Short.valueOf(short)
static jmethodID methDoubleValueOf
java.lang.Double.valueOf(double)
static jmethodID methFloatValueOf
java.lang.Float.valueOf(float)
static jmethodID methBooleanValueOf
java.lang.Boolean.valueOf(boolean)
static jmethodID methLongValue
java.lang.Long.longValue()
static jmethodID methIntValue
java.lang.Integer.intValue()
static jmethodID methShortValue
java.lang.Short.shortValue()
static jmethodID methDoubleValue
java.lang.Double.doubleValue()
static jmethodID methFloatValue
java.lang.Float.floatValue()
static jmethodID methBooleanValue
java.lang.Boolean.booleanValue()
Static Private Member Functions
static JNIEnv * getAttachedJavaEnv (bool &needDetach)
Attaches a JNIEnv for the current thread.
static void traceHandleCount (const char *pAction, const char *pType, const void *pHandle)
JNI handle tracing method.
Static Private Attributes
static JavaVM * pVm
Loaded JavaVM instance.
static jmethodID methGetClassName
java.lang.Class.getName()
static jmethodID methGetInterfaces
java.lang.Class.getInterfaces()
static jmethodID methGetModifiers
java.lang.Class.getModifiers()
static jclass classModifier
class java.lang.Modifier
static jmethodID methIsPublic
java.lang.reflect.Modifier.isPublic()
static jmethodID methIterator
java.util.Collection.iterator()
static jmethodID methHasNext
java.util.Iterator.hasNext()
static jmethodID methNext
java.util.Iterator.next()
static jmethodID methToString
java.lang.Object.toString()
static AtomicCounter handleCount
Counter for all handles opened by Farrago.
static bool traceHandleCountEnabled
Flag indicating whether tracing of handles is enabled.
static bool closeHandleCountTraceOnZero
Flag indicating that the JNI handle trace stream should be closed when the handle count reaches 0.
static std::ofstream handleCountTraceStream
Stream for tracing handles opened by Farrago.
static JavaThreadTracker threadTracker
Tracker for JNI thread attach/detach.
Friends
class JniEnvAutoRef

Detailed Description

Static utility methods for dealing with JNI.

Definition at line 196 of file JniUtil.h.


Member Function Documentation

JNIEnv * JniUtil::getAttachedJavaEnv ( bool & needDetach ) [static, private]

Attaches a JNIEnv for the current thread.

Can be used in contexts where the JNIEnv hasn't been passed down from the native entry point.

Parameters:

needDetach receives true if thread needs to be detached; false if it was already attached on entry

Returns:

current thread's JNIEnv

Definition at line 340 of file JniUtil.cpp.

References jniVersion, and pVm.

00341 { 00342 void *pEnv = NULL; 00343 jint rc = pVm->GetEnv(&pEnv,jniVersion); 00344 if (rc == JNI_OK) { 00345
00346 needDetach = false; 00347 return static_cast<JNIEnv *>(pEnv); 00348 } 00349 needDetach = true; 00350 rc = pVm->AttachCurrentThread(&pEnv,NULL); 00351 assert(rc == 0); 00352 assert(pEnv); 00353 return static_cast<JNIEnv *>(pEnv); 00354 }

void JniUtil::traceHandleCount ( const char * pAction,
const char * pType,
const void * pHandle
) [static, private]
void JniUtil::initDebug ( char const * envVarName ) [static]

Initializes JNI debugging.

Parameters:

envVarName name of environment variable used to trigger debugging

Definition at line 115 of file JniUtil.cpp.

References debugger_signalHandler().

Referenced by JNI_OnLoad().

00116 { 00117 char *pDebug = getenv(envVarName); 00118 if (pDebug && (atoi(pDebug) >= 1)) { 00119 char pidstr[32]; 00120 snprintf(pidstr, 32, "%d", getpid()); 00121 std::cout << "Waiting for debugger; pid=" << pidstr << std::endl; 00122 std::cout.flush(); 00123 #ifdef MSVC 00124
00125
00126 _sleep(600000); 00127 #else 00128
00129
00130
00131
00132
00133 if (atoi(pDebug) == 1) { 00134 sleep(60000); 00135 } else { 00136 struct sigaction act; 00137 struct sigaction oldact; 00138 00139 act.sa_handler = debugger_signalHandler; 00140 sigemptyset(&act.sa_mask); 00141 act.sa_flags = 0; 00142 00143 if (!sigaction(SIGHUP, &act, &oldact)) { 00144
00145 pause(); 00146 00147
00148 sigaction(SIGHUP, &oldact, NULL); 00149 } else { 00150
00151 sleep(60000); 00152 } 00153 } 00154 #endif 00155 } 00156 }

jint JniUtil::init ( JavaVM * pVm ) [static]

Initializes our JNI support.

Parameters:

pVm the VM in which we're loaded

Definition at line 200 of file JniUtil.cpp.

References classBoolean, classDouble, classFarragoTransformInputBinding, classFloat, classInteger, classLong, classModifier, classRhBase64, classShort, classUtil, classUUID, AutoBacktrace::install(), jniVersion, methBase64Decode, methBooleanValue, methBooleanValueOf, methDoubleValue, methDoubleValueOf, methFarragoRuntimeContextFindFarragoTransform, methFarragoRuntimeContextStatementClassForName, methFarragoTransformExecute, methFarragoTransformInit, methFarragoTransformInputBindingCons, methFarragoTransformRestart, methFarragoTransformSetInputFetchTimeout, methFloatValue, methFloatValueOf, methGetClassName, methGetIndexRoot, methGetInterfaces, methGetJavaStreamHandle, methGetModifiers, methHasNext, methIntegerValueOf, methIntValue, methIsPublic, methIterator, methLongValue, methLongValueOf, methNext, methRandomUUID, methShortValue, methShortValueOf, methToString, methUtilGetStackTrace, and pVm.

Referenced by JNI_OnLoad().

00201 { 00202
00203
00204
00205
00206
00207 AutoBacktrace::install(false); 00208 pVm = pVmInit; 00209 JniEnvAutoRef pEnv; 00210 jclass classClass = pEnv->FindClass("java/lang/Class"); 00211 jclass classObject = pEnv->FindClass("java/lang/Object"); 00212 jclass classCollection = pEnv->FindClass("java/util/Collection"); 00213 jclass classIterator = pEnv->FindClass("java/util/Iterator"); 00214 00215
00216
00217
00218 classRhBase64 = pEnv->FindClass("org/eigenbase/util/RhBase64"); 00219 classRhBase64 = (jclass) pEnv->NewGlobalRef(classRhBase64); 00220 classUUID = pEnv->FindClass("java/util/UUID"); 00221 classUUID = (jclass) pEnv->NewGlobalRef(classUUID); 00222 00223 jclass classFennelJavaStreamMap = pEnv->FindClass( 00224 "net/sf/farrago/fennel/FennelJavaStreamMap"); 00225 jclass classFarragoTransform = pEnv->FindClass( 00226 "net/sf/farrago/runtime/FarragoTransform"); 00227 00228
00229 jclass tempInputBinding = 00230 pEnv->FindClass( 00231 "net/sf/farrago/runtime/FarragoTransform$InputBinding"); 00232 classFarragoTransformInputBinding = 00233 (jclass)pEnv->NewGlobalRef(tempInputBinding); 00234 00235 jclass classFarragoRuntimeContext = pEnv->FindClass( 00236 "net/sf/farrago/runtime/FarragoRuntimeContext"); 00237 methGetClassName = pEnv->GetMethodID( 00238 classClass,"getName","()Ljava/lang/String;"); 00239 methGetInterfaces = pEnv->GetMethodID( 00240 classClass,"getInterfaces","()[Ljava/lang/Class;"); 00241 methGetModifiers = pEnv->GetMethodID( 00242 classClass,"getModifiers","()I"); 00243 00244 jclass tempClassModifier = pEnv->FindClass("java/lang/reflect/Modifier"); 00245 classModifier = (jclass)pEnv->NewGlobalRef(tempClassModifier); 00246 methIsPublic = pEnv->GetStaticMethodID(classModifier, "isPublic", "(I)Z"); 00247 00248 methIterator = pEnv->GetMethodID( 00249 classCollection,"iterator","()Ljava/util/Iterator;"); 00250 methHasNext = pEnv->GetMethodID( 00251 classIterator,"hasNext","()Z"); 00252 methNext = pEnv->GetMethodID( 00253 classIterator,"next","()Ljava/lang/Object;"); 00254 methGetJavaStreamHandle = pEnv->GetMethodID( 00255 classFennelJavaStreamMap,"getJavaStreamHandle", 00256 "(I)J"); 00257 methGetIndexRoot = pEnv->GetMethodID( 00258 classFennelJavaStreamMap,"getIndexRoot", 00259 "(J)J"); 00260 methToString = pEnv->GetMethodID( 00261 classObject,"toString","()Ljava/lang/String;"); 00262 00263 jclass tempClassLong = pEnv->FindClass("java/lang/Long"); 00264 classLong = (jclass)pEnv->NewGlobalRef(tempClassLong); 00265 methLongValueOf = 00266 pEnv->GetStaticMethodID(classLong, "valueOf", "(J)Ljava/lang/Long;"); 00267 methLongValue = pEnv->GetMethodID(classLong, "longValue", "()J"); 00268 00269 jclass tempClassInteger = pEnv->FindClass("java/lang/Integer"); 00270 classInteger = (jclass)pEnv->NewGlobalRef(tempClassInteger); 00271 methIntegerValueOf = 00272 pEnv->GetStaticMethodID( 00273 classInteger, "valueOf", "(I)Ljava/lang/Integer;"); 00274 methIntValue = pEnv->GetMethodID(classInteger, "intValue", "()I"); 00275 00276 jclass tempClassShort = pEnv->FindClass("java/lang/Short"); 00277 classShort = (jclass)pEnv->NewGlobalRef(tempClassShort); 00278 methShortValueOf = 00279 pEnv->GetStaticMethodID(classShort, "valueOf", "(S)Ljava/lang/Short;"); 00280 methShortValue = pEnv->GetMethodID(classShort, "shortValue", "()S"); 00281 00282 jclass tempClassDouble = pEnv->FindClass("java/lang/Double"); 00283 classDouble = (jclass)pEnv->NewGlobalRef(tempClassDouble); 00284 methDoubleValueOf = 00285 pEnv->GetStaticMethodID( 00286 classDouble, "valueOf", "(D)Ljava/lang/Double;"); 00287 methDoubleValue = pEnv->GetMethodID(classDouble, "doubleValue", "()D"); 00288 00289 jclass tempClassFloat = pEnv->FindClass("java/lang/Float"); 00290 classFloat = (jclass)pEnv->NewGlobalRef(tempClassFloat); 00291 methFloatValueOf = 00292 pEnv->GetStaticMethodID(classFloat, "valueOf", "(F)Ljava/lang/Float;"); 00293 methFloatValue = pEnv->GetMethodID(classFloat, "floatValue", "()F"); 00294 00295 jclass tempClassBoolean = pEnv->FindClass("java/lang/Boolean"); 00296 classBoolean = (jclass)pEnv->NewGlobalRef(tempClassBoolean); 00297 methBooleanValueOf = 00298 pEnv->GetStaticMethodID( 00299 classBoolean, "valueOf", "(Z)Ljava/lang/Boolean;"); 00300 methBooleanValue = pEnv->GetMethodID(classBoolean, "booleanValue", "()Z"); 00301 00302 methBase64Decode = pEnv->GetStaticMethodID( 00303 classRhBase64,"decode","(Ljava/lang/String;)[B"); 00304 methRandomUUID = pEnv->GetStaticMethodID( 00305 classUUID,"randomUUID","()Ljava/util/UUID;"); 00306 00307 methFarragoTransformInit = pEnv->GetMethodID( 00308 classFarragoTransform, "init", 00309 "(Lnet/sf/farrago/runtime/FarragoRuntimeContext;Ljava/lang/String;[Lnet/sf/farrago/runtime/FarragoTransform$InputBinding;)V"); 00310 methFarragoTransformExecute = pEnv->GetMethodID( 00311 classFarragoTransform, "execute", "(Ljava/nio/ByteBuffer;J)I"); 00312 methFarragoTransformRestart = pEnv->GetMethodID( 00313 classFarragoTransform, "restart", "()V"); 00314 methFarragoTransformSetInputFetchTimeout = pEnv->GetMethodID( 00315 classFarragoTransform, "setInputFetchTimeout", "(J)V"); 00316 methFarragoTransformInputBindingCons = 00317 pEnv->GetMethodID( 00318 classFarragoTransformInputBinding, "", 00319 "(Ljava/lang/String;I)V"); 00320 methFarragoRuntimeContextStatementClassForName = 00321 pEnv->GetMethodID( 00322 classFarragoRuntimeContext, 00323 "statementClassForName", 00324 "(Ljava/lang/String;)Ljava/lang/Class;"); 00325 methFarragoRuntimeContextFindFarragoTransform = 00326 pEnv->GetMethodID( 00327 classFarragoRuntimeContext, 00328 "findFarragoTransform", 00329 "(Ljava/lang/String;)Lnet/sf/farrago/runtime/FarragoTransform;"); 00330 00331 jclass tempClassUtil = pEnv->FindClass("org/eigenbase/util/Util"); 00332 classUtil = (jclass) pEnv->NewGlobalRef(tempClassUtil); 00333 methUtilGetStackTrace = pEnv->GetStaticMethodID( 00334 classUtil, "getStackTrace", 00335 "(Ljava/lang/Throwable;)Ljava/lang/String;"); 00336 00337 return jniVersion; 00338 }

void JniUtil::configure ( const JniUtilParams & params ) [static]

| void JniUtil::shutdown | ( | | ) | [static] | | ---------------------- | - | | - | ---------- |

std::string JniUtil::getClassName ( jclass jClass ) [static]
std::string JniUtil::getFirstPublicInterfaceName ( jclass jClass ) [static]

Calls java.lang.Class.getInterfaces() and returns result of java.lang.Class.getClassName() for the first public interface returned.

Parameters:

jClass the Class of interest

Returns:

the fully-qualified class name of the Class's first public interface

Definition at line 371 of file JniUtil.cpp.

References classModifier, getClassName(), methGetInterfaces, methGetModifiers, and methIsPublic.

Referenced by JniProxy::getInterfaceName().

00372 { 00373 JniEnvAutoRef pEnv; 00374 00375 jobjectArray ifaces = 00376 reinterpret_cast( 00377 pEnv->CallObjectMethod(jClass, methGetInterfaces)); 00378 assert(ifaces); 00379 00380 for (jsize i = 0, len = pEnv->GetArrayLength(ifaces); i < len; i++) { 00381 jclass iface = 00382 reinterpret_cast( 00383 pEnv->GetObjectArrayElement(ifaces, i)); 00384 assert(iface); 00385 00386 jint modifiers = 00387 pEnv->CallIntMethod(iface, methGetModifiers); 00388 00389 jboolean isPublic = 00390 pEnv->CallStaticBooleanMethod( 00391 classModifier, methIsPublic, modifiers); 00392 00393 if (isPublic) { 00394 return getClassName(iface); 00395 } 00396 } 00397 00398 return std::string("(none)"); 00399 }

std::string JniUtil::toStdString ( JniEnvRef pEnv,
jstring jString
) [static]
jstring JniUtil::toString ( JniEnvRef pEnv,
jobject jObject
) [static]
jobject JniUtil::getIter ( JniEnvRef pEnv,
jobject jCollection
) [static]

Calls java.util.Collection.iterator().

Parameters:

pEnv the JniEnvRef for the current thread
jCollection the Java collection

Returns:

the new Java iterator

Definition at line 426 of file JniUtil.cpp.

References methIterator.

Referenced by ProxyAggStreamDef::getAggInvocation(), ProxyTupleAccessor::getAttrAccessor(), ProxyTupleDescriptor::getAttrDescriptor(), ProxyTupleProjection::getAttrProjection(), ProxyLcsRowScanStreamDef::getClusterScan(), ProxyFlatFileTupleStreamDef::getColumn(), ProxyCorrelationJoinStreamDef::getCorrelations(), ProxyBarrierStreamDef::getDynamicParameter(), ProxyExecutionStreamDef::getDynamicParamUse(), ProxyLbmSplicerStreamDef::getIndexAccessor(), ProxyTableWriterDef::getIndexWriter(), ProxyExecutionStreamDef::getInputFlow(), ProxyNestedLoopJoinStreamDef::getLeftJoinKey(), ProxyExecutionStreamDef::getOutputFlow(), ProxyCmdOpenDatabase::getParams(), ProxyWindowDef::getPartition(), ProxyReshapeStreamDef::getReshapeParameter(), ProxyIndexSearchDef::getSearchKeyParameter(), ProxyCmdPrepareExecutionStreamGraph::getStreamDefs(), and ProxyWindowStreamDef::getWindow().

00427 { 00428 return pEnv->CallObjectMethod(jCollection,methIterator); 00429 }

jobject JniUtil::getNextFromIter ( JniEnvRef pEnv,
jobject jIter
) [static]

Calls java.util.Iterator.hasNext/next().

Parameters:

pEnv the JniEnvRef for the current thread
jIter the iterator to advance

Returns:

next object from iterator, or NULL if !hasNext()

Definition at line 431 of file JniUtil.cpp.

References methHasNext, and methNext.

Referenced by JniProxyIter< T >::operator++().

00432 { 00433 if (!pEnv->CallBooleanMethod(jIter,methHasNext)) { 00434 return NULL; 00435 } 00436 return pEnv->CallObjectMethod(jIter,methNext); 00437 }

uint JniUtil::lookUpEnum ( std::string * pSymbols,
std::string const & symbol
) [static]

| void JniUtil::detachJavaEnv | ( | | ) | [static] | | --------------------------- | - | | - | ---------- |

void JniUtil::incrementHandleCount ( const char * pType,
const void * pHandle
) [static]
void JniUtil::decrementHandleCount ( const char * pType,
const void * pHandle
) [static]

| static int JniUtil::getHandleCount | ( | | ) | [inline, static] | | ---------------------------------- | - | | - | ------------------ |

Constructs a FemTupleDescriptor xmi string.

Definition at line 473 of file JniUtil.cpp.

00474 { 00475 std::ostringstream oss; 00476 oss << "<XMI xmi.version = '1.2' " 00477 << "xmlns:FEMFennel = 'org.omg.xmi.namespace.FEMFennel'>" << std::endl; 00478 oss << "<XMI.content>" << std::endl; 00479 oss << "FEMFennel:TupleDescriptor" << std::endl; 00480 for (uint i = 0; i < tupleDescriptor.size(); ++i) { 00481 TupleAttributeDescriptor const &attrDescriptor = 00482 tupleDescriptor[i]; 00483 oss << "FEMFennel:TupleDescriptor.AttrDescriptor"; 00484 oss << "<FEMFennel:TupleAttrDescriptor "; 00485 oss << "typeOrdinal='"; 00486 oss << attrDescriptor.pTypeDescriptor->getOrdinal(); 00487 oss << "' "; 00488 oss << "isNullable='"; 00489 oss << (attrDescriptor.isNullable ? "true" : "false"); 00490 oss << "' "; 00491 oss << "byteLength='"; 00492 oss << attrDescriptor.cbStorage; 00493 oss << "' "; 00494 oss << "/>" << std::endl; 00495 oss << "</FEMFennel:TupleDescriptor.AttrDescriptor>"; 00496 } 00497 oss << "" << std::endl; 00498 oss << "</XMI.content>" << std::endl; 00499 oss << "" << std::endl; 00500 std::string s = oss.str(); 00501 return s; 00502 }



Member Data Documentation

Java method FarragoTransform.init.

Definition at line 325 of file JniUtil.h.

Referenced by init().

Java method FarragoTransform.setInputFetchTimeout.

Definition at line 335 of file JniUtil.h.

Referenced by init().

Java class FarragoTransform.InputBinding.

Definition at line 345 of file JniUtil.h.

Referenced by init().

Java constructor FarragoTransform.InputBinding.InputBinding.

Definition at line 350 of file JniUtil.h.

Referenced by init().

Java method FarragoRuntimeContext.statementClassForName.

Definition at line 355 of file JniUtil.h.

Referenced by init().


The documentation for this class was generated from the following files:


Generated on Mon Jun 22 04:00:33 2009 for Fennel by doxygen 1.5.1