1 /***********************************************************************/ 2 /* JavaConn.h : header file for the Java connection classes. */ 3 /***********************************************************************/ 4 5 /***********************************************************************/ 6 /* Included C-definition files required by the interface. */ 7 /***********************************************************************/ 8 #include "block.h" 9 #include "jdbccat.h" 10 11 /***********************************************************************/ 12 /* Java native interface. */ 13 /***********************************************************************/ 14 #include <jni.h> 15 16 /***********************************************************************/ 17 /* Constants and defines. */ 18 /***********************************************************************/ 19 // Miscellaneous sizing info 20 #define MAX_NUM_OF_MSG 10 // Max number of error messages 21 //efine MAX_CURRENCY 30 // Max size of Currency($) string 22 #define MAX_TNAME_LEN 32 // Max size of table names 23 //efine MAX_FNAME_LEN 256 // Max size of field names 24 //efine MAX_STRING_INFO 256 // Max size of string from SQLGetInfo 25 //efine MAX_DNAME_LEN 256 // Max size of Recordset names 26 //efine MAX_CONNECT_LEN 512 // Max size of Connect string 27 //efine MAX_CURSOR_NAME 18 // Max size of a cursor name 28 //efine DEFAULT_FIELD_TYPE 0 // TYPE_NULL 29 30 #if !defined(_WIN32) 31 typedef unsigned char *PUCHAR; 32 #endif // !_WIN32 33 34 enum JCATINFO { 35 JCAT_TAB = 1, // JDBC Tables 36 JCAT_COL = 2, // JDBC Columns 37 JCAT_KEY = 3, // JDBC PrimaryKeys 38 }; 39 40 /***********************************************************************/ 41 /* This structure is used to control the catalog functions. */ 42 /***********************************************************************/ 43 typedef struct tagJCATPARM { 44 JCATINFO Id; // Id to indicate function 45 PQRYRES Qrp; // Result set pointer 46 PCSZ DB; // Database (Schema) 47 PCSZ Tab; // Table name or pattern 48 PCSZ Pat; // Table type or column pattern 49 } JCATPARM; 50 51 typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *); 52 typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *); 53 #if defined(_DEBUG) 54 typedef jint(JNICALL *GETDEF) (void *); 55 #endif // _DEBUG 56 57 //class JAVAConn; 58 59 /***********************************************************************/ 60 /* JAVAConn class. */ 61 /***********************************************************************/ 62 class DllExport JAVAConn : public BLOCK { 63 friend class TDBJMG; 64 friend class JMGDISC; 65 private: 66 JAVAConn(); // Standard (unused) constructor 67 68 public: 69 // Constructor 70 JAVAConn(PGLOBAL g, PCSZ wrapper); 71 72 // Set static variables SetJVM(void)73 static void SetJVM(void) { 74 LibJvm = NULL; 75 CreateJavaVM = NULL; 76 GetCreatedJavaVMs = NULL; 77 #if defined(_DEBUG) 78 GetDefaultJavaVMInitArgs = NULL; 79 #endif // _DEBUG 80 } // end of SetJVM 81 82 static void ResetJVM(void); 83 static bool GetJVM(PGLOBAL g); 84 85 // Implementation 86 public: 87 //virtual ~JAVAConn(); IsOpen(void)88 bool IsOpen(void) { return m_Opened; } IsConnected(void)89 bool IsConnected(void) { return m_Connected; } 90 91 // Java operations 92 protected: 93 char *GetUTFString(jstring s); 94 bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig); 95 bool Check(jint rc = 0); 96 97 public: 98 virtual void AddJars(PSTRG jpop, char sep) = 0; 99 virtual bool Connect(PJPARM sop) = 0; 100 virtual bool Open(PGLOBAL g); 101 virtual bool MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, 102 PCSZ filter, bool pipe) = 0; 103 virtual void Close(void); 104 105 protected: 106 // Members 107 #if defined(_WIN32) 108 static HANDLE LibJvm; // Handle to the jvm DLL 109 #else // !_WIN32 110 static void *LibJvm; // Handle for the jvm shared library 111 #endif // !_WIN32 112 static CRTJVM CreateJavaVM; 113 static GETJVM GetCreatedJavaVMs; 114 #if defined(_DEBUG) 115 static GETDEF GetDefaultJavaVMInitArgs; 116 #endif // _DEBUG 117 PGLOBAL m_G; 118 JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) 119 JNIEnv *env; // Pointer to native interface 120 jclass jdi; // Pointer to the java wrapper class 121 jobject job; // The java wrapper class object 122 jmethodID errid; // The GetErrmsg method ID 123 PFBLOCK fp; 124 bool m_Opened; 125 bool m_Connected; 126 PCSZ DiscFunc; 127 PCSZ Msg; 128 PCSZ m_Wrap; 129 int m_Rows; 130 }; // end of JAVAConn class definition 131