Bonjour,

Je suis en train de développer une stored procedure pour DB2 qui envoi des mails.

J'ai donc développé ma petite classe et j'ai fait un jar que j'ai chargé sur mon AS/400 puis j'ai exécuté le script suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DROP PROCEDURE TOOLSOBJ.SP_MAILER;
 
CALL SQLJ.REMOVE_JAR('JAVAMAILER',0);
CALL SQLJ.INSTALL_JAR('file:/home/moi/JavaMailer.jar','JAVAMAILER',0);
 
CREATE PROCEDURE TOOLSOBJ.SP_MAILER
(                         
   IN mailHost VARCHAR(100),   
   IN recipientEmail VARCHAR(100),                                       
   IN title VARCHAR(255),                                               
   IN message VARCHAR(2048))                                            
 
   EXTERNAL NAME 'JAVAMAILER:JavaMailer.mailer'                               
   RESULT SETS 0                                                        
   LANGUAGE JAVA                                                        
   PARAMETER STYLE JAVA                                                 
   FENCED                                                               
   NO DBINFO;
Rien de bien exceptionnel donc... mais à l'exécution j'ai ceci :

> CALL TOOLSOBJ.SP_MAILER('10.181.212.50', 'abc@mail.fr','sujet','message')

Etat SQL : 42724
Code fournisseur : -4304
Message : [SQL4304] La proc. stockée ou fonction UDF Java SP_MAILER, nom spéc. SP_MAILER, n'a pas chargé la classe Java JavaMailer.
Code raison : 1. Cause . . . . . : La classe Java fournie par la clause EXTERNAL NAME d'une instruction CREATE PROCEDURE ou CREATE FUNCTION n'a pas été chargée. Signification des codes raison :
1 - La classe est introuvable dans CLASSPATH.
2 - La classe ne met pas en oeuvre l'interface appropriée ("com.ibm.db2.app.StoredProc" ou "com.ibm.db2.app.UDF"), ou ne possède pas d'indicateur d'accès "public" Java.
3 - Le constructeur par défaut a échoué ou est indisponible. Que faire . . . : Assurez-vous que le fichier ".class" compilé est présent dans CLASSPATH, par exemple dans "/QIBM/UserData/OS400/SQLLib/Function". Vérifiez qu'il met en oeuvre les interfaces Java appropriées et son indicateur d'accès "public".

L'instruction mise en évidence a échoué, entraînant l'interruption du traitement
Aucune des 3 propositions n'est valable ni possible car le jar se trouve bien dans le classpath et le code est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import com.ibm.db2.app.*;
 
public class JavaMailer extends StoredProc
{
	public JavaMailer()
	{}
 
	public void mailer(String mailHost, String to, String subject, String body) 
	{
	    // these variables come from the mail form
	    String from = "mailer@mail.fr";
 
	    if ((from != null) && (to != null) && (subject != null)  && (body != null)) // we have mail to send
	    {
	    	try 
	    	{
	    		//Get system properties
	    		Properties props = System.getProperties();
 
				//Specify the desired SMTP server
				props.put("mail.smtp.host", mailHost);
 
				// create a new Session object
				Session session = Session.getInstance(props,null);
 
				// create a new MimeMessage object (using the Session created above)
				Message mail = new MimeMessage(session);
				mail.setFrom(new InternetAddress(from));
				mail.setRecipients(Message.RecipientType.TO, new InternetAddress[] { new InternetAddress(to) });
				mail.setSubject(subject);
				mail.setContent(body, "text/plain");
 
				Transport.send(mail);
 
	    	} 
	    	catch (Exception e) 
	    	{
 
	    	}
	    }
	}
}
Est-ce que quelqu'un pourrait m'aiguiller à ce sujet ?

D'avance merci !