[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2004
    Beiträge
    105

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

    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.

    Code:
    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
    Code:
    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....

  2. #2
    Registriert seit
    Apr 2004
    Beiträge
    105
    Mit diesem Zusatz
    Code:
    export -s CLASSPATH=/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar
    vor dem Wandeln klapp es......

  3. #3
    Registriert seit
    Apr 2004
    Beiträge
    105

    java.lang.NoClassDefFoundError: com/ibm/as400/access/AS400

    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:

    Code:
    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:
    Code:
    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
    Code:
    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
    Code:
    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.....

  4. #4
    Registriert seit
    Oct 2004
    Beiträge
    240
    Zitat Zitat von woki
    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

Similar Threads

  1. Konvertierung nach Graphic --> CCSID Problem
    By codierknecht in forum NEWSboard SAP
    Antworten: 32
    Letzter Beitrag: 09-02-18, 14:00
  2. Migation RPG --> Java
    By anwenderi5 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-01-09, 13:29
  3. Packed Decimal (AS400) -> Java Double
    By Bratmaxxe in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 15-11-06, 10:51
  4. NOT NULL WITH DEFAULT
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 04-08-06, 11:32
  5. newbie und frage zur installatiom
    By zerofive in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 14-09-04, 08:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •