Re: Problem with JNI and Tomcat
Gordon Beaton was thinking very hard :
On Tue, 10 Apr 2007 10:53:51 +0200, Elvandar wrote:
Java_it_ribes_serialDriver_SerialPort_nativeOpenPort (JNIEnv *env, jobject
jobj, jstring port)
{
LPSERIALPORT SerialPort = (LPSERIALPORT)malloc(sizeof(SERIALPORT));
The above can't be right... SerialPort is local to this method and not
stored elsewhere. How do you expect to find it later? Please post
*real* code.
Sorry, I cleaned up a bit the code I posted because the function was
too long, and I suppose I deleted a too much :P. In nativeOpenPort
there was also the instruction "AddSerialPort(SerialPort);" that adds
the object to a list of the current opened ports (see below), and
retrieved in the notifyEvent method with the SearchSerialPort function.
void AddSerialPort(LPSERIALPORT SerialPort)
{
LPPORTLIST newPort = (LPPORTLIST)malloc(sizeof(PORTLIST));
newPort->ComPort = SerialPort;
newPort->Next = openedPorts;
openedPorts = newPort;
}
In your callback method, have you confirmed that SerialPort != NULL,
(see prev), that (javaEvent != 0), etc, i.e. that you actually *reach*
CallVoidMethod()?
Yes
If so, what does CallVoidMethod() return? What do
env->ExceptionOccurred() and env->ExceptionDescribe() say?
The java method sometimes seems to be correctly called (no exceptions
thrown), but the data it retrieves is absolutely incorrect. The problem
is that most of times it is not called, but if I open a serial terminal
all data arrived and bufferized is correctly shown on screen...and if I
run the same DLL in a java standalone app all works correctly, the
problem only happens if I load the DLL under tomcat...
This might also help:
http://groups.google.com/group/comp.lang.java.programmer/msg/511c52ef88a993c9
Seen it. My jar library is located under %CATALINA_HOME%\shared\lib,
and in my tests (just to avoid problems of this kind) I restarted
tomcat every time.
Thanks for your help.