× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: RE: FW: record-level access
  • From: dawall@xxxxxxxxxx
  • Date: Wed, 17 May 2000 12:16:21 -0500

Like all JVMs, one way the AS/400 runs a Java program is interpretively.
As the program is runs it reads the byte codes from the .class files,
converts them to AS/400 instructions, then runs the instruction.  On the
AS/400 this is painfully slow (unusable in most cases).  The AS/400 has two
ways to improve performance.

     JIT (just in time) compile.  With a JIT one thread is converting the
     byte codes to native instructions ahead of the thread that is running
     the instructions.  The JIT also optimizes as it converts.  The goal is
     to always have converted instructions ready to go and to optimize such
     that performance is better.  All JVMs use JITs to improve performance.
     On the AS/40, JITs are getting better all the time but are not as good
     as choice 2 that follows.

     Associated Java Program.  The AS/400 has an additional option.  AS/400
     command CRTJVAPGM will convert the byte codes to AS/400 instructions
     then save the instructions (in interpreted or JIT, the instructions
     are thrown away so they must be re-converted every time).  The user
     can also specify a level of optimization to perform as the byte codes
     are converted.  Now when the java program runs the byte codes are
     already converted so all the JVM has to do is run the instructions.
     The AS/400 instructions are saved in a hidden service program that is
     attached to the .class or .jar file.  The AS/400 does all the
     necessary stuff to manage the hidden program (for example, it throws
     it away when the .class, .zip, or .jar file changes).  Use command
     DSPJVAPGM to see the associated java program for a .jar, .zip or
     .class file.

     The AS/400 java program automatically first looks for the associated
     java program.  If it doesn't find one it will do one of (1) run the
     program interpretively, (2) use the JIT or (3) run CRTJVAPGM under the
     covers depending on Java command parameters / properties.

     To make Java perform, all java code should have an associated java
     program.  Your program and class libraries (such as the Toolbox)
     should have associated java programs.

So, do a dspjvapgm on the Toolbox container (.zip or .jar) you use.  If you
don't see one create it (at optimization level 30).  You won't believe the
performance difference.

David Wall
553-5329
AS/400 Toolbox for Java


Pascal Bellerose <pascal.bellerose@progisys.com> on 05/17/2000 10:20:31 AM

Please respond to JAVA400-L@midrange.com

To:   "'JAVA400-L@midrange.com'" <JAVA400-L@midrange.com>
cc:
Subject:  RE: FW: record-level access




To David Wall,

     You were talking about the fact that the toolbox container used in
the program must be asociated to a Java program.  What do you mean by an
associated java program?  what kind of program? and how could I associate
this program to my jt400.jar?

Thanx!

Pascal Bellerose
Progisys inc.
Quebec, (Quebec, Canada)



-----Message d'origine-----
De : dawall@us.ibm.com [mailto:dawall@us.ibm.com]
Envoye : mercredi 17 mai 2000 10:57
A : JAVA400-L@midrange.com
Objet : Re: FW: record-level access


>> CLASSPATH=/QIBM/ProdData/Java400/lib/jdkptf.zip:
>> /QIBM/ProdData/Java400/lib/java.zip:
>> /QIBM/ProdData/Java400/lib/sun.zip:
>> /QIBM/ProdData/Java400/com/ibm/db2/jdbc/app/db2_classes.zip:
>> /QIBM/ProdData/Java400/:
>> /myjava

Your classpath does not include the Toolbox access classes.  Add
"/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar" to your classpath
and you should be set.  There are a couple of ways to do this.  In
your example you use the -classpath parm of the Java command.  You
can change that to
   "java -classpath /myjava:/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar
ShowMeClas"
or setup up the CLASSPATH environment variable once in QSHELL by entering
command
"export -s CLASSPATH=
/myjava:/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar"


Since you talk about QSHELL you must be running on the AS/400.  Make sure
the Toolbox container you use (jt400.jar or jt400Access.zip) has an
associated
Java program.

David Wall
AS/400 Toolbox for Java


"Cummings, Wanda" <Cummings@AE.com> on 05/17/2000 08:29:37 AM

Please respond to JAVA400-L@midrange.com

To:   "'java400-l@midrange.com'" <java400-l@midrange.com>
cc:
Subject:  FW: record-level access






> -----Original Message-----
> From:   Cummings, Wanda
> Sent:   Tuesday, May 16, 2000 4:22 PM
> To:     'java-l@midrange.com'
> Subject:     record-level access
>
> i have tried,for days, solving this myself, but i am convinced i need
> help.
>
> i am trying to learn java on the as400. our manager wants us to read an
> as400 PF and write a simple listing.
> he wants us to try with record-level first (DDM), than move up to JDBC
>
> classpath shown in QSH
>
>
> $
>
> java -classpath /myjava ShowMeClas
>
>
CLASSPATH=/QIBM/ProdData/Java400/lib/jdkptf.zip:/QIBM/ProdData/Java400/lib
> /j
> ava.zip:/QIBM/ProdData/Java400/lib/sun.zip:/QIBM/Prod
>
Data/Java400/com/ibm/db2/jdbc/app/db2_classes.zip:/QIBM/ProdData/Java400/:
> /m
> yjava
> $
>
>
> my simple program:
>
>
>  import java.io.*;
>  import java.util.*;
>  import java.math.*;
>  import java.lang.*;
>  import com.ibm.as400.access.*;
>
>  public class ListCust {
>
>     public ListCust() {
>     // Step 1:
>     // Connect to an AS/400
>     AS400 as400 = new AS400();
>
>    // Step 2:
>    // Specify file location
>    KeyedFile myFile =
>       new KeyedFile(as400,
>           "/qsys.lib/examples.lib/custmst.file");
>
>
>  // Step 3:
>  // Retrieve a record format
>  AS400FileRecordDescription myFileDesc =
>     new AS400FileRecordDescription(as400,
>         "/qsys.lib/examples.lib/custmst.file");
>
>  try
>  {
>
>  RecordFormat recFormats[] = myFileDesc.retrieveRecordFormat();
>  myFile.setRecordFormat(recFormats[0]);
>
>  // Step 4:
>  // open the file
>  myFile.open(AS400File.READ_ONLY,
>              0,
>              AS400File.COMMIT_LOCK_LEVEL_NONE);
>
>   // Step 5:
>   // Read a record
>   for (Record record = myFile.readNext();
>          record != null;
>          record = myFile.readNext()) {
>
>   // Step 6:
>   // Retrieve the field values of that record
>   BigDecimal CustnoField =
>          (BigDecimal) record.getField( "CUSNUM" );
>   String NameField =
>          (String) record.getField( "LSTNAM" );
>   System.out.println(NameField + CustnoField);
>   }
>
>   // Close the file
>   myFile.close();
>
>  } catch (Exception e) {
>    System.out.println(
>           "Error occurred listing the file.");
>
>     try
>     {
>       myFile.close();
>     } catch(Exception x) {
>       System.out.println(
>           "Error occurred closing the file.");
>     }
>       System.exit(0);
>     }
>   System.exit(0);
>   }
>
>   public static void main(String[] args)  {
>       ListCust ListCust = new ListCust();
>
>    }
>  }
>
> errors from QSH execution:
>
>
>
>   Loading class java/lang/ThreadDeath.class
>
>   Loading class java/lang/NoSuchMethodError.class
>
>   Loading class java/lang/IncompatibleClassChangeError.class
>
>   Loading class java/lang/LinkageError.class
>
>   Loading class java/lang/OutOfMemoryError.class
>
>   Loading class ListCust.class
>
>   Loading class com/ibm/as400/access/AS400File.class
>
>   Failed to load class file: com/ibm/as400/access/AS400File.class
>
>   Loading class java/lang/NoClassDefFoundError.class
>
>   Loading class java/math/BigDecimal.class
>
>   Loading class com/ibm/as400/access/AS400.class
>
>   Failed to load class file: com/ibm/as400/access/AS400.class
>
>   java.lang.NoClassDefFoundError: com/ibm/as400/access/AS400
>
>         ListCust.<init>()V+4 (ListCust.java:13)
>
>         ListCust.main([Ljava/lang/String;)V+1 (ListCust.java:73)
>
>   $
>
>
>
> Thank you in advance for any help. I am having trouble understanding
> classpath, do i need to change my autoexec.bat to reflect
> QIBM/ProdData/HTTP/Public/jt400?
>
>
+---
| This is the JAVA/400 Mailing List!
| To submit a new message, send your mail to JAVA400-L@midrange.com.
| To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
| To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner: joe@zappie.net
+---



+---
| This is the JAVA/400 Mailing List!
| To submit a new message, send your mail to JAVA400-L@midrange.com.
| To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
| To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner: joe@zappie.net
+---
+---
| This is the JAVA/400 Mailing List!
| To submit a new message, send your mail to JAVA400-L@midrange.com.
| To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
| To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner: joe@zappie.net
+---



+---
| This is the JAVA/400 Mailing List!
| To submit a new message, send your mail to JAVA400-L@midrange.com.
| To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
| To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner: joe@zappie.net
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.