PDA

View Full Version : Erste Schritte mit Java -> package com.ibm.as400.access does not exist??



woki
06-06-06, 09:25
Hallo Forum,

ich versuche mich mit den ersten Java-Testprogrämmchen auf der AS/400.
Ich habe mir das GetConnections.java-Programm aus dem Redbook iSeries: IBM Developer Kit for Java angeschaut und wollte es mal ausprobieren.


import java.sql.*;
import java.util.*;

public class GetConnections {

public static void main(java.lang.String[] args)
{
// Verify Input
if (args.length != 2) {
System.out.println("Usage (CL command line): java GetConnections PARM(<user> <password>)");
System.out.println("where <user> is a valid iSeries user ID");
System.out.println(" and <password> is the password for that user ID");
System.exit(0);
}

//Register both drivers
try {
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
} catch (ClassNotFoundException cnf) {
System.out.println("ERROR: One of the JDBC drivers did not load.");
System.exit(0);
}
try {
// Obtain a connection with each driver.
Connection conn1 = DriverManager.getConnection("jdbc:db2://localhost", args[0], args[1]);
Connection conn2 = DriverManager.getConnection("jdbc:as400://localhost", args[0], args[1]);
// Verify that they are different.
if (conn1 instanceof com.ibm.db2.jdbc.app.DB2Connection)
System.out.println("conn1 is running under the native JDBC driver.");
else
System.out.println("There is something wrong with conn1.");

if (conn2 instanceof com.ibm.as400.access.AS400JDBCConnection)
System.out.println("conn2 is running under the IBM Toolbox for Java JDBC driver.");
else
System.out.println("There is something wrong with conn2.");
conn1.close();
conn2.close();
} catch (SQLException e) {
System.out.println("ERROR: " + e.getMessage());
}
}
}

Beim wandeln komm dieser Fehler
javac GetConnections.java
GetConnections.java:35: package com.ibm.as400.access does not exist
if (conn2 instanceof com.ibm.as400.access.AS400JDBCConnection)
^
1 error

Auf einer anderen Webseite habe ich etwas mit der jt400.jar-Datei gefunden - wie kann ich diese in das Programm mit einbeziehen?

Wie gesagt, bin absoluter Java-Neuling.... :o

woki
06-06-06, 10:06
Mit diesem Zusatz

export -s CLASSPATH=/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar
vor dem Wandeln klapp es......

woki
06-06-06, 15:08
hmmm - langsam weiß ich nicht mehr, was ich machen soll.....
Ich habe eine Java-Klasse SprachServer und einen Thread namens SprachServerThread.
Diese sind in den .java-Dateien SprachServer.java und SprachServerThread.java gespeichert.

Die SprachServer.java-Datei sieht so aus:



import java.net.*;
import java.io.*;

public class SprachServer {
private ServerSocket serverSocket = null;
private int localPort;
private Socket socket = null;
private SprachServerThread[] threads = null;
static int[] threadsStatus;
static Socket[] sockets = null;

// main-Methode
public static void main(String[] args) throws IOException {
//public static void main(String args[]) throws IOException {
System.out.println("SprachServer: main() erreicht");
SprachServer ss = null;
int locPort = Integer.parseInt(args[0]);
ss = new SprachServer();
ss.run(locPort);
} // End method main()


public void run(int localPort) {
SprachServerThread sst = null;
boolean listening = true;
InetAddress localIPAddress;
String localHostName;

this.localPort = localPort;

threads = new SprachServerThread[25];
threadsStatus = new int[25];
sockets = new Socket[25];

// Tabelle mit Threads initialisieren
for (int i = 0; i < 25; i++) {
threadsStatus[i] = 0;
threads[i] = null;
sockets[i] = null;
}

try {
serverSocket = new ServerSocket(localPort);
}
catch (IOException e) {
System.err.println("Could not listen on port: " + localPort);
System.exit(-1);
}

while (listening) {
try {
socket = serverSocket.accept();

// Suchen freien Thread
for (int i = 0; i < 25; i++) {
if (threadsStatus[i] == 0) {
System.out.println("SprachServer: Versuche neuen Thread zu erstellen (Lfd. Nr.: " + i + ")");
threads[i] = new SprachServerThread(i);
System.out.println("SprachServer: Neuen Thread erstellt (Lfd. Nr.: " + i + ")");
threadsStatus[i] = 2;
sockets[i] = socket;
sst = threads[i];
sst.start();
System.out.println("SprachServer: Thread" + i + " gestartet");
break;
}
else if (threadsStatus[i] == 1) {
threadsStatus[i] = 2;
sockets[i] = socket;
sst = threads[i];
synchronized(sst) {
sst.notify();
}
break;
}
else {
}
}

}
catch (IOException e) {
System.err.println("Could not listen on port: " + localPort);
System.exit(-1);
}

} // while (listening)

try {
serverSocket.close();
}
catch (IOException e) {
System.err.println("Could not close ServerSocket");
System.exit(-1);
}

}// End run()


}


Die SprachServerThread-Datei sieht wie folgt aus:

import java.net.*;
import java.io.*;
import java.sql.*;
import com.ibm.as400.access.*;

public class SprachServerThread extends Thread {
private int idx;
private Socket socket2 = null;
BufferedReader bfrIn = null;
private AS400 as400 = null;
private String systemName = "System";
private String userid = "User";
private String password = "Password";

// Variablen für Aufruf StoredProcedures
private Connection as400Connection = null;
// Variablen für Aufruf StoredProcedure LIB/RPGPGM
CallableStatement cstmt1 = null;
java.sql.ResultSet resultSet = null;

private String messageID;
private String inputLine, outputLine;
private String outputLine39;

// Konstruktor
public SprachServerThread(int i) {
super("SprachServerThread");
as400 = new AS400(systemName, userid, password);
idx = i;

// Verbindung zur AS/400 für Aufruf StoredProcedures über JDBC-Treiber initialisieren
if (as400Connection == null) {
// noch keine Verbindung zur AS/400
try {
String driver = "com.ibm.as400.access.AS400JDBCDriver";
String connectionURL = "jdbc:as400://systemname";
Class.forName(driver).newInstance();
as400Connection = DriverManager.getConnection(connectionURL, userid, password);
}
...

Beim umwandeln und aufrufen auf der QShell

javac SprachServer.java SprachServerThread.java
system "CRTJVAPGM CLSF('/home/java/PickByVoice/SprachServer.class') OPTIMIZE(20)"
system "CRTJVAPGM CLSF('/home/java/PickByVoice/SprachServerThread.class') OPTIMIZE(20)"
java -cp . SprachServer 15010
....kommt diese Fehler-Meldung

SprachServer: main() erreicht
SprachServer: Versuche neuen Thread zu erstellen (Lfd. Nr.: 0)
java.lang.NoClassDefFoundError: com/ibm/as400/access/AS400
at java.lang.Throwable.<init>(Throwable.java:195)
at java.lang.Error.<init>(Error.java:49)
at java.lang.NoClassDefFoundError.<init>(NoClassDefFoundError.java:40)
at SprachServerThread.<init>(SprachServerThread.java:37)
at SprachServer.run(SprachServer.java:67)
at SprachServer.main(SprachServer.java:28)

Irgendwo muß wohl noch der CLASSPATH=/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar gesetzt werden, aber wo?? Ich brauche den ja nur für die SprachServerThread.java-Datei.....

RobertPic
06-06-06, 15:57
Irgendwo muß wohl noch der CLASSPATH=/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar gesetzt werden, aber wo?? Ich brauche den ja nur für die SprachServerThread.java-Datei.....

Java Option cp = classpath
Verschiedene Verzeichnisse/Jars werden durch Doppelpunkt getrennt.

also:
java -cp /QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar:. SprachServer 15010

Es gibt zwar komfortablere Möglichkeiten mit dem Classpath, aber die sichereste (und schnellste) Methode ist, jede Anwendung mit ihren zugehörigen jar's aufzurufen.

Alternativ könntest du auch die JDBC-Verbinung auf die nativen Treiber umstellen, die müsste er auf jeden Fall finden.

LG Rob