(file) Return to JMPIImpl.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / JMPI

  1 martin 1.32 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.33 //
  3 martin 1.32 // Licensed to The Open Group (TOG) under one or more contributor license
  4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5             // this work for additional information regarding copyright ownership.
  6             // Each contributor licenses this file to you under the OpenPegasus Open
  7             // Source License; you may not use this file except in compliance with the
  8             // License.
  9 martin 1.33 //
 10 martin 1.32 // Permission is hereby granted, free of charge, to any person obtaining a
 11             // copy of this software and associated documentation files (the "Software"),
 12             // to deal in the Software without restriction, including without limitation
 13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14             // and/or sell copies of the Software, and to permit persons to whom the
 15             // Software is furnished to do so, subject to the following conditions:
 16 martin 1.33 //
 17 martin 1.32 // The above copyright notice and this permission notice shall be included
 18             // in all copies or substantial portions of the Software.
 19 martin 1.33 //
 20 martin 1.32 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.33 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.32 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.33 //
 28 martin 1.32 //////////////////////////////////////////////////////////////////////////
 29 schuur 1.1  //
 30             //%/////////////////////////////////////////////////////////////////////////////
 31             
 32             #ifndef _Provider_JMPIImpl_h
 33             #define _Provider_JMPIImpl_h
 34             
 35 mark.hamzy 1.24 #include <Pegasus/Common/Config.h>
 36                 
 37 mark.hamzy 1.10 #include <jni.h>
 38 mark.hamzy 1.24 
 39                 #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
 40                 #if defined (__GNUC__) && GCC_VERSION >= 40000
 41 marek      1.31 // If gcc is compiled with -fvisibility=hidden then JMPI is broken.
 42 kumpf      1.34 // This is because the JNI h file defines JNIEXPORT as empty since
 43 marek      1.31 // the default is visible.
 44 mark.hamzy 1.24 #undef  JNIEXPORT
 45                 #define JNIEXPORT __attribute__ ((visibility("default")))
 46                 #endif
 47                 #endif
 48                 
 49 schuur     1.1  #include <stdio.h>
 50                 #include <stdlib.h>
 51                 #include <string.h>
 52                 
 53                 #include <Pegasus/Common/String.h>
 54                 #include <Pegasus/Common/System.h>
 55 mark.hamzy 1.11 #include <Pegasus/Common/HashTable.h>
 56 mark.hamzy 1.19 #include <Pegasus/Common/CIMType.h>
 57 mark.hamzy 1.17 #include <Pegasus/Common/Mutex.h>
 58 mark.hamzy 1.26 #include <Pegasus/ProviderManager2/JMPI/Linkage.h>
 59 schuur     1.1  
 60                 PEGASUS_NAMESPACE_BEGIN
 61                 
 62                 #define NULL_CHECK0(e) if ((e) == 0) return 0 //added by Andy
 63                 #define NULL_CHECK(e) if ((e) == 0) return //added by Andy
 64                 
 65                 #define Catch(jEnv) \
 66                    catch(CIMException & e) { \
 67                       JMPIjvm::cacheIDs(jEnv); \
 68 marek      1.31       jobject ev=jEnv->NewObject( \
 69                                      JMPIjvm::jv.CIMExceptionClassRef, \
 70                                      JMPIjvm::jv.CIMExceptionNewISt, \
 71                                      (jint)e.getCode(), \
 72                                      jEnv->NewStringUTF(e.getMessage().getCString())); \
 73 schuur     1.1        jEnv->Throw((jthrowable)ev); \
 74                    } \
 75                    catch(Exception & e) { \
 76                       JMPIjvm::cacheIDs(jEnv);\
 77 marek      1.31       jobject ev=jEnv->NewObject( \
 78                                      JMPIjvm::jv.CIMExceptionClassRef, \
 79                                      JMPIjvm::jv.CIMExceptionNewISt, \
 80                                      (jint)1, \
 81                                      jEnv->NewStringUTF(e.getMessage().getCString())); \
 82 schuur     1.1        jEnv->Throw((jthrowable)ev); \
 83                    } \
 84                    catch(...)  { \
 85                       JMPIjvm::cacheIDs(jEnv); \
 86 marek      1.31       jobject ev=jEnv->NewObject( \
 87                                      JMPIjvm::jv.CIMExceptionClassRef, \
 88                                      JMPIjvm::jv.CIMExceptionNewISt, \
 89                                      (jint)1, \
 90                                      jEnv->NewStringUTF("Exception: Unknown")); \
 91 schuur     1.1        jEnv->Throw((jthrowable)ev); \
 92                    }
 93                 
 94 mark.hamzy 1.14 typedef struct {
 95                   int         clsIndex;
 96                   const char *methodName;
 97                   const char *signature;
 98                 } METHOD_STRUCT;
 99                 
100 schuur     1.1  typedef struct jvmVector {
101 mark.hamzy 1.14    int                  initRc;
102                    JavaVM              *jvm;
103                    JNIEnv              *env;
104                    jclass              *classRefs;
105                    jmethodID           *instMethodIDs;
106                    jmethodID           *staticMethodIDs;
107                    const METHOD_STRUCT *instanceMethodNames;
108 schuur     1.1  } JvmVector;
109                 
110 mark.hamzy 1.26 class PEGASUS_JMPIPM_LINKAGE JMPIjvm {
111 schuur     1.1   public:
112 schuur     1.2     static int trace;
113 schuur     1.1     static JavaVM *jvm;
114                    static JvmVector jv;
115 mark.hamzy 1.11 
116 schuur     1.1     JMPIjvm();
117                   ~JMPIjvm();
118 schuur     1.2  
119 schuur     1.1     static JNIEnv* attachThread(JvmVector **jvp);
120                    static void detachThread();
121                    static jobject getProvider(JNIEnv *env, const char *cn, jclass *cls) ;
122 marek      1.31    static jobject getProvider(
123                                       JNIEnv *env,
124                                       String jar,
125                                       String cln,
126                                       const char *cn,
127                                       jclass *cls) ;
128 schuur     1.1     static void checkException(JNIEnv *env);
129                    static jstring NewPlatformString(JNIEnv *env,char *s);
130 marek      1.31    static jobjectArray NewPlatformStringArray(
131                                            JNIEnv *env,
132                                            char **strv,
133                                            int strc);
134 schuur     1.1     static int cacheIDs(JNIEnv *env);
135 schuur     1.3     static int destroyJVM();
136 mark.hamzy 1.11 
137 schuur     1.1   private:
138                    static jclass getGlobalClassRef(JNIEnv *env, const char* name);
139                    static int initJVM();
140 mark.hamzy 1.11 
141 marek      1.31    typedef HashTable<
142                                String,
143                                jclass,
144                                EqualFunc<String>,
145                                HashFunc<String> >  ClassTable;
146                    typedef HashTable<
147                                String,
148                                jobject,
149                                EqualFunc<String>,
150                                HashFunc<String> > ObjectTable;
151 mark.hamzy 1.11 
152                    static ClassTable  _classTable;
153                    static ObjectTable _objectTable;
154 mark.hamzy 1.16 
155                    static Mutex _initMutex;
156 schuur     1.1  };
157                 
158                 class _nameSpace {
159                  public:
160                    _nameSpace();
161                    _nameSpace(String hn);
162                    _nameSpace(String hn, String ns);
163 mark.hamzy 1.10 
164 schuur     1.1     int port();
165                    String hostName();
166                    String nameSpace();
167 mark.hamzy 1.28    Boolean isHttps ();
168 schuur     1.1     int port_;
169                    String protocol_;
170                    String hostName_;
171                    String nameSpace_;
172 mark.hamzy 1.28    Boolean fHttps;
173 schuur     1.1  };
174                 
175 mark.hamzy 1.19 class _dataType {
176                    public:
177                 
178                    _dataType (int          type,
179                               int          size,
180                               Boolean      reference,
181                               Boolean      null,
182                               Boolean      array,
183                               String&      refClass,
184                               Boolean      fromProperty)
185                       : _type(type),
186                         _size(size),
187                         _reference(reference),
188                         _array(array),
189                         _refClass(refClass),
190                         _fromProperty(fromProperty)
191                    {
192                    }
193                 
194                    _dataType (int          type)
195                       : _type(type),
196 mark.hamzy 1.19         _size(1),
197                         _reference(false),
198                         _array(false),
199                         _refClass(String::EMPTY),
200                         _fromProperty(false)
201                    {
202                    }
203 schuur     1.1  
204 mark.hamzy 1.19    _dataType (int          type,
205                               int          size)
206                       : _type(type),
207                         _size(size),
208                         _reference(false),
209                         _array(true),
210                         _refClass(String::EMPTY),
211                         _fromProperty(true)
212                    {
213                    }
214                 
215                    _dataType (int          type,
216                               const String ref)
217                        : _type(type),
218                          _size(0),
219                          _reference(true),
220                          _array(false),
221                          _refClass(ref),
222                          _fromProperty(true)
223                    {
224                    }
225 schuur     1.1  
226 mark.hamzy 1.19    static int convertCTypeToJavaType (CIMType cType, bool *pfSuccess)
227                    {
228                       static int cTypeToJType[]=
229                       /*  CIMType.h                CIMDataType.java
230                           CIMTYPE_BOOLEAN,     0   public static final int BOOLEAN   =      10;
231                           CIMTYPE_UINT8,       1   public static final int UINT8     =       1;
232                           CIMTYPE_SINT8,       2   public static final int SINT8     =       2;
233                           CIMTYPE_UINT16,      3   public static final int UINT16    =       3;
234                           CIMTYPE_SINT16,      4   public static final int SINT16    =       4;
235                           CIMTYPE_UINT32,      5   public static final int UINT32    =       5;
236                           CIMTYPE_SINT32,      6   public static final int SINT32    =       6;
237                           CIMTYPE_UINT64,      7   public static final int UINT64    =       7;
238                           CIMTYPE_SINT64,      8   public static final int SINT64    =       8;
239                           CIMTYPE_REAL32,      9   public static final int REAL32    =      11;
240                           CIMTYPE_REAL64,     10   public static final int REAL64    =      12;
241                           CIMTYPE_CHAR16,     11   public static final int CHAR16    =      14;
242                           CIMTYPE_STRING,     12   public static final int STRING    =       9;
243                           CIMTYPE_DATETIME,   13   public static final int DATETIME  =      13;
244                           CIMTYPE_REFERENCE,  14   public static final int REFERENCE = 0x20+ 1;
245                           CIMTYPE_OBJECT      15   public static final int OBJECT    =      15;
246                       */
247 mark.hamzy 1.19       //  p:      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14     15
248                       {/* j: */  10, 1, 2, 3, 4, 5, 6, 7, 8,11,12,14, 9,13,0x20+1,15};
249                 
250                       if ((int)cType < (int)CIMTYPE_BOOLEAN || (int)cType > (int)CIMTYPE_OBJECT)
251                       {
252                          *pfSuccess = false;
253                 
254                          return cTypeToJType[0];
255                       }
256                       else
257                       {
258                          *pfSuccess = true;
259                 
260                          return cTypeToJType[cType];
261                       }
262                    }
263                 
264                    static CIMType convertJavaTypeToCType (int jType, bool *pfSuccess)
265                    {
266                       static int jTypeToCType[]=
267                       /*  CIMDataType.java                              CIMType.h
268 mark.hamzy 1.19           public static final int UINT8     =       1;  CIMTYPE_UINT8,       1
269                           public static final int SINT8     =       2;  CIMTYPE_SINT8,       2
270                           public static final int UINT16    =       3;  CIMTYPE_UINT16,      3
271                           public static final int SINT16    =       4;  CIMTYPE_SINT16,      4
272                           public static final int UINT32    =       5;  CIMTYPE_UINT32,      5
273                           public static final int SINT32    =       6;  CIMTYPE_SINT32,      6
274                           public static final int UINT64    =       7;  CIMTYPE_UINT64,      7
275                           public static final int SINT64    =       8;  CIMTYPE_SINT64,      8
276                           public static final int STRING    =       9;  CIMTYPE_STRING,     12
277                           public static final int BOOLEAN   =      10;  CIMTYPE_BOOLEAN,     0
278                           public static final int REAL32    =      11;  CIMTYPE_REAL32,      9
279                           public static final int REAL64    =      12;  CIMTYPE_REAL64,     10
280                           public static final int DATETIME  =      13;  CIMTYPE_DATETIME,   13
281                           public static final int CHAR16    =      14;  CIMTYPE_CHAR16,     11
282                           public static final int REFERENCE = 0x20+ 1;  CIMTYPE_REFERENCE,  14
283                           public static final int OBJECT    =      15;  CIMTYPE_OBJECT      15
284                       */
285                       //  j:      0  1  2  3  4  5  6  7  8   9 10 11  12  13  14  15
286                       {/* p: */   0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 0, 9, 10, 13, 11, 15};
287                 
288                       if (jType < 1)
289 mark.hamzy 1.19       {
290                          *pfSuccess = false;
291                 
292                          return CIMTYPE_BOOLEAN;
293                       }
294                       else if (jType <= 15)
295                       {
296                          *pfSuccess = true;
297                 
298                          return (CIMType)jTypeToCType[jType];
299                       }
300                       else if (jType == 0x20 + 1) // REFERENCE
301                       {
302                          *pfSuccess = true;
303                 
304                          return CIMTYPE_REFERENCE;
305                       }
306                       else
307                       {
308                          *pfSuccess = false;
309                 
310 mark.hamzy 1.19          return CIMTYPE_BOOLEAN;
311                       }
312                    }
313                 
314                    static char *convertJavaTypeToChars (int jType, bool *pfSuccess)
315                    {
316                       static char *jTypeToChars[]= {
317                       /* CIMDataType.java                             */ NULL,
318                       /* public static final int UINT8     =       1; */ "uint8",
319                       /* public static final int SINT8     =       2; */ "sint8",
320                       /* public static final int UINT16    =       3; */ "uint16",
321                       /* public static final int SINT16    =       4; */ "sint16",
322                       /* public static final int UINT32    =       5; */ "uint32",
323                       /* public static final int SINT32    =       6; */ "sint32",
324                       /* public static final int UINT64    =       7; */ "uint64",
325                       /* public static final int SINT64    =       8; */ "sint64",
326                       /* public static final int STRING    =       9; */ "string",
327                       /* public static final int BOOLEAN   =      10; */ "boolean",
328                       /* public static final int REAL32    =      11; */ "real32",
329                       /* public static final int REAL64    =      12; */ "real64",
330                       /* public static final int DATETIME  =      13; */ "datetime",
331 mark.hamzy 1.19       /* public static final int CHAR16    =      14; */ "char16",
332                       /* public static final int OBJECT    =      15; */ "object"
333                       };
334                 
335                       if (jType < 1)
336                       {
337                          *pfSuccess = false;
338                 
339                          return NULL;
340                       }
341                       else if (jType <= 15)
342                       {
343                          *pfSuccess = true;
344                 
345                          return jTypeToChars[jType];
346                       }
347                       else if (jType == 0x20 + 1) // REFERENCE
348                       {
349                          *pfSuccess = true;
350                 
351                          return "reference";
352 mark.hamzy 1.19       }
353                       else
354                       {
355                          *pfSuccess = false;
356                 
357                          return NULL;
358                       }
359                    }
360                 
361                    int     _type;
362                    int     _size;
363 schuur     1.1     Boolean _reference;
364                    Boolean _null;
365                    Boolean _array;
366 mark.hamzy 1.19    String  _refClass;
367 schuur     1.1     Boolean _fromProperty;
368                 };
369                 
370 mark.hamzy 1.30 #define VectorClassRef                 classRefs[0]
371                 #define BooleanClassRef                classRefs[1]
372                 #define ByteClassRef                   classRefs[2]
373                 #define ShortClassRef                  classRefs[3]
374                 #define IntegerClassRef                classRefs[4]
375                 #define LongClassRef                   classRefs[5]
376                 #define FloatClassRef                  classRefs[6]
377                 #define DoubleClassRef                 classRefs[7]
378                 #define UnsignedInt8ClassRef           classRefs[8]
379                 #define UnsignedInt16ClassRef          classRefs[9]
380                 #define UnsignedInt32ClassRef          classRefs[10]
381                 #define UnsignedInt64ClassRef          classRefs[11]
382                 #define CIMObjectPathClassRef          classRefs[12]
383                 #define CIMExceptionClassRef           classRefs[13]
384                 #define BigIntegerClassRef             classRefs[14]
385                 #define CIMPropertyClassRef            classRefs[15]
386                 #define CIMOMHandleClassRef            classRefs[16]
387                 #define CIMClassClassRef               classRefs[17]
388                 #define CIMInstanceClassRef            classRefs[18]
389                 #define CIMValueClassRef               classRefs[19]
390                 #define ObjectClassRef                 classRefs[20]
391 mark.hamzy 1.30 #define ThrowableClassRef              classRefs[21]
392                 #define StringClassRef                 classRefs[22]
393                 #define JarClassLoaderClassRef         classRefs[23]
394                 #define CIMDateTimeClassRef            classRefs[24]
395                 #define SelectExpClassRef              classRefs[25]
396                 #define CIMQualifierClassRef           classRefs[26]
397                 #define CIMQualifierTypeClassRef       classRefs[27]
398                 #define CIMFlavorClassRef              classRefs[28]
399                 #define CIMArgumentClassRef            classRefs[29]
400                 #define CIMInstanceExceptionClassRef   classRefs[30]
401                 #define CIMObjectClassRef              classRefs[31]
402                 #define CharacterClassRef              classRefs[32]
403                 #define OperationContextClassRef       classRefs[33]
404                 #define ClassClassRef                  classRefs[34]
405 mark.hamzy 1.29 #define ByteArrayOutputStreamClassRef  classRefs[35]
406                 #define PrintStreamClassRef            classRefs[36]
407 mark.hamzy 1.13 
408 mark.hamzy 1.30 #define BigIntegerValueOf              staticMethodIDs[0]
409                 #define JarClassLoaderLoad             staticMethodIDs[1]
410 kumpf      1.34 
411 mark.hamzy 1.30 #define VectorNew                      instMethodIDs[0]
412                 #define VectorAddElement               instMethodIDs[15]
413                 #define VectorElementAt                instMethodIDs[16]
414                 #define VectorRemoveElementAt          instMethodIDs[30]
415                 #define VectorSize                     instMethodIDs[27]
416                 #define BooleanNewZ                    instMethodIDs[1]
417                 #define ByteNewB                       instMethodIDs[2]
418                 #define ShortNewS                      instMethodIDs[3]
419                 #define IntegerNewI                    instMethodIDs[4]
420                 #define LongNewJ                       instMethodIDs[5]
421                 #define FloatNewF                      instMethodIDs[6]
422                 #define DoubleNewD                     instMethodIDs[7]
423                 #define UnsignedInt8NewS               instMethodIDs[8]
424                 #define UnsignedInt16NewI              instMethodIDs[9]
425                 #define UnsignedInt32NewJ              instMethodIDs[10]
426                 #define UnsignedInt64NewBi             instMethodIDs[11]
427                 #define CIMObjectPathNewJ              instMethodIDs[12]
428                 #define CIMObjectPathCInst             instMethodIDs[21]
429                 #define CIMExceptionNewSt              instMethodIDs[13]
430                 #define CIMExceptionNewISt             instMethodIDs[32]
431                 #define CIMExceptionNewI               instMethodIDs[18]
432 mark.hamzy 1.30 #define CIMExceptionNew                instMethodIDs[41]
433                 #define CIMExceptionNewStOb            instMethodIDs[42]
434                 #define CIMExceptionNewStObOb          instMethodIDs[43]
435                 #define CIMExceptionNewStObObOb        instMethodIDs[44]
436                 #define CIMExceptionGetCode            instMethodIDs[33]
437                 #define CIMExceptionGetID              instMethodIDs[26]
438                 #define CIMPropertyNewJ                instMethodIDs[14]
439                 #define CIMPropertyCInst               instMethodIDs[28]
440                 #define CIMOMHandleNewJSt              instMethodIDs[17]
441                 #define CIMOMHandleGetClass            instMethodIDs[29]
442                 #define CIMClassNewJ                   instMethodIDs[19]
443                 #define CIMClassCInst                  instMethodIDs[23]
444                 #define CIMInstanceNewJ                instMethodIDs[20]
445                 #define CIMInstanceCInst               instMethodIDs[22]
446                 #define CIMValueNewJ                   instMethodIDs[45]
447                 #define CIMValueCInst                  instMethodIDs[31]
448                 #define CIMDateTimeNewJ                instMethodIDs[34]
449                 #define SelectExpNewJ                  instMethodIDs[35]
450                 #define CIMQualifierNewJ               instMethodIDs[36]
451                 #define CIMFlavorNewI                  instMethodIDs[37]
452                 #define CIMFlavorGetFlavor             instMethodIDs[38]
453 mark.hamzy 1.30 #define CIMArgumentNewJ                instMethodIDs[40]
454                 #define CIMArgumentCInst               instMethodIDs[39]
455                 #define ObjectToString                 instMethodIDs[24]
456                 #define ThrowableGetMessage            instMethodIDs[25]
457                 #define CIMObjectNewJZ                 instMethodIDs[46]
458                 #define CharacterNewC                  instMethodIDs[47]
459                 #define OperationContextNewJ           instMethodIDs[48]
460                 #define OperationContextUnassociate    instMethodIDs[49]
461                 #define ClassGetInterfaces             instMethodIDs[50]
462                 #define ClassGetName                   instMethodIDs[51]
463                 #define UnsignedInt64NewStr            instMethodIDs[52]
464 mark.hamzy 1.29 #define ByteArrayOutputStreamNew       instMethodIDs[53]
465                 #define PrintStreamNewOb               instMethodIDs[54]
466                 #define ThrowablePrintStackTrace       instMethodIDs[55]
467                 #define ByteArrayOutputStreamToString  instMethodIDs[56]
468 schuur     1.1  
469                 //extern "C" JNIEnv* attachThread(JvmVector**);
470                 //extern "C" void detachThread();
471                 //extern "C" jobject getProvider(JNIEnv*,const char*,jclass*);
472                 //extern "C" void checkException(JNIEnv *env);
473                 
474                 typedef JNIEnv* (*JvmAttach)(JvmVector**);
475                 typedef void (*JvmDetach)();
476                 
477                 PEGASUS_NAMESPACE_END
478                 
479                 #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2