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 :
Rien de bien exceptionnel donc... mais à l'exécution j'ai ceci :
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;
Aucune des 3 propositions n'est valable ni possible car le jar se trouve bien dans le classpath et le code est le suivant :> 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
Est-ce que quelqu'un pourrait m'aiguiller à ce sujet ?
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) { } } } }
D'avance merci !
Partager