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 :

Procédure externe Java et DB2/400


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Procédure externe Java et DB2/400
    Bonjour,

    Après avoir parcouru toute la doc, j'ai enfin réussi à créer une fonction "mailer" en Java étant donné que je ne peux pas envoyer de mails nativement sous DB2/400.

    J'ai suivi l'article suivant : ici, j'ai adapté quelque peu le code et j'ai pu créer ma fonction dans iseries navigator (après de nombreux essais).

    Malheureusement, j'obtiens encore une erreur, mais au niveau des droits d'accès maintenant :

    Etat SQL : 42501
    Code fournisseur : -551
    Message : [SQL0551] Non autorisé à l'objet JavaUDF!JavaUDF.mailer
    dans /QIBM/UserData/OS400/SQLLib/Function, de type *N. Cause . . . . . : Une opération demandée sur l'objet JavaUDF!JavaUDF.mailer
    de type *N de /QIBM/UserData/OS400/SQLLib/Function n'a pu aboutir. Vous ne pouvez pas effectuer cette opération si vous ne disposez pas du droit requis. Que faire . . . : Demandez au responsable de la sécurité ou au propriétaire de l'objet de vous accorder les droits nécessaires. Si vous ne disposez pas de droits sur un fichier logique, faites-vous accorder les droits sur les fichiers sous-jacents de ce dernier. Relancez ensuite l'opération.
    Lorsque je regarde les droits sur mon fichier jar (importé avec SQLJ.INSTALL_JAR), tout est coché... Pour mon user comme pour "public".

    Y a-t-il des autres droits à ajouter pour exécuter ce genre d'objets ?

    D'avance merci,

    Heriquet

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Je suppose que tu utilises la nomination SQL (SQL-Naming) plutôt que la nomination Sytème (Sys-Naming) ? Si c'est bien le cas, ça pourrait être la cause du message SQL0551.
    La nomination Système est codée de la façon pratiquée sur AS/400, c'est à dire Library/Object. La nomination SQL est gérée différemment. Par exemple, le propriétaire est toujours le profil qui a créé l'objet, le public est toujours exclus , etc.
    Je propose donc que tu fasses un nouvel essai en codant selon la nomination Système, en le précisant à la compil ou par une instruction SET OPTION.

  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
    En fait je ne sais pas trop... j'ai juste essayé de suivre ce qu'il y avait dans les RebBooks que j'ai trouvés...

    Voici le code de ma procédure :


    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
    /*
    	AUTHOR         : 
    	NAME           : AP_MAILER
    	CREATION DATE  : 05/10/2009
    	LAST UPDATE    : 05/10/2009
    	PURPOSE        : Cette fonction permet d'envoyer un email en utilisant un sous programme Java
    */
     
    CALL SQLJ.REMOVE_JAR('JavaUDF',0);
    CALL SQLJ.INSTALL_JAR('file:/QIBM/UserData/OS400/SQLLib/Function/JavaUDF.jar','JavaUDF',0);
     
    DROP PROCEDURE TOOLSOBJ.SP_MAILER;
     
    CREATE PROCEDURE TOOLSOBJ.SP_MAILER 
    (	
    	IN recipientEmail VARCHAR(30), 
    	IN title VARCHAR(100), 
    	IN message VARCHAR(2000)
    ) 
    	EXTERNAL NAME 'JavaUDF.mailer'
    	RESULT SETS 0
    	LANGUAGE JAVA
    	PARAMETER STYLE JAVA
    	FENCED
    	NO DBINFO;

    Ceci s'exécute sans problème.

    Le code Java 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
    46
    47
    48
    49
    50
    51
    52
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
     
    public class JavaUDF extends com.ibm.db2.app.StoredProc
    {
    	public JavaUDF()
    	{}
     
    	public static String mailer(String email, String subject, String message) 
    	{
    		try
    		{
    			// Specify our host, intended recipient, & sender e-mail address
    			String host = "10.191.15.10";
     
    			InternetAddress from = new InternetAddress("moi@domain.com");
    			InternetAddress recipient = new InternetAddress(email);	
     
    			// Get the system properties
    			Properties props = new Properties();
     
    			// Setup default parameters - the protocol, the host, and port #
    			props.put("mail.transport.protocol","smtp");
    			props.put("mail.smtp.host",host);
    			props.put("mail.smtp.port","25");
     
     
    			// Create session
    			Session mySession = Session.getInstance(props);
     
    			// Create our message
    			MimeMessage myMessage = new MimeMessage(mySession);
    			myMessage.setFrom(from);
    			myMessage.setSubject(subject);
     
    			myMessage.setText(message);
    			myMessage.addRecipient(Message.RecipientType.TO,recipient);
     
    			// Send the message
    			javax.mail.Transport.send(myMessage);
     
    		}
    		catch (Exception e)
    		{
    			System.out.println("An error has occurred: " + e);
    			return "An error has occurred: " + e;
    		}	
     
    		return "An E-mail was sent to " + email;
    	}
    }

    Il faut les jars mail.jar et db2routines_classes.jar pour compiler cela.

    Si j'arrive à faire tout fonctionner, promis je publie un tutorial pour l'envoi de mails avec iSeries v5r4...

    D'avance et déjà merci pour votre aide !

    Heriquet

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Fais un essai sous le profil QSECOFR ou ADMIN pour voir s'il s'agit bien de cette histoire de NAMING(*SYS ou *SQL) car je n'en suis pas sûr.

Discussions similaires

  1. DB2 400 / LibList via JAVA
    Par gnt.dev dans le forum DB2
    Réponses: 3
    Dernier message: 02/02/2012, 16h14
  2. Réponses: 0
    Dernier message: 16/06/2010, 12h36
  3. Réponses: 2
    Dernier message: 04/12/2009, 14h38
  4. Connexion JAVA sur DB2 - AS/400
    Par Soulant dans le forum DB2
    Réponses: 16
    Dernier message: 11/07/2007, 18h30
  5. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45

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