Commit 21a36f033c91cc66a82c7b1b77c386c506b2864e

Authored by perry.werneck@gmail.com
1 parent 1ab298e6

Reorganizando estrutura do java devido à problemas na carga da jvm

src/java/Makefile.in
@@ -83,7 +83,7 @@ CXXFLAGS=@CFLAGS@ @CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include @@ -83,7 +83,7 @@ CXXFLAGS=@CFLAGS@ @CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include
83 # PW3270_LIBS ?= -L../../.bin/Debug@DLLDIR@ -l3270 -lpw3270 83 # PW3270_LIBS ?= -L../../.bin/Debug@DLLDIR@ -l3270 -lpw3270
84 PW3270_CFLAGS ?= -I../include 84 PW3270_CFLAGS ?= -I../include
85 85
86 -PLUGIN_CFLAGS=@CXXFLAGS@ -Wno-deprecated-declarations @DLL_CFLAGS@ @JNI_CPPFLAGS@ -DJNIDIR="\"$(jnidir)\"" \ 86 +PLUGIN_CFLAGS=@CXXFLAGS@ -DPW3270_PLUGIN -Wno-deprecated-declarations @DLL_CFLAGS@ @JNI_CPPFLAGS@ -DJNIDIR="\"$(jnidir)\"" \
87 -DJARDIR="\"$(jvmjardir)\"" @GTK_CFLAGS@ @GTKMAC_CFLAGS@ $(PW3270_CFLAGS) 87 -DJARDIR="\"$(jvmjardir)\"" @GTK_CFLAGS@ @GTKMAC_CFLAGS@ $(PW3270_CFLAGS)
88 88
89 PLUGIN_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@ @JVM_LIBS@ 89 PLUGIN_LIBS=@GTK_LIBS@ @GTKMAC_LIBS@ @JVM_LIBS@
src/java/actions.cc
@@ -32,13 +32,15 @@ @@ -32,13 +32,15 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_quit(JNIEnv *env, jobject obj) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_quit(JNIEnv *env, jobject obj) {
36 38
37 jint rc = -1; 39 jint rc = -1;
38 40
39 try { 41 try {
40 42
41 - rc = getHandle(env,obj)->quit(); 43 + rc = java::getHandle(env,obj)->quit();
42 44
43 } catch(std::exception &e) { 45 } catch(std::exception &e) {
44 46
@@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_erase_1eof(JNIEnv *env, jobject obj) @@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_erase_1eof(JNIEnv *env, jobject obj)
57 59
58 try { 60 try {
59 61
60 - rc = getHandle(env,obj)->erase_eof(); 62 + rc = java::getHandle(env,obj)->erase_eof();
61 63
62 } catch(std::exception &e) { 64 } catch(std::exception &e) {
63 65
@@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_print(JNIEnv *env, jobject obj) { @@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_print(JNIEnv *env, jobject obj) {
76 78
77 try { 79 try {
78 80
79 - rc = getHandle(env,obj)->print(); 81 + rc = java::getHandle(env,obj)->print();
80 82
81 } catch(std::exception &e) { 83 } catch(std::exception &e) {
82 84
src/java/clipboard.cc
@@ -32,6 +32,9 @@ @@ -32,6 +32,9 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace std;
  36 +using namespace PW3270_NAMESPACE::java;
  37 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1copy(JNIEnv *env, jobject obj, jstring j_str) { 38 JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1copy(JNIEnv *env, jobject obj, jstring j_str) {
36 39
37 const char * str = env->GetStringUTFChars(j_str, 0); 40 const char * str = env->GetStringUTFChars(j_str, 0);
src/java/connect.cc
@@ -32,6 +32,8 @@ @@ -32,6 +32,8 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_connect(JNIEnv *env, jobject obj, jstring j_host, jint seconds) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_connect(JNIEnv *env, jobject obj, jstring j_host, jint seconds) {
36 38
37 const char * host = env->GetStringUTFChars(j_host, 0); 39 const char * host = env->GetStringUTFChars(j_host, 0);
@@ -39,7 +41,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_connect(JNIEnv *env, jobject obj, js @@ -39,7 +41,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_connect(JNIEnv *env, jobject obj, js
39 41
40 try { 42 try {
41 43
42 - rc = getHandle(env,obj)->connect(host,(time_t) seconds); 44 + rc = java::getHandle(env,obj)->connect(host,(time_t) seconds);
43 45
44 } catch(std::exception &e) { 46 } catch(std::exception &e) {
45 47
@@ -58,7 +60,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_disconnect(JNIEnv *env, jobject obj) @@ -58,7 +60,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_disconnect(JNIEnv *env, jobject obj)
58 60
59 try { 61 try {
60 62
61 - return (jint) getHandle(env,obj)->disconnect(); 63 + return (jint) java::getHandle(env,obj)->disconnect();
62 64
63 } catch(std::exception &e) { 65 } catch(std::exception &e) {
64 66
src/java/cursor.cc
@@ -32,13 +32,15 @@ @@ -32,13 +32,15 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1cursor_1position(JNIEnv *env, jobject obj, jint row, jint col) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1cursor_1position(JNIEnv *env, jobject obj, jint row, jint col) {
36 38
37 jint rc = -1; 39 jint rc = -1;
38 40
39 try { 41 try {
40 42
41 - rc = getHandle(env,obj)->set_cursor_position((int) row, (int) col); 43 + rc = java::getHandle(env,obj)->set_cursor_position((int) row, (int) col);
42 44
43 } catch(std::exception &e) { 45 } catch(std::exception &e) {
44 46
@@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1cursor_1addr(JNIEnv *env, jobje @@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1cursor_1addr(JNIEnv *env, jobje
57 59
58 try { 60 try {
59 61
60 - rc = getHandle(env,obj)->set_cursor_addr((int) addr); 62 + rc = java::getHandle(env,obj)->set_cursor_addr((int) addr);
61 63
62 } catch(std::exception &e) { 64 } catch(std::exception &e) {
63 65
@@ -77,7 +79,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1cursor_1addr(JNIEnv *env, jobje @@ -77,7 +79,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1cursor_1addr(JNIEnv *env, jobje
77 79
78 try { 80 try {
79 81
80 - rc = getHandle(env,obj)->get_cursor_addr(); 82 + rc = java::getHandle(env,obj)->get_cursor_addr();
81 83
82 } catch(std::exception &e) { 84 } catch(std::exception &e) {
83 85
src/java/dialog.cc
@@ -32,6 +32,8 @@ @@ -32,6 +32,8 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject obj, jint id, jstring j_title, jstring j_message, jstring j_secondary) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject obj, jint id, jstring j_title, jstring j_message, jstring j_secondary) {
36 38
37 const char * title = env->GetStringUTFChars(j_title, 0); 39 const char * title = env->GetStringUTFChars(j_title, 0);
@@ -41,7 +43,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject o @@ -41,7 +43,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_popup_1dialog(JNIEnv *env, jobject o
41 43
42 try { 44 try {
43 45
44 - rc = (jint) getHandle(env,obj)->popup_dialog((LIB3270_NOTIFY) id, title, message, secondary); 46 + rc = (jint) java::getHandle(env,obj)->popup_dialog((LIB3270_NOTIFY) id, title, message, secondary);
45 47
46 } catch(std::exception &e) { 48 } catch(std::exception &e) {
47 49
@@ -70,7 +72,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_file_1chooser_1dialog(JNIEnv *env @@ -70,7 +72,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_file_1chooser_1dialog(JNIEnv *env
70 72
71 try { 73 try {
72 74
73 - str = getHandle(env,obj)->file_chooser_dialog((int) action, title, extension, filename); 75 + str = java::getHandle(env,obj)->file_chooser_dialog((int) action, title, extension, filename);
74 76
75 } catch(std::exception &e) { 77 } catch(std::exception &e) {
76 78
src/java/field.cc
@@ -32,13 +32,15 @@ @@ -32,13 +32,15 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1start (JNIEnv *env, jobject obj, jint baddr) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1start (JNIEnv *env, jobject obj, jint baddr) {
36 38
37 jint rc = -1; 39 jint rc = -1;
38 40
39 try { 41 try {
40 42
41 - rc = getHandle(env,obj)->get_field_start((int) baddr); 43 + rc = java::getHandle(env,obj)->get_field_start((int) baddr);
42 44
43 45
44 } catch(std::exception &e) { 46 } catch(std::exception &e) {
@@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1len (JNIEnv *env, jobjec @@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1field_1len (JNIEnv *env, jobjec
57 59
58 try { 60 try {
59 61
60 - rc = getHandle(env,obj)->get_field_len((int) baddr); 62 + rc = java::getHandle(env,obj)->get_field_len((int) baddr);
61 63
62 64
63 } catch(std::exception &e) { 65 } catch(std::exception &e) {
@@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1next_1unprotected(JNIEnv *env, @@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_get_1next_1unprotected(JNIEnv *env,
76 78
77 try { 79 try {
78 80
79 - rc = getHandle(env,obj)->get_next_unprotected((int) baddr); 81 + rc = java::getHandle(env,obj)->get_next_unprotected((int) baddr);
80 82
81 83
82 } catch(std::exception &e) { 84 } catch(std::exception &e) {
src/java/getset.cc
@@ -32,6 +32,8 @@ @@ -32,6 +32,8 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace std;
  36 +using namespace PW3270_NAMESPACE;
35 37
36 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string(JNIEnv *env, jobject obj, jint baddr, jint len) { 38 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string(JNIEnv *env, jobject obj, jint baddr, jint len) {
37 39
@@ -39,7 +41,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string(JNIEnv *env, jobject @@ -39,7 +41,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string(JNIEnv *env, jobject
39 41
40 try { 42 try {
41 43
42 - str = getHandle(env,obj)->get_string((int) baddr, (int) len); 44 + str = java::getHandle(env,obj)->get_string((int) baddr, (int) len);
43 45
44 46
45 } catch(std::exception &e) { 47 } catch(std::exception &e) {
@@ -58,7 +60,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string_1at(JNIEnv *env, jobj @@ -58,7 +60,7 @@ JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1string_1at(JNIEnv *env, jobj
58 60
59 try { 61 try {
60 62
61 - str = getHandle(env,obj)->get_string_at((int) row, (int) col, (int) sz); 63 + str = java::getHandle(env,obj)->get_string_at((int) row, (int) col, (int) sz);
62 64
63 65
64 } catch(std::exception &e) { 66 } catch(std::exception &e) {
@@ -78,7 +80,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1string_1at(JNIEnv *env, jobject @@ -78,7 +80,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_set_1string_1at(JNIEnv *env, jobject
78 80
79 try { 81 try {
80 82
81 - rc = getHandle(env,obj)->set_string_at((int) row, (int) col, str); 83 + rc = java::getHandle(env,obj)->set_string_at((int) row, (int) col, str);
82 84
83 } catch(std::exception &e) { 85 } catch(std::exception &e) {
84 86
@@ -101,7 +103,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_cmp_1string_1at(JNIEnv *env, jobject @@ -101,7 +103,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_cmp_1string_1at(JNIEnv *env, jobject
101 103
102 try { 104 try {
103 105
104 - rc = getHandle(env,obj)->cmp_string_at((int) row, (int) col, str); 106 + rc = java::getHandle(env,obj)->cmp_string_at((int) row, (int) col, str);
105 107
106 } catch(std::exception &e) { 108 } catch(std::exception &e) {
107 109
@@ -123,7 +125,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_input_1string(JNIEnv *env, jobject o @@ -123,7 +125,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_input_1string(JNIEnv *env, jobject o
123 125
124 try { 126 try {
125 127
126 - rc = getHandle(env,obj)->input_string(str); 128 + rc = java::getHandle(env,obj)->input_string(str);
127 129
128 } catch(std::exception &e) { 130 } catch(std::exception &e) {
129 131
@@ -144,7 +146,7 @@ JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1connected(JNIEnv *env, jobje @@ -144,7 +146,7 @@ JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1connected(JNIEnv *env, jobje
144 146
145 try { 147 try {
146 148
147 - rc = getHandle(env,obj)->is_connected(); 149 + rc = java::getHandle(env,obj)->is_connected();
148 150
149 } catch(std::exception &e) { 151 } catch(std::exception &e) {
150 152
@@ -164,7 +166,7 @@ JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1ready(JNIEnv *env, jobject o @@ -164,7 +166,7 @@ JNIEXPORT jboolean JNICALL Java_pw3270_terminal_is_1ready(JNIEnv *env, jobject o
164 166
165 try { 167 try {
166 168
167 - rc = getHandle(env,obj)->is_ready(); 169 + rc = java::getHandle(env,obj)->is_ready();
168 170
169 } catch(std::exception &e) { 171 } catch(std::exception &e) {
170 172
src/java/info.cc
@@ -33,23 +33,25 @@ @@ -33,23 +33,25 @@
33 33
34 /*---[ Implement ]----------------------------------------------------------------------------------*/ 34 /*---[ Implement ]----------------------------------------------------------------------------------*/
35 35
  36 +using namespace PW3270_NAMESPACE;
  37 +
36 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1version (JNIEnv *env, jobject obj) { 38 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1version (JNIEnv *env, jobject obj) {
37 39
38 - session *s = getHandle(env,obj); 40 + session *s = java::getHandle(env,obj);
39 return env->NewStringUTF(s->get_version().c_str()); 41 return env->NewStringUTF(s->get_version().c_str());
40 42
41 } 43 }
42 44
43 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1revision(JNIEnv *env, jobject obj) { 45 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1revision(JNIEnv *env, jobject obj) {
44 46
45 - session *s = getHandle(env,obj); 47 + session *s = java::getHandle(env,obj);
46 return env->NewStringUTF(s->get_revision().c_str()); 48 return env->NewStringUTF(s->get_revision().c_str());
47 49
48 } 50 }
49 51
50 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1encoding(JNIEnv *env, jobject obj) { 52 JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1encoding(JNIEnv *env, jobject obj) {
51 53
52 - session *s = getHandle(env,obj); 54 + session *s = java::getHandle(env,obj);
53 return env->NewStringUTF(s->get_encoding()); 55 return env->NewStringUTF(s->get_encoding());
54 56
55 } 57 }
src/java/keyboard.cc
@@ -32,13 +32,15 @@ @@ -32,13 +32,15 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
  35 +using namespace PW3270_NAMESPACE;
  36 +
35 JNIEXPORT jint JNICALL Java_pw3270_terminal_enter(JNIEnv *env, jobject obj) { 37 JNIEXPORT jint JNICALL Java_pw3270_terminal_enter(JNIEnv *env, jobject obj) {
36 38
37 jint rc = -1; 39 jint rc = -1;
38 40
39 try { 41 try {
40 42
41 - rc = getHandle(env,obj)->enter(); 43 + rc = java::getHandle(env,obj)->enter();
42 44
43 } catch(std::exception &e) { 45 } catch(std::exception &e) {
44 46
@@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_pfkey(JNIEnv *env, jobject obj, jint @@ -57,7 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_pfkey(JNIEnv *env, jobject obj, jint
57 59
58 try { 60 try {
59 61
60 - rc = getHandle(env,obj)->pfkey((int) key); 62 + rc = java::getHandle(env,obj)->pfkey((int) key);
61 63
62 } catch(std::exception &e) { 64 } catch(std::exception &e) {
63 65
@@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_pakey(JNIEnv *env, jobject obj, jint @@ -76,7 +78,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_pakey(JNIEnv *env, jobject obj, jint
76 78
77 try { 79 try {
78 80
79 - rc = getHandle(env,obj)->pakey((int) key); 81 + rc = java::getHandle(env,obj)->pakey((int) key);
80 82
81 } catch(std::exception &e) { 83 } catch(std::exception &e) {
82 84
src/java/main.cc
@@ -32,22 +32,29 @@ @@ -32,22 +32,29 @@
32 32
33 /*---[ Implement ]----------------------------------------------------------------------------------*/ 33 /*---[ Implement ]----------------------------------------------------------------------------------*/
34 34
35 -void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) {  
36 - trace("%s(%p)",__FUNCTION__,factory);  
37 - session::set_plugin(factory);  
38 -} 35 +namespace PW3270_NAMESPACE {
39 36
40 -static jfieldID getHandleField(JNIEnv *env, jobject obj) {  
41 - jclass c = env->GetObjectClass(obj);  
42 - // J is the type signature for long:  
43 - return env->GetFieldID(c, "nativeHandle", "J");  
44 -} 37 + void java::set_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) {
  38 + trace("%s(%p)",__FUNCTION__,factory);
  39 + session::set_plugin(factory);
  40 + }
  41 +
  42 + jfieldID java::getHandleField(JNIEnv *env, jobject obj) {
  43 + jclass c = env->GetObjectClass(obj);
  44 + // J is the type signature for long:
  45 + return env->GetFieldID(c, "nativeHandle", "J");
  46 + }
  47 +
  48 + session * java::getHandle(JNIEnv *env, jobject obj) {
  49 + jlong handle = env->GetLongField(obj, getHandleField(env, obj));
  50 + return reinterpret_cast<PW3270_NAMESPACE::session *>(handle);
  51 + }
45 52
46 -session * getHandle(JNIEnv *env, jobject obj) {  
47 - jlong handle = env->GetLongField(obj, getHandleField(env, obj));  
48 - return reinterpret_cast<PW3270_NAMESPACE::session *>(handle);  
49 } 53 }
50 54
  55 +using namespace PW3270_NAMESPACE;
  56 +using namespace PW3270_NAMESPACE::java;
  57 +
51 JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { 58 JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) {
52 59
53 trace("%s",__FUNCTION__); 60 trace("%s",__FUNCTION__);
src/java/plugin.cc
@@ -70,6 +70,8 @@ @@ -70,6 +70,8 @@
70 70
71 /*--[ Plugin session object ]--------------------------------------------------------------------------------*/ 71 /*--[ Plugin session object ]--------------------------------------------------------------------------------*/
72 72
  73 + using namespace std;
  74 +
73 class plugin : public PW3270_NAMESPACE::session 75 class plugin : public PW3270_NAMESPACE::session
74 { 76 {
75 private: 77 private:
@@ -325,7 +327,7 @@ @@ -325,7 +327,7 @@
325 327
326 extern "C" { 328 extern "C" {
327 329
328 - session * factory(const char *name) { 330 + PW3270_NAMESPACE::session * factory(const char *name) {
329 debug("---> %s",__FUNCTION__); 331 debug("---> %s",__FUNCTION__);
330 return new plugin(lib3270_get_default_session_handle()); 332 return new plugin(lib3270_get_default_session_handle());
331 } 333 }
src/java/private.h
@@ -37,14 +37,47 @@ @@ -37,14 +37,47 @@
37 #include <jni.h> 37 #include <jni.h>
38 #include <pw3270/class.h> 38 #include <pw3270/class.h>
39 39
40 - using namespace PW3270_NAMESPACE; 40 + #include <malloc.h>
  41 + #include <libintl.h>
41 42
42 - PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj); 43 +#ifdef PW3270_PLUGIN
  44 + #include <glib/gi18n.h>
  45 + #include <gtk/gtk.h>
  46 +#endif // PW3270_PLUGIN
  47 +
  48 + namespace PW3270_NAMESPACE {
  49 +
  50 + namespace java {
  51 +
  52 + extern JavaVM * jvm;
  53 + extern JNIEnv * env;
  54 +
  55 + void set_factory(PW3270_NAMESPACE::session * (*factory)(const char *name));
  56 +
  57 + PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj);
  58 + jfieldID getHandleField(JNIEnv *env, jobject obj);
  59 +
  60 + void lock();
  61 + void unlock();
  62 + bool trylock();
  63 +
  64 +#ifdef PW3270_PLUGIN
  65 + void call(GtkWidget *widget, const char *filename);
  66 + void failed(GtkWidget *widget, const char *msg, const char *format, ...);
  67 +#endif // PW3270_PLUGIN
  68 +
  69 +
  70 +
  71 +
  72 + }
  73 +
  74 +
  75 + }
43 76
44 extern "C" { 77 extern "C" {
45 78
46 - LIB3270_EXPORT void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name));  
47 - extern session * factory(const char *name); 79 + LIB3270_EXPORT void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name));
  80 + extern PW3270_NAMESPACE::session * factory(const char *name);
48 81
49 } 82 }
50 83
src/java/startstop.cc
@@ -48,11 +48,6 @@ @@ -48,11 +48,6 @@
48 48
49 #include "private.h" 49 #include "private.h"
50 50
51 - #include <malloc.h>  
52 - #include <libintl.h>  
53 - #include <glib/gi18n.h>  
54 - #include <gtk/gtk.h>  
55 -  
56 #include <pw3270.h> 51 #include <pw3270.h>
57 #include <pw3270/plugin.h> 52 #include <pw3270/plugin.h>
58 #include <pw3270/v3270.h> 53 #include <pw3270/v3270.h>
@@ -68,21 +63,15 @@ @@ -68,21 +63,15 @@
68 #if GTK_CHECK_VERSION(2,32,0) 63 #if GTK_CHECK_VERSION(2,32,0)
69 static GMutex mutex; 64 static GMutex mutex;
70 65
71 - #define trylock() g_mutex_trylock(&mutex)  
72 - #define lock() g_mutex_lock(&mutex)  
73 - #define unlock() g_mutex_unlock(&mutex)  
74 -  
75 #else 66 #else
76 static GStaticMutex mutex = G_STATIC_MUTEX_INIT; 67 static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
77 68
78 - #define trylock() g_static_mutex_trylock(&mutex)  
79 - #define lock() g_static_mutex_lock(&mutex)  
80 - #define unlock() g_static_mutex_unlock(&mutex)  
81 -  
82 #endif // GTK_CHECK_VERSION 69 #endif // GTK_CHECK_VERSION
83 70
84 /*---[ Implement ]----------------------------------------------------------------------------------*/ 71 /*---[ Implement ]----------------------------------------------------------------------------------*/
85 72
  73 +using namespace PW3270_NAMESPACE::java;
  74 +
86 extern "C" { 75 extern "C" {
87 76
88 static void trace_cleanup(GtkWidget *widget, GtkWidget **window) { 77 static void trace_cleanup(GtkWidget *widget, GtkWidget **window) {
@@ -123,118 +112,8 @@ extern &quot;C&quot; { @@ -123,118 +112,8 @@ extern &quot;C&quot; {
123 return 0; 112 return 0;
124 } 113 }
125 114
126 -}  
127 -  
128 -#ifdef _WIN32  
129 - /*  
130 - * Dynamically load jvm to avoid naming and path problems  
131 - *  
132 - */  
133 - static void load_jvm(GtkWidget *widget, HMODULE &hModule) {  
134 -  
135 - // Dynamically load jvm library to avoid naming and path problems.  
136 - HMODULE kernel;  
137 - HANDLE WINAPI (*AddDllDirectory)(PCWSTR NewDirectory);  
138 - BOOL WINAPI (*RemoveDllDirectory)(HANDLE Cookie);  
139 -  
140 - struct _dlldir {  
141 - const gchar * env;  
142 - const gchar * path;  
143 - HANDLE cookie;  
144 - } dlldir[] = {  
145 - { "JRE_HOME", "bin\\client", 0 },  
146 - { "JDK_HOME", "jre\\bin\\client", 0 }  
147 - };  
148 -  
149 - kernel = LoadLibrary("kernel32.dll");  
150 -  
151 - debug("---[ %s ]---------------------------------------------------",__FUNCTION__);  
152 -  
153 - AddDllDirectory = (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory");  
154 - if(AddDllDirectory) {  
155 -  
156 - // Acrescenta mais caminhos para achar a dll  
157 - for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {  
158 -  
159 - const char *env = getenv(dlldir[f].env);  
160 -  
161 - debug("%s=\"%s\"",dlldir[f].env,env);  
162 -  
163 - if(env) {  
164 -  
165 - gchar *p = g_build_filename(env,dlldir[f].path,NULL);  
166 -  
167 - debug("Adicionando diretório \"%s\"",p);  
168 -  
169 - wchar_t *path = (wchar_t *) malloc(4096*sizeof(wchar_t));  
170 - mbstowcs(path, p, 4095);  
171 - dlldir[f].cookie = AddDllDirectory(path);  
172 - free(path);  
173 -  
174 - g_free(p);  
175 -  
176 - }  
177 - }  
178 -  
179 - }  
180 -#ifdef DEBUG  
181 - else {  
182 - debug("Can't get %s: %s","AddDllDirectory",session::win32_strerror(GetLastError()).c_str())  
183 - }  
184 -#endif // DEBUG  
185 -  
186 - hModule = LoadLibrary("jvm.dll");  
187 -  
188 - debug("hModule=%08lx",(long) hModule);  
189 -  
190 - if(!hModule) {  
191 -  
192 - DWORD err = GetLastError();  
193 -  
194 - debug("%s",session::win32_strerror(err).c_str());  
195 -  
196 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
197 - GTK_DIALOG_DESTROY_WITH_PARENT,  
198 - GTK_MESSAGE_ERROR,  
199 - GTK_BUTTONS_CANCEL,  
200 - "%s", _( "Can't load java virtual machine" ) );  
201 -  
202 - gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM error" ));  
203 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s", session::win32_strerror(err).c_str());  
204 -  
205 - gtk_dialog_run(GTK_DIALOG (dialog));  
206 - gtk_widget_destroy(dialog);  
207 -  
208 - }  
209 -  
210 - // Libera caminhos extras.  
211 - RemoveDllDirectory = (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory");  
212 - if(RemoveDllDirectory) {  
213 -  
214 - for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) {  
215 -  
216 - if(dlldir[f].cookie) {  
217 -  
218 - RemoveDllDirectory(dlldir[f].cookie);  
219 -  
220 - }  
221 - }  
222 -  
223 - }  
224 -#ifdef DEBUG  
225 - else {  
226 - debug("Can't get %s: %s","RemoveDllDirectory",session::win32_strerror(GetLastError()).c_str())  
227 - }  
228 -#endif // DEBUG  
229 -  
230 - FreeLibrary(kernel);  
231 -  
232 } 115 }
233 116
234 -  
235 -#endif // _WIN32  
236 -  
237 -  
238 LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) 117 LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window)
239 { 118 {
240 trace("JAVA: %s",__FUNCTION__); 119 trace("JAVA: %s",__FUNCTION__);
@@ -247,292 +126,23 @@ extern &quot;C&quot; { @@ -247,292 +126,23 @@ extern &quot;C&quot; {
247 126
248 LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window) 127 LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window)
249 { 128 {
250 -#if GTK_CHECK_VERSION(2,32,0)  
251 - g_mutex_clear(&mutex);  
252 -#endif // GTK_CHECK_VERSION  
253 - trace("JAVA: %s",__FUNCTION__);  
254 - return 0;  
255 - }  
256 -  
257 -extern "C"  
258 -{  
259 -  
260 - void call_java_program(GtkAction *action, GtkWidget *widget, const gchar *filename)  
261 - { 129 + lock();
262 130
263 - if(!trylock()) {  
264 -  
265 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
266 - GTK_DIALOG_DESTROY_WITH_PARENT,  
267 - GTK_MESSAGE_ERROR,  
268 - GTK_BUTTONS_CANCEL,  
269 - _( "Can't start %s program" ), "java" );  
270 -  
271 - gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM busy" ));  
272 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "%s interpreter is busy" ), "java");  
273 -  
274 - gtk_dialog_run(GTK_DIALOG (dialog));  
275 - gtk_widget_destroy(dialog);  
276 -  
277 - return; 131 + if(jvm) {
  132 + jvm->DestroyJavaVM();
  133 + jvm = NULL;
278 } 134 }
279 135
280 - v3270_set_script(widget,'J',TRUE);  
281 -  
282 -#ifdef _WIN32  
283 -  
284 - HMODULE hJVM = 0;  
285 -  
286 - load_jvm(widget,hJVM);  
287 -  
288 - debug("hJVM=%p",hJVM);  
289 -  
290 - if(!hJVM) {  
291 - v3270_set_script(widget,'J',FALSE); 136 + unlock();
292 137
293 #if GTK_CHECK_VERSION(2,32,0) 138 #if GTK_CHECK_VERSION(2,32,0)
294 - g_mutex_unlock(&mutex);  
295 -#else  
296 - g_static_mutex_unlock(&mutex); 139 + g_mutex_clear(&mutex);
297 #endif // GTK_CHECK_VERSION 140 #endif // GTK_CHECK_VERSION
  141 + trace("JAVA: %s",__FUNCTION__);
298 142
299 - return;  
300 -  
301 - }  
302 -  
303 -#endif // _WIN32  
304 -  
305 - debug("%s",__FUNCTION__);  
306 -  
307 - // Start JNI  
308 - JavaVMInitArgs vm_args;  
309 - JavaVMOption options[5];  
310 -  
311 - JavaVM * jvm = NULL;  
312 - JNIEnv * env = NULL;  
313 - jint rc = 0;  
314 -  
315 - memset(&vm_args,0,sizeof(vm_args));  
316 - memset(options,0,sizeof(options));  
317 -  
318 - vm_args.version = JNI_VERSION_1_4;  
319 - vm_args.nOptions = 0;  
320 - vm_args.options = options;  
321 - vm_args.ignoreUnrecognized = JNI_FALSE;  
322 -  
323 - options[vm_args.nOptions].optionString = g_strdup("vfprintf");  
324 - options[vm_args.nOptions].extraInfo = (void *) jni_vfprintf;  
325 - vm_args.nOptions++;  
326 -  
327 -//#ifdef DEBUG  
328 -// options[vm_args.nOptions++].optionString = g_strdup("-verbose");  
329 -//#endif  
330 -  
331 - gchar * dirname = g_path_get_dirname(filename);  
332 -  
333 - debug("Dirname=%s",dirname);  
334 -  
335 -#if defined( WIN32 )  
336 -  
337 - gchar * exports = NULL;  
338 - char buffer[1024];  
339 - gchar * myDir;  
340 -  
341 - if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) {  
342 -  
343 - gchar * ptr = strrchr(buffer,G_DIR_SEPARATOR);  
344 - if(ptr) {  
345 - *ptr = 0;  
346 - myDir = g_strdup(buffer);  
347 - } else {  
348 - myDir = g_strdup(".");  
349 - }  
350 -  
351 -  
352 - } else {  
353 -  
354 - myDir = g_strdup(".");  
355 -  
356 - }  
357 -  
358 - debug("myDir=%s",myDir);  
359 -  
360 - exports = g_build_filename(myDir,"jvm-exports",NULL);  
361 - g_mkdir_with_parents(exports,0777);  
362 -  
363 - lib3270_trace_event(v3270_get_session(widget),"java.class.path=%s;%s",dirname,exports);  
364 - lib3270_trace_event(v3270_get_session(widget),"java.library.path=%s",myDir);  
365 -  
366 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",myDir);  
367 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s;%s",dirname,exports);  
368 -  
369 - g_free(myDir);  
370 - g_free(exports);  
371 -  
372 - // Windows, first find the method, then call it.  
373 - jint JNICALL (*CreateJavaVM)(JavaVM **, void **, void *) = (jint JNICALL (*)(JavaVM **, void **, void *)) GetProcAddress(hJVM,"JNI_CreateJavaVM");  
374 -  
375 - if(!CreateJavaVM) {  
376 - rc = ENOENT;  
377 - } else {  
378 - debug("Calling %s","CreateJavaVM");  
379 - rc = CreateJavaVM(&jvm,(void **)&env,&vm_args);  
380 - debug("%s exits with rc=%d","CreateJavaVM",rc);  
381 - }  
382 -  
383 -#else  
384 -  
385 -#if defined(DEBUG)  
386 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s:.bin/Debug:.bin/Debug/lib",JNIDIR);  
387 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s:%s:./src/java/.bin/java",JARDIR,dirname);  
388 -#else  
389 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",JNIDIR);  
390 - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s:%s",JARDIR,dirname);  
391 -#endif // JNIDIR  
392 -  
393 - // Linux, just create JVM  
394 - rc = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args);  
395 -  
396 -#endif // _WIn32  
397 -  
398 - debug("JNI_CreateJavaVM exits with rc=%d",rc);  
399 -  
400 - g_free(dirname);  
401 -  
402 -  
403 - // Release options  
404 - for(int f=0;f<vm_args.nOptions;f++) {  
405 - trace("Releasing option %d: %s",f,options[f].optionString);  
406 - g_free(options[f].optionString);  
407 - }  
408 -  
409 - if(rc < 0) {  
410 -  
411 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
412 - GTK_DIALOG_DESTROY_WITH_PARENT,  
413 - GTK_MESSAGE_ERROR,  
414 - GTK_BUTTONS_CANCEL,  
415 - "%s", _( "Can't create java VM" ));  
416 -  
417 - gtk_window_set_title(GTK_WINDOW(dialog), _( "Script startup failure" ));  
418 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "The error code was %d" ), (int) rc);  
419 -  
420 - gtk_dialog_run(GTK_DIALOG (dialog));  
421 - gtk_widget_destroy(dialog);  
422 -  
423 - } else {  
424 -  
425 - gchar * classname = g_path_get_basename(filename);  
426 -  
427 - gchar * ptr = strchr(classname,'.');  
428 - if(ptr) {  
429 - *ptr = 0;  
430 - }  
431 -  
432 - jclass cls = env->FindClass(classname);  
433 -  
434 - if(cls == 0) {  
435 -  
436 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
437 - GTK_DIALOG_DESTROY_WITH_PARENT,  
438 - GTK_MESSAGE_ERROR,  
439 - GTK_BUTTONS_CANCEL,  
440 - _( "Can't find class %s" ), classname );  
441 -  
442 - gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));  
443 - if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)  
444 - gtk_main_quit();  
445 - gtk_widget_destroy(dialog);  
446 -  
447 - } else {  
448 -  
449 - jmethodID mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");  
450 -  
451 - if(mid == 0) {  
452 -  
453 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
454 - GTK_DIALOG_DESTROY_WITH_PARENT,  
455 - GTK_MESSAGE_ERROR,  
456 - GTK_BUTTONS_OK_CANCEL,  
457 - _( "Can't find class \"%s\"" ), classname );  
458 -  
459 - gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));  
460 -  
461 - if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)  
462 - gtk_main_quit();  
463 - gtk_widget_destroy(dialog);  
464 -  
465 - } else {  
466 -  
467 - jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF(""));  
468 -  
469 - try {  
470 -  
471 - debug("%s: Calling CallStaticVoidMethod()",__FUNCTION__);  
472 - env->CallStaticVoidMethod(cls, mid, args);  
473 - debug("%s: CallStaticVoidMethod() has returned",__FUNCTION__);  
474 -  
475 - jthrowable exc = env->ExceptionOccurred();  
476 - env->ExceptionClear();  
477 -  
478 - if (exc) {  
479 - jclass throwable_class = env->FindClass("java/lang/Throwable");  
480 -  
481 - jmethodID jni_getMessage = env->GetMethodID(throwable_class,"getMessage","()Ljava/lang/String;");  
482 - jstring j_msg = (jstring) env->CallObjectMethod(exc,jni_getMessage);  
483 -  
484 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
485 - GTK_DIALOG_DESTROY_WITH_PARENT,  
486 - GTK_MESSAGE_ERROR,  
487 - GTK_BUTTONS_OK_CANCEL,  
488 - _( "Java application \"%s\" has failed." ), classname );  
489 -  
490 - gtk_window_set_title(GTK_WINDOW(dialog), _( "Java failure" ));  
491 -  
492 - if(!env->IsSameObject(j_msg,NULL)) {  
493 -  
494 - const char * msg = env->GetStringUTFChars(j_msg, 0);  
495 -  
496 - debug("jni_getMessage = %s",msg);  
497 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg);  
498 -  
499 - env->ReleaseStringUTFChars( j_msg, msg);  
500 - }  
501 -  
502 - if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)  
503 - gtk_main_quit();  
504 - gtk_widget_destroy(dialog);  
505 -  
506 -  
507 - }  
508 -  
509 - } catch(std::exception &e) {  
510 -  
511 - debug("Java error: %s",e.what());  
512 - trace("%s",e.what());  
513 - }  
514 -  
515 -  
516 - }  
517 -  
518 - }  
519 -  
520 - g_free(classname);  
521 -  
522 - rc = jvm->DestroyJavaVM();  
523 - debug("DestroyJavaVM=%d",(int) rc);  
524 - }  
525 -  
526 -#ifdef _WIN32  
527 - if(hJVM)  
528 - FreeLibrary(hJVM);  
529 -#endif // _WIN32  
530 -  
531 - // And release  
532 - v3270_set_script(widget,'J',FALSE);  
533 143
534 - unlock();  
535 144
  145 + return 0;
536 } 146 }
537 147
538 LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget) 148 LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget)
@@ -544,7 +154,7 @@ extern &quot;C&quot; @@ -544,7 +154,7 @@ extern &quot;C&quot;
544 if(filename) 154 if(filename)
545 { 155 {
546 // Has filename, call it directly 156 // Has filename, call it directly
547 - call_java_program(action,widget,filename); 157 + call(widget,filename);
548 } 158 }
549 else 159 else
550 { 160 {
@@ -574,7 +184,7 @@ extern &quot;C&quot; @@ -574,7 +184,7 @@ extern &quot;C&quot;
574 184
575 if(filename) 185 if(filename)
576 { 186 {
577 - call_java_program(action,widget,filename); 187 + call(widget,filename);
578 g_free(filename); 188 g_free(filename);
579 } 189 }
580 190
@@ -583,5 +193,35 @@ extern &quot;C&quot; @@ -583,5 +193,35 @@ extern &quot;C&quot;
583 193
584 } 194 }
585 195
586 -} 196 + namespace PW3270_NAMESPACE {
  197 +
  198 + JavaVM * java::jvm = NULL;
  199 + JNIEnv * java::env = NULL;
  200 +
  201 + void java::lock() {
  202 +#if GTK_CHECK_VERSION(2,32,0)
  203 + g_mutex_lock(&mutex);
  204 +#else
  205 + g_static_mutex_lock(&mutex);
  206 +#endif // GTK_CHECK_VERSION
  207 + }
  208 +
  209 + void java::unlock() {
  210 +#if GTK_CHECK_VERSION(2,32,0)
  211 + g_mutex_unlock(&mutex);
  212 +#else
  213 + g_static_mutex_unlock(&mutex);
  214 +#endif // GTK_CHECK_VERSION
  215 + }
  216 +
  217 + bool java::trylock() {
  218 +#if GTK_CHECK_VERSION(2,32,0)
  219 + return g_mutex_trylock(&mutex);
  220 +#else
  221 + return g_static_mutex_trylock(&mutex);
  222 +#endif // GTK_CHECK_VERSION
  223 + }
  224 +
  225 + }
  226 +
587 227