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