02
Sat, Nov
2 New Articles

TOP TIPS: JAVA September 1998

Java
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Give the Java Classpath Plenty of Environment Space

Some Java applications require rather lengthy additions to the CLASSPATH environment variable when executing those applications from a DOS window. For instance, if you are using IBM's Java Toolbox for the AS/400, you have to add your PC's location of the jt400.jar or jt400.zip files to your CLASSPATH, and, if you start to use Java's JFC Swing library, you'll have to add the path for the swingall.jar file. You can make these additions easily with the DOS batch commands shown in Figure 1.

But when you start to add more and more Java zip and jar files to your CLASSPATH environment variable, you may experience the DOS "Out of environment space" error. So, how do you increase your PC's environment space?

To permanently increase environment space, add the following line to your CONFIG.SYS file, and then restart your system:

shell=command.com /e:8192 /p

— Don Denoncourt Senior Technical Editor Midrange Computing

Don't Let Main Do the Driving

When you first start to program in Java, you learn to code a function called main. The main function of a class is automatically invoked by the Java runtime environment.

Most RPG programmers who learn Java use the main function like the main routine of an RPG program. But the main function is not the best place to put your driver code. Consider the Java application in Figure 2.

This class seems to make sense, but you get the following compile errors:
• Cannot make a static reference to a nonstatic field in class JavaApplication
• Cannot make a static reference to the instance method named doStuff for class JavaApplication.

The reason for these errors is that object fields and functions are different from class fields and functions. A class field or function is qualified with the Java keyword static. The main function is a good example. It's static, which means it can only operate on

fields declared as static and invoke functions declared as static. Static fields are considered class fields because there is never more than one instance of those variables for a class, no matter how many objects of that class type are instantiated (created).

Nonstatic fields are considered object fields because there are separate instances of those fields for every object instantiated from that class. Static class functions can be invoked without having an object instance of that class. The only restriction on static functions is that they can operate only on static fields—hence the term class function.

Nonstatic fields and functions are considered object fields and functions because there is a unique instance of them for every object created of that class type. Using main as a driver function works fine if you make all of your other functions static and use local variables or static class fields, but that is not object-oriented programming. You'd be better off using Visual Basic.

The main function should be used only to bootstrap or jumpstart a class by having it instantiate itself. Then, whatever driver code the application requires goes in the class's constructor function. I've illustrated this in Figure 3.

— Don Denoncourt Senior Technical Editor Midrange Computing

Improve the Performance of IFSFileInputStream and IFSFileOutputStream

The AS/400 Toolbox for Java provides classes for accessing files in the integrated file system of the AS/400. IFSFileInputStream reads data from a file, and IFSFileOutputStream writes data to a file. These files do not buffer or cache data; they access the AS/400 when they receive a request to read or write data. If your application does file IO many times or in small chunks, performance will suffer.

Fortunately, these Toolbox classes were designed to improve performance via the Java buffering technology. IFSFileInputStream extends java.io.InputStream. IFSFileOutputStream extends java.io.OutputStream. Java classes that improve the performance of java.io.InputStream and java.io.OutputStream can also be used with IFSFileInputStream and IFSFileOutputStream.

For example, the program in Figure 4 accesses data in a file on the AS/400 via the IFSFileInputStream and IFSFileOutputStream classes of the Toolbox. In the first case, it uses a BufferedInputStream class to cache data. In the second case, it accesses data directly via a call to the Toolbox class. Performance is greatly improved when reading and writing data through buffers.

— David Wall IBM Rochester

More Error Information from the AS/400 Toolbox for Java JDBC Driver

By default, the AS/400 Toolbox for Java JDBC driver returns only first-level text for error messages. If you want more information about errors, add ;errors=full to the URL you use for connecting to the database. This addition tells the driver to return both first- and second-level text for error messages.

— Clifton M. Nock IBM Rochester

Trace a JDBC Program with the AS/400 Toolbox for Java JDBC Driver

When debugging a Java application or applet that uses JDBC, it can be helpful to examine a trace of what the JDBC driver is doing. With the AS/400 Toolbox for Java JDBC driver, the trace will show a lot of information, including full-stack traces for any errors that occur and summaries of which SQL statements are prepared and executed, what results are returned, and when various resources are opened and closed.

There are two ways to turn on tracing. In the Java program itself, the code in Figure 5 will tell the JDBC driver manager to dump trace information to the standard output device. If you do not have access to the source code of the JDBC application or applet, add ;trace=true to the URL that you use for connecting to the database.

— Clifton M. Nock IBM Rochester

SET CLASSPATH=%classpath%;C:jt400libjt400.jar
SET CLASSPATH=%classpath%;C:swingswingall.jar public class JavaApplication {
int field;
public static void main(String argv[]) {

field = 1;

doStuff();
}

private void doStuff() {
field++; public class JavaApplication {
int field;
public static void main(String argv[]) {

new JavaApplication ();
}

public JavaApplication() {

field = 1;

doStuff();
}

private void doStuff() {
field++; import java.io.*;
import java.util.*;
import java.math.*;
import com.ibm.as400.access.*;

public class readfile2 extends Object
{

public static void main(String[] args)

{

System.out.println(" ");

System.out.println("Starting application");

System.out.println(" ");

try

Figure 1: Setting the Java classpath environment variable

Figure 2: The main function drives the program

Figure 3: The main function jumpstarts the class

{

AS400 system = new AS400();

int loopCount = 5000;

System.out.println("writing to file - cached");

IFSFileOutputStream outFileIFS = new IFSFileOutputStream(system,

"/daw/a.a");

BufferedOutputStream outputFile = new BufferedOutputStream(outFileIFS, 1024);

byte data = 0;

long timeStart = System.currentTimeMillis();

for (int i = 0; i < loopCount; i++)

{

outputFile.write(data);

}

outputFile.flush();

System.out.println(" Write time: " + (System.currentTimeMillis()timeStart));

System.out.println("reading from file - cached");

timeStart = System.currentTimeMillis();

IFSFileInputStream inFileIFS = new IFSFileInputStream(system, "/daw/a.a");

BufferedInputStream inputFile = new BufferedInputStream(inFileIFS, 1024);

for (int i = 0; i < loopCount; i++)

{

data = (byte) inputFile.read();

}

System.out.println(" Read time: " + (System.currentTimeMillis() -timeStart));

System.out.println("");

System.out.println("writing to file - no cache");

IFSFileOutputStream outFileIFS2 = new IFSFileOutputStream(system, "/daw/a.a2");

timeStart = System.currentTimeMillis();

for (int i=0; i < loopCount; i++)

{

outFileIFS2.write(data);

}

outFileIFS2.flush();

System.out.println(" Write time: " + (System.currentTimeMillis() - timeStart));

System.out.println("reading from file - no cache");

timeStart = System.currentTimeMillis();

IFSFileInputStream inFileIFS2 = new IFSFileInputStream(system, "/daw/a.a2");

for (int i = 0; i < loopCount; i++)

{

data = (byte) inFileIFS2.read();

}

System.out.println(" Read time: " + ( System.currentTimeMillis() - timeStart));

}

catch (Exception e) { System.out.println(e);}

System.exit(0);

}

}

DriverManager.setLogStream ( System.out);

Figure 4: Access data in a file on the AS/400 via IFSFileInputStream and IFSFileOutputStream

Figure 5: Turning on tracing in a Java program

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: