|
The all-important link between the JVM, and the native method you are
trying to call, is the name of the native method. The name exported by
your service program must exactly match the name expected by the JVM, or
you'll get one of these call-time (as opposed to load-time)
UnsatisfiedLinkError things thrown at you.
Again, the name that is "manufactured" by the JVM (the caller side) must
match *exactly* the name that is exported from MYSRVPGM (the callee).
To see the name that Java will manufacture
Start a QSH session and type
javah -jni fully.qualified.class.name
...where 'fully.qualified.class.name' is the name of your class (withOUT
the '.class' on the end.) Presuming all goes well, this will create a
file in the current directory called fully_qualified_class_name.h that
includes the "name" that the JVM will be using to get to the native
method.
For instance,
javah -jni java.lang.String
...results in the file java_lang_String.h
Now, java.lang.String does specify a native method, "intern()" and the
section of this header file describing it looks like:
/*
* Class: java_lang_String
* Method: intern
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_java_lang_String_intern
(JNIEnv *, jobject);
The all-important part is the part after JNICALL -- the
Java_java_lang_String_intern -- this is the name a native method library
(a/k/a service program) designed to "handle" this native method has to
export, in order to make the connection.
To see the names exported by MYSRVPGM you can run this command:
DSPSRVPGM SRVPGM(MYSRVPGM) DETAIL(*PROCEXP)
HTH.
-blair
Blair Wyman -- iSeries JVM -- (507) 253-2891
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Think as you work, for in the final analysis, your worth to your
company comes not only in solving problems, but also in
anticipating them." -- Tom Lehrer
Peter.Daransky@am
bos.at
Sent by: To
java400-l-bounces Java Programming on and around the
@midrange.com iSeries / AS400
<java400-l@xxxxxxxxxxxx>
cc
03/12/2004 06:12
AM Subject
JNI Problem
Please respond to
Java Programming
on and around the
iSeries / AS400
Hi,
i've a little problem to start JNI Program on OS/400 (V5R2). I've wroted
small Java program wich should call a native function from ServiceProgram
...
The code is very simple and stage "static {
System.loadLibrary("MYSRVPGM"); }" seems to me thath works ok ! Also no
errors !?
But if i call the native function i'll always got a
java.lang.UnsatisfiedLinkError() ... and i've tryed all possibilities with
variables like -Djava.library.path etc., everything what i found in manual
...
Has someone any idea ?
Regards
Peter Daransky
AMBOS EDV-Beratungs GesmbH
Dauphinestr. 44
A-4020 LINZ Austria
Tel: +43-732-312919-0
Fax: +43-732-312919-20
e-mail: Peter.Daransky@xxxxxxxx
Homepage: http://www.ambos.at
_______________________________________________
This is the Java Programming on and around the iSeries / AS400 (JAVA400-L)
mailing list
To post a message email: JAVA400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/java400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.