version 1.16, 2005/03/27 23:18:09
|
version 1.17, 2005/04/04 21:13:19
|
|
|
| |
#define DDD(x) if (JMPIjvm::trace) x; | #define DDD(x) if (JMPIjvm::trace) x; |
| |
|
JMPIjvm::ClassTable JMPIjvm::_classTable; |
|
JMPIjvm::ObjectTable JMPIjvm::_objectTable; |
|
|
typedef struct { | typedef struct { |
int clsIndex; | int clsIndex; |
const char * methodName; | const char * methodName; |
|
|
jobject JMPIjvm::getProvider(JNIEnv *env, String jar, String cln, | jobject JMPIjvm::getProvider(JNIEnv *env, String jar, String cln, |
const char *cn, jclass *cls) | const char *cn, jclass *cls) |
{ | { |
static jobject gProv=NULL; |
jobject gProv=NULL; |
static jclass scls=NULL; |
jclass scls=NULL; |
| |
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": jar = "<<jar<<", cln = "<<cln<<", cn = "<<cn<<", cls = "<<cls<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": jar = "<<jar<<", cln = "<<cln<<", cn = "<<cn<<", cls = "<<cls<<PEGASUS_STD(endl)); |
|
|
|
_objectTable.lookup(cln,gProv); |
|
_classTable.lookup(cln,scls); |
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<", scls = "<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<", scls = "<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
| |
if (gProv) { | if (gProv) { |
|
|
} | } |
*cls=scls; | *cls=scls; |
| |
|
if (scls) |
|
{ |
|
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": scls = "<<PEGASUS_STD(hex)<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
|
_classTable.insert(cln,scls); |
|
} |
|
|
jmethodID id=env->GetMethodID(*cls,"<init>","()V"); | jmethodID id=env->GetMethodID(*cls,"<init>","()V"); |
jobject lProv=env->NewObject(*cls,id); | jobject lProv=env->NewObject(*cls,id); |
gProv=(jobject)env->NewGlobalRef(lProv); | gProv=(jobject)env->NewGlobalRef(lProv); |
|
|
DDD(PEGASUS_STD(cerr)<<"--- Unable to instantiate provider "<<cn<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cerr)<<"--- Unable to instantiate provider "<<cn<<PEGASUS_STD(endl)); |
return NULL; | return NULL; |
} | } |
|
|
|
if (gProv) |
|
{ |
|
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
|
_objectTable.insert(cln,gProv); |
|
} |
|
|
return gProv; | return gProv; |
} | } |
| |
jobject JMPIjvm::getProvider(JNIEnv *env, const char *cn, jclass *cls) | jobject JMPIjvm::getProvider(JNIEnv *env, const char *cn, jclass *cls) |
{ | { |
static jobject gProv=NULL; |
String cln = cn; |
static jclass scls=NULL; |
jobject gProv=NULL; |
|
jclass scls=NULL; |
| |
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": cn = "<<cn<<", cls = "<<cls<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": cn = "<<cn<<", cls = "<<cls<<PEGASUS_STD(endl)); |
|
|
|
_objectTable.lookup(cln,gProv); |
|
_classTable.lookup(cln,scls); |
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<", scls = "<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<", scls = "<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
| |
if (gProv) { | if (gProv) { |
|
|
} | } |
*cls=scls; | *cls=scls; |
| |
|
if (scls) |
|
{ |
|
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": scls = "<<PEGASUS_STD(hex)<<(int)scls<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
|
_classTable.insert(cln,scls); |
|
} |
|
|
jmethodID id=env->GetMethodID(*cls,"<init>","()V"); | jmethodID id=env->GetMethodID(*cls,"<init>","()V"); |
jobject lProv=env->NewObject(*cls,id); | jobject lProv=env->NewObject(*cls,id); |
gProv=(jobject)env->NewGlobalRef(lProv); | gProv=(jobject)env->NewGlobalRef(lProv); |
|
|
DDD(PEGASUS_STD(cerr)<<"--- Unable to instantiate provider "<<cn<<PEGASUS_STD(endl)); | DDD(PEGASUS_STD(cerr)<<"--- Unable to instantiate provider "<<cn<<PEGASUS_STD(endl)); |
return NULL; | return NULL; |
} | } |
|
|
|
if (gProv) |
|
{ |
|
DDD(PEGASUS_STD(cout)<<"--- JMPIjvm::"<<__FUNCTION__<<": gProv = "<<PEGASUS_STD(hex)<<(int)gProv<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); |
|
_objectTable.insert(cln,gProv); |
|
} |
|
|
return gProv; | return gProv; |
} | } |
| |