version 1.25, 2006/09/14 16:26:11
|
version 1.34, 2008/12/16 18:57:00
|
|
|
//%2006//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// Source License; you may not use this file except in compliance with the |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// License. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
|
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// Permission is hereby granted, free of charge, to any person obtaining a |
// of this software and associated documentation files (the "Software"), to |
// copy of this software and associated documentation files (the "Software"), |
// deal in the Software without restriction, including without limitation the |
// to deal in the Software without restriction, including without limitation |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// sell copies of the Software, and to permit persons to whom the Software is |
// and/or sell copies of the Software, and to permit persons to whom the |
// furnished to do so, subject to the following conditions: |
// Software is furnished to do so, subject to the following conditions: |
// | // |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// The above copyright notice and this permission notice shall be included |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// in all copies or substantial portions of the Software. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
|
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
|
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
|
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
|
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
// | // |
//============================================================================== |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
// |
|
////////////////////////////////////////////////////////////////////////// |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
| |
#ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU | #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU |
#if defined (__GNUC__) && GCC_VERSION >= 40000 | #if defined (__GNUC__) && GCC_VERSION >= 40000 |
// If gcc is compiled with -fvisibility=hidden then JMPI is broken. This is because |
// If gcc is compiled with -fvisibility=hidden then JMPI is broken. |
// the JNI h file defines JNIEXPORT as empty since the default is visible. |
// This is because the JNI h file defines JNIEXPORT as empty since |
|
// the default is visible. |
#undef JNIEXPORT | #undef JNIEXPORT |
#define JNIEXPORT __attribute__ ((visibility("default"))) | #define JNIEXPORT __attribute__ ((visibility("default"))) |
#endif | #endif |
|
|
#include <Pegasus/Common/HashTable.h> | #include <Pegasus/Common/HashTable.h> |
#include <Pegasus/Common/CIMType.h> | #include <Pegasus/Common/CIMType.h> |
#include <Pegasus/Common/Mutex.h> | #include <Pegasus/Common/Mutex.h> |
|
#include <Pegasus/ProviderManager2/JMPI/Linkage.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
#define Catch(jEnv) \ | #define Catch(jEnv) \ |
catch(CIMException & e) { \ | catch(CIMException & e) { \ |
JMPIjvm::cacheIDs(jEnv); \ | JMPIjvm::cacheIDs(jEnv); \ |
jobject ev=jEnv->NewObject(JMPIjvm::jv.CIMExceptionClassRef,JMPIjvm::jv.CIMExceptionNewISt,(jint)e.getCode(),jEnv->NewStringUTF(e.getMessage().getCString())); \ |
jobject ev=jEnv->NewObject( \ |
|
JMPIjvm::jv.CIMExceptionClassRef, \ |
|
JMPIjvm::jv.CIMExceptionNewISt, \ |
|
(jint)e.getCode(), \ |
|
jEnv->NewStringUTF(e.getMessage().getCString())); \ |
jEnv->Throw((jthrowable)ev); \ | jEnv->Throw((jthrowable)ev); \ |
} \ | } \ |
catch(Exception & e) { \ | catch(Exception & e) { \ |
JMPIjvm::cacheIDs(jEnv);\ | JMPIjvm::cacheIDs(jEnv);\ |
jobject ev=jEnv->NewObject(JMPIjvm::jv.CIMExceptionClassRef,JMPIjvm::jv.CIMExceptionNewISt,(jint)1,jEnv->NewStringUTF(e.getMessage().getCString())); \ |
jobject ev=jEnv->NewObject( \ |
|
JMPIjvm::jv.CIMExceptionClassRef, \ |
|
JMPIjvm::jv.CIMExceptionNewISt, \ |
|
(jint)1, \ |
|
jEnv->NewStringUTF(e.getMessage().getCString())); \ |
jEnv->Throw((jthrowable)ev); \ | jEnv->Throw((jthrowable)ev); \ |
} \ | } \ |
catch(...) { \ | catch(...) { \ |
JMPIjvm::cacheIDs(jEnv); \ | JMPIjvm::cacheIDs(jEnv); \ |
jobject ev=jEnv->NewObject(JMPIjvm::jv.CIMExceptionClassRef,JMPIjvm::jv.CIMExceptionNewISt,(jint)1,jEnv->NewStringUTF("Exception: Unknown")); \ |
jobject ev=jEnv->NewObject( \ |
|
JMPIjvm::jv.CIMExceptionClassRef, \ |
|
JMPIjvm::jv.CIMExceptionNewISt, \ |
|
(jint)1, \ |
|
jEnv->NewStringUTF("Exception: Unknown")); \ |
jEnv->Throw((jthrowable)ev); \ | jEnv->Throw((jthrowable)ev); \ |
} | } |
| |
|
|
const METHOD_STRUCT *instanceMethodNames; | const METHOD_STRUCT *instanceMethodNames; |
} JvmVector; | } JvmVector; |
| |
class JMPIjvm { |
class PEGASUS_JMPIPM_LINKAGE JMPIjvm { |
public: | public: |
static int trace; | static int trace; |
static JavaVM *jvm; | static JavaVM *jvm; |
|
|
static JNIEnv* attachThread(JvmVector **jvp); | static JNIEnv* attachThread(JvmVector **jvp); |
static void detachThread(); | static void detachThread(); |
static jobject getProvider(JNIEnv *env, const char *cn, jclass *cls) ; | static jobject getProvider(JNIEnv *env, const char *cn, jclass *cls) ; |
static jobject getProvider(JNIEnv *env, String jar, String cln, const char *cn, jclass *cls) ; |
static jobject getProvider( |
|
JNIEnv *env, |
|
String jar, |
|
String cln, |
|
const char *cn, |
|
jclass *cls) ; |
static void checkException(JNIEnv *env); | static void checkException(JNIEnv *env); |
static jstring NewPlatformString(JNIEnv *env,char *s); | static jstring NewPlatformString(JNIEnv *env,char *s); |
static jobjectArray NewPlatformStringArray(JNIEnv *env,char **strv, int strc); |
static jobjectArray NewPlatformStringArray( |
|
JNIEnv *env, |
|
char **strv, |
|
int strc); |
static int cacheIDs(JNIEnv *env); | static int cacheIDs(JNIEnv *env); |
static int destroyJVM(); | static int destroyJVM(); |
| |
|
|
static jclass getGlobalClassRef(JNIEnv *env, const char* name); | static jclass getGlobalClassRef(JNIEnv *env, const char* name); |
static int initJVM(); | static int initJVM(); |
| |
typedef HashTable<String,jclass,EqualFunc<String>,HashFunc<String> > ClassTable; |
typedef HashTable< |
typedef HashTable<String,jobject,EqualFunc<String>,HashFunc<String> > ObjectTable; |
String, |
|
jclass, |
|
EqualFunc<String>, |
|
HashFunc<String> > ClassTable; |
|
typedef HashTable< |
|
String, |
|
jobject, |
|
EqualFunc<String>, |
|
HashFunc<String> > ObjectTable; |
| |
static ClassTable _classTable; | static ClassTable _classTable; |
static ObjectTable _objectTable; | static ObjectTable _objectTable; |
|
|
int port(); | int port(); |
String hostName(); | String hostName(); |
String nameSpace(); | String nameSpace(); |
|
Boolean isHttps (); |
int port_; | int port_; |
String protocol_; | String protocol_; |
String hostName_; | String hostName_; |
String nameSpace_; | String nameSpace_; |
|
Boolean fHttps; |
}; | }; |
| |
class _dataType { | class _dataType { |
|
|
#define CharacterClassRef classRefs[32] | #define CharacterClassRef classRefs[32] |
#define OperationContextClassRef classRefs[33] | #define OperationContextClassRef classRefs[33] |
#define ClassClassRef classRefs[34] | #define ClassClassRef classRefs[34] |
|
#define ByteArrayOutputStreamClassRef classRefs[35] |
|
#define PrintStreamClassRef classRefs[36] |
| |
#define BigIntegerValueOf staticMethodIDs[0] | #define BigIntegerValueOf staticMethodIDs[0] |
#define JarClassLoaderLoad staticMethodIDs[1] | #define JarClassLoaderLoad staticMethodIDs[1] |
|
|
#define UnsignedInt16NewI instMethodIDs[9] | #define UnsignedInt16NewI instMethodIDs[9] |
#define UnsignedInt32NewJ instMethodIDs[10] | #define UnsignedInt32NewJ instMethodIDs[10] |
#define UnsignedInt64NewBi instMethodIDs[11] | #define UnsignedInt64NewBi instMethodIDs[11] |
#define CIMObjectPathNewI instMethodIDs[12] |
#define CIMObjectPathNewJ instMethodIDs[12] |
#define CIMObjectPathCInst instMethodIDs[21] | #define CIMObjectPathCInst instMethodIDs[21] |
#define CIMExceptionNewSt instMethodIDs[13] | #define CIMExceptionNewSt instMethodIDs[13] |
#define CIMExceptionNewISt instMethodIDs[32] | #define CIMExceptionNewISt instMethodIDs[32] |
|
|
#define CIMExceptionNewStObObOb instMethodIDs[44] | #define CIMExceptionNewStObObOb instMethodIDs[44] |
#define CIMExceptionGetCode instMethodIDs[33] | #define CIMExceptionGetCode instMethodIDs[33] |
#define CIMExceptionGetID instMethodIDs[26] | #define CIMExceptionGetID instMethodIDs[26] |
#define CIMPropertyNewI instMethodIDs[14] |
#define CIMPropertyNewJ instMethodIDs[14] |
#define CIMPropertyCInst instMethodIDs[28] | #define CIMPropertyCInst instMethodIDs[28] |
#define CIMOMHandleNewISt instMethodIDs[17] |
#define CIMOMHandleNewJSt instMethodIDs[17] |
#define CIMOMHandleGetClass instMethodIDs[29] | #define CIMOMHandleGetClass instMethodIDs[29] |
#define CIMClassNewI instMethodIDs[19] |
#define CIMClassNewJ instMethodIDs[19] |
#define CIMClassCInst instMethodIDs[23] | #define CIMClassCInst instMethodIDs[23] |
#define CIMInstanceNewI instMethodIDs[20] |
#define CIMInstanceNewJ instMethodIDs[20] |
#define CIMInstanceCInst instMethodIDs[22] | #define CIMInstanceCInst instMethodIDs[22] |
#define CIMValueNewI instMethodIDs[45] |
#define CIMValueNewJ instMethodIDs[45] |
#define CIMValueCInst instMethodIDs[31] | #define CIMValueCInst instMethodIDs[31] |
#define CIMDateTimeNewI instMethodIDs[34] |
#define CIMDateTimeNewJ instMethodIDs[34] |
#define SelectExpNewI instMethodIDs[35] |
#define SelectExpNewJ instMethodIDs[35] |
#define CIMQualifierNewI instMethodIDs[36] |
#define CIMQualifierNewJ instMethodIDs[36] |
#define CIMFlavorNewI instMethodIDs[37] | #define CIMFlavorNewI instMethodIDs[37] |
#define CIMFlavorGetFlavor instMethodIDs[38] | #define CIMFlavorGetFlavor instMethodIDs[38] |
#define CIMArgumentNewI instMethodIDs[40] |
#define CIMArgumentNewJ instMethodIDs[40] |
#define CIMArgumentCInst instMethodIDs[39] | #define CIMArgumentCInst instMethodIDs[39] |
#define ObjectToString instMethodIDs[24] | #define ObjectToString instMethodIDs[24] |
#define ThrowableGetMessage instMethodIDs[25] | #define ThrowableGetMessage instMethodIDs[25] |
#define CIMObjectNewIZ instMethodIDs[46] |
#define CIMObjectNewJZ instMethodIDs[46] |
#define CharacterNewC instMethodIDs[47] | #define CharacterNewC instMethodIDs[47] |
#define OperationContextNewI instMethodIDs[48] |
#define OperationContextNewJ instMethodIDs[48] |
#define OperationContextUnassociate instMethodIDs[49] | #define OperationContextUnassociate instMethodIDs[49] |
#define ClassGetInterfaces instMethodIDs[50] | #define ClassGetInterfaces instMethodIDs[50] |
#define ClassGetName instMethodIDs[51] | #define ClassGetName instMethodIDs[51] |
#define UnsignedInt64NewStr instMethodIDs[52] | #define UnsignedInt64NewStr instMethodIDs[52] |
|
#define ByteArrayOutputStreamNew instMethodIDs[53] |
|
#define PrintStreamNewOb instMethodIDs[54] |
|
#define ThrowablePrintStackTrace instMethodIDs[55] |
|
#define ByteArrayOutputStreamToString instMethodIDs[56] |
| |
//extern "C" JNIEnv* attachThread(JvmVector**); | //extern "C" JNIEnv* attachThread(JvmVector**); |
//extern "C" void detachThread(); | //extern "C" void detachThread(); |