IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Execution d'une stored procedure java : ClassNotFound


Sujet :

DB2

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Par défaut 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 : 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 !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Par défaut
    ce ne serait pas EXTERNAL NAME 'JAVAMAILER!JavaMailer.mailer' plutôt ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Par défaut
    Non non ca c'est une partie sure. J'ai un call ouvert chez IBM pour ca.

    un peu de neuf à ce propos, l'erreur n'apparait plus. Le problème était que la sortie .class se faisait pour la JVM 1.5 et que mon iseries tourne en 1.4.2.

    Donc maintenant ca va mais maintenant j'ai une erreur comme quoi il trouve pas la méthode...

    Message . . . . : La proc. stockée ou fonction UDF Java SP_MAILER, nom spéc.
    SP_MAILER, n'a pas appelé la méthode Java mailer, signature
    (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringV.
    Cause . . . . . : La méthode Java fournie par la clause EXTERNAL NAME d'une
    instruction CREATE PROCEDURE ou CREATE FUNCTION est introuvable. La liste
    d'arguments déclarée ne correspond peut-être pas à celle attendue par la
    base de données, ou il ne s'agit peut-être pas d'une méthode d'instance
    "publique". Que faire . . . : Assurez-vous qu'il existe une méthode
    d'instance Java associée à l'indicateur d'accès "public" et à la liste
    d'arguments attendue pour cet appel.
    Le code java est lui comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class JavaMailer extends StoredProc
    {
    	public JavaMailer()
    	{}
     
    	public static void mailer(String mailHost, String to, String subject, String body) 
    	{
    J'ai essayé sans le "static" mais même résultat...

    Je continue mes recherches...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/07/2012, 09h06
  2. Créer une stored procedure Java a partir de Java
    Par murgen23 dans le forum JDBC
    Réponses: 4
    Dernier message: 09/01/2009, 16h37
  3. Réponses: 2
    Dernier message: 10/10/2007, 12h19
  4. [sql 200] Problème avec une stored procedure
    Par marc_dd dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 01/12/2006, 15h11
  5. [QUERY ANALYSER]problème au lancement d'une stored procedure
    Par gregorian dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo