|
Hello again,
at last I broke through all the obstacles on the way and have got a JNI
solution for a java array that is not restricted to n elements in DIM(n)
keyword.
Thank you very much for the tips & hints!
In the end of the programming I realized an issue that concerns freeing
unused java objects. Here are a couple of my code snippets:
....
D getOudesc...
d PR like(jstring)
d extproc(*JAVA:
d Dapi_RSrow01_ifc:
d 'getOudesc')
D getBytes PR 50A varying
d extproc(*JAVA:
d 'java.lang.String':
d 'getBytes')
....
if not %error;
RSRows = CallObjectMethodA ( JNIEnv_P
: DapiGetCustomerAccountsImpl
: jmethodID
: jargs );
nRSRows = GetArrayLength ( JNIEnv_P
: RSRows );
else;
nRSRows = 0;
endif;
if nRSRows > 0;
// fill in the subfile:
for iRSRows = 0 to nRSRows - 1;
jobject = GetObjectArrayElement ( JNIEnv_P
: RSRows
: iRSRows );
OUDESC = getBytes(getOudesc(jobject)) ; // <<<< the issue concerns
this line
.....
OUDESC is an output CHAR field declared in a display DDS source.
What I am affraid of is if java or something else frees a temporary String
object that getOudesc method creates and passes to getBytes method.
Actually, it is not a problem in this testing programme, the snippets come
from, but I am going to use these methods and the attested solutions in
batch programmes in which they (and others) will be called on really large
scale. I want to avoid some memory problems in advance.
Best regards
OS
PS: the provider of the java classes has promissed to deliver additional
methods for java arrays so that using JNI methods would not be neccesary any
more (as Barbara suggested earlier); the issue I have described exists
regardless of the approach I finally will use (JNI or the application
methods).
-----Original Message-----
From: Barbara Morris [mailto:bmorris@xxxxxxxxxx]
Sent: Tuesday, April 13, 2004 8:30 PM
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Java array in ILE RPG
"Steffan, Otto (GE Consumer Finance)" wrote:
>
> Hello,
>
> I have to agree that really the JNI solution "is not the easiest soluton"
as
> Michael stated in his prior mail.
>
> I am going to call a CallObjectMethodA JNI method and finding that the job
> is much more complex than I anticipated before :-(.
> Please can someone check my following lines to assure me that I am on the
> right track? we have V5R2
>
It looks to me like you are on the right track. Dealing with the
parameters to the method is even more fun ...
I know you've already said your reasons for doing it this way, but I
have to repeat that a very slight modification to the Java class would
make this problem go away. Since a Java array of anything is also an
Object, they would just have to define another method that returns the
array as a single object. Then you could use the array JNI functions on
the returned array object without having to mess around with the call
functions.
Object[] meth2(String x, int i) // this is the real method
{
return whatever;
}
Object meth2(String x, int i) // code the same parameters as the
"real" method
{
return meth(x, i); // call through to the real method
}
_______________________________________________
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-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.