Execution d'une stored procedure java : ClassNotFound
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:
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 :
Citation:
> 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:
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 !