[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2008
    Beiträge
    83
    Wen es interessiert hier der lauffähige Code.
    Bin aber bereits am Probieren, das mit dem AppServer zu machen.

    Code:
         H main(Main)
         H dftactgrp(*no)
         H actgrp(*new)
    
          **********************************************************************
          *  newString constructor that accepts a byte array
          *  (an alphnumeric variable in RPG speak). It
          *  returns a string object.
          **********************************************************************
         D newString       PR              O   ExtProc(*JAVA:
         D                                             'java.lang.String':
         D                                             *CONSTRUCTOR)
         D                                     Class(*JAVA:'java.lang.String')
         D  byes                       9999A   Const Varying
    
    
         D  sendMail       PR                  EXTPROC(*JAVA : 'javaMail.JavaMail+
         D                                     ' : 'sendMail' )
         D                                     STATIC
         D  arg0                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg1                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg2                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg3                           O   CLASS(*JAVA : 'java.lang.String' )
    
         D sendMailMitAnhang...
         D                 PR                  EXTPROC(*JAVA : 'javaMail.JavaMail+
         D                                     ' : 'sendMailMitAnhang' )
         D                                     STATIC
         D  arg0                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg1                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg2                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg3                           O   CLASS(*JAVA : 'java.lang.String' )
         D  arg4                           O   DIM(99)
         D                                     CLASS(*JAVA : 'java.lang.String' )
         D                                     OPTIONS(*VARSIZE)
    
         D  absender       S               O   CLASS(*JAVA : 'java.lang.String' )
         D  empfaenger     S               O   CLASS(*JAVA : 'java.lang.String' )
         D  betreff        S               O   CLASS(*JAVA : 'java.lang.String' )
         D  nachricht      S               O   CLASS(*JAVA : 'java.lang.String' )
         D  dateien        S               O   DIM(99)
         D                                     CLASS(*JAVA : 'java.lang.String' )
    
         DMain             PR                  extpgm('TEST')
    
         PMain             B
         D                 PI
          /free
    
           absender = newString('absender@test.local');
           empfaenger = newString('empfaenger@test.local');
           betreff = newString('Test');
           nachricht = newString('Datei-Test');
           dateien(1) = newString('/Java/JavaMail.jar');
           dateien(2) = newString('/Java/activation.jar');
           dateien(3) = newString('/Java/mail.jar');
           sendMail(absender:empfaenger:betreff:nachricht);
           sendMailMitAnhang(
             absender:empfaenger:betreff:nachricht:dateien);
           dsply ('Ende');
          /end-free
         P                 E
    Code:
    package javaMail;
    
    import java.io.File;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    public class JavaMail {
    
    	public static void main(String[] args) {
    		String absender = args[0];
    		String empfaenger = args[1];
    		String betreff = args[2];
    		String nachricht = args[3];
    		String[] dateien = new String[1];
    		dateien[0] = args[4];
    		sendMail(absender, empfaenger, betreff, nachricht);
    		sendMailMitAnhang(
    			absender, empfaenger, betreff, 
    			nachricht, dateien);
    	}
    	
    	public static void sendMailMitAnhang(
    		String absender, String empfaenger, String betreff, 
    		String nachricht, String[] dateien)
    	{
    		File[] files = new File[dateien.length];
    		for (int i=0; i<dateien.length; i++)
    		{
    			if (dateien[i]!=null)
    			{
    				files[i] = new File(dateien[i]);
    			}
    		}
    		try {
    			Properties props=new Properties();
    			props.put("mail.smtp.host","IP-Adresse Mail Server");
    			Session session = Session.getInstance(props);
    			Message message=new MimeMessage(session);
    			message.setFrom(new InternetAddress(absender));
    			message.setRecipient(
    				Message.RecipientType.TO, 
    				new InternetAddress(empfaenger));
    			message.setSubject(betreff);
    			Multipart multipart = new MimeMultipart();
    			BodyPart body = new MimeBodyPart();
    			body.setText(nachricht);
    			multipart.addBodyPart(body);
    			for (int i=0; i<files.length; i++)
    			{
    				if (files[i]!=null)
    				{
    					BodyPart file = new MimeBodyPart();
    					DataSource source = new FileDataSource(files[i]);
    					file.setDataHandler(new DataHandler(source));
    					file.setFileName(files[i].getName());
    					multipart.addBodyPart(file);
    				}
    			}
    			message.setContent(multipart);
    			Transport.send(message);
    		} catch (AddressException e) {
    			e.printStackTrace();
    		} catch (MessagingException e) {
    			e.printStackTrace();
    		}
    		
    	}
    
    	public static void sendMail(
    		String absender, String empfaenger, 
    		String betreff, String nachricht)
    	{
    		try {
    			Properties props=new Properties();
    			props.put("mail.smtp.host","IP-Adresse Mail Server");
    			Session session = Session.getInstance(props);
    			Message message=new MimeMessage(session);
    			message.setFrom(new InternetAddress(absender));
    			message.setRecipient(
    				Message.RecipientType.TO, 
    				new InternetAddress(empfaenger));
    			message.setSubject(betreff);
    			Multipart multipart = new MimeMultipart();
    			BodyPart body = new MimeBodyPart();
    			body.setText(nachricht);
    			multipart.addBodyPart(body);
    			message.setContent(multipart);
    			Transport.send(message);
    		} catch (AddressException e) {
    			e.printStackTrace();
    		} catch (MessagingException e) {
    			e.printStackTrace();
    		}
    	}
    }

  2. #2
    Registriert seit
    Apr 2008
    Beiträge
    83

    ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer

    Moin Dieter,

    ich habe den AppServer4RPG soweit eingerichtet und erstmal in einer QShell gestartet.
    Beim Call des Test-Programms kommt dann die Fehlermeldung:
    ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer

    Ich hab mal in die jar-Datei geguckt und die Klasse und sogar der ganze Ornder sqlgateway ist nicht vorhanden. Soll das so, damit das extra auf einen Fehler läuft?

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.392
    ... ne das soll nicht so, da ist wahrscheinlich der Eintrag in der global.properties inkonsistent mit dem Rest; ändere den mal auf de.bender_dv.test.Confirmer ab, dann sollte das Testteil tun. Hat aber mit der Funktionalität des AppServers nix zu tun.

    Was dein RPG Teil angeht, das mit dem static zieht, weil dann kein Objekt erzeugt werden muss. Eigentlich würde man mit deiner Java class analog zu String verfahren, sprich einen *Constructor deklarieren und vor dem Methodenaufruf mit diesem das Object erzeugen, das dann beim Methodenaufruf als erster Parameter mitgegeben wird.

    D*B

    Zitat Zitat von Ottersberg Beitrag anzeigen
    Moin Dieter,

    ich habe den AppServer4RPG soweit eingerichtet und erstmal in einer QShell gestartet.
    Beim Call des Test-Programms kommt dann die Fehlermeldung:
    ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer

    Ich hab mal in die jar-Datei geguckt und die Klasse und sogar der ganze Ornder sqlgateway ist nicht vorhanden. Soll das so, damit das extra auf einen Fehler läuft?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Apr 2008
    Beiträge
    83
    Zitat Zitat von BenderD Beitrag anzeigen
    ... ne das soll nicht so, da ist wahrscheinlich der Eintrag in der global.properties inkonsistent mit dem Rest; ändere den mal auf de.bender_dv.test.Confirmer ab, dann sollte das Testteil tun. Hat aber mit der Funktionalität des AppServers nix zu tun.
    Ja das hat geklappt.


    Ich habe jetzt entsprechend eigene Klassen erstellt und das klappt alles wunderbar.
    Ich komme allerdings an die 512 Byte-Grenze. Eine E-Mail braucht mehr und wenn ich Dateien anhängen will, bin ich mit den Dateipfaden erst recht schnell an dieser Grenze.
    So wie es aussieht stammt die Grenze ja von der Klasse com.ibm.as400.access.Record her. Habe ich überhaupt eine Chance das zu vergrößern? Oder muss ich mich komplett selbst um die übergebenen Variablen kümmern?

    [edit]
    Nehm ich zurück. Es kommen gar nicht erst mehr als 512 Byte an oder besser 532 (20 für den Event). Warum die Einschränkung auf 532? Die DataQueue kann doch 64512 Bytes.

    Warum der com.ibm.as400.access.Record dann allerdings bei 512 Bytes eine IndexOutOfBoundsException wirft ist ne andere Frage.
    [/edit]

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.392
    Hallo,

    die Begrenzung ist willkuerlich, aus Performancegruenden ist es wohl nicht so gut zuviel Luft zu senden. Der momentane Arbeitsstand (im CVS im SourceForge) hat eine zusaetzliche Procedure, die paketiert das Ganze.

    D*B

    Zitat Zitat von Ottersberg Beitrag anzeigen
    Ja das hat geklappt.


    Ich habe jetzt entsprechend eigene Klassen erstellt und das klappt alles wunderbar.
    Ich komme allerdings an die 512 Byte-Grenze. Eine E-Mail braucht mehr und wenn ich Dateien anhängen will, bin ich mit den Dateipfaden erst recht schnell an dieser Grenze.
    So wie es aussieht stammt die Grenze ja von der Klasse com.ibm.as400.access.Record her. Habe ich überhaupt eine Chance das zu vergrößern? Oder muss ich mich komplett selbst um die übergebenen Variablen kümmern?

    [edit]
    Nehm ich zurück. Es kommen gar nicht erst mehr als 512 Byte an oder besser 532 (20 für den Event). Warum die Einschränkung auf 532? Die DataQueue kann doch 64512 Bytes.

    Warum der com.ibm.as400.access.Record dann allerdings bei 512 Bytes eine IndexOutOfBoundsException wirft ist ne andere Frage.
    [/edit]
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. RPG aus Java aufrufen
    By Vicky-B in forum NEWSboard Java
    Antworten: 17
    Letzter Beitrag: 06-05-08, 12:05
  2. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Java
    Antworten: 10
    Letzter Beitrag: 10-02-05, 11:33
  3. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 02-02-05, 14:10
  4. Aufruf von Java Programm direkt aus RPG
    By mk in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-09-04, 09:22

Berechtigungen

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