Savez vous que l’on peut exécuter du Java à partir de MySQL? Etonnant non?

Poignée de main Sun & MySQLLes synergies MySQL/Sun portent elles leurs fruits? Alors que les schémas traditionnels font que Java interroge MySQL, les rôles peuvent s’inverser. Il sera bientôt possible de créer des fonctions utilisateurs permettant d’utiliser du code Java. Bien que conceptuellement, il est dangereux de mélanger le fonctionnel dans plusieurs couches d’applications, cela peut-être un atout pour certains collaborateurs travaillant beaucoup avec une base de données (les fonctionnels de la MOA, par exemple).

Activer le plugin de MySQL permettant d’exécuter une méthode Java n’est pas une mince affaire. Ce plugin reste même expérimental, ce qui sous entend qu’il ne faut pas l’utiliser en production.

Ajout d’une méthode Java

L’ajout de cette méthode se fait en deux temps. On place un fichier contenant le code source Java, et on crée une procédure stockée.

Placez votre fichier JAR, dans le répertoire plugin de MySQL.

Nous considérons que nous avons un Jar dénommé archiveJar.jar, avec la classe suivante dans celui-ci:

package org.vialle.mysql;
 
public class HelloWorld{
 
    public String sayHello(String nom) {
        if (str == null) {
            return null;
        } else {
             return "Bonjour " + nom;
       }
    }
}

Cette archive sera à placer dans le répertoire plugin de MySQL

Créez votre fonction

pour ceci tapez cette commande dans votre client MySQL.

CREATE FUNCTION java_helloworld(string VARCHAR(255))
     RETURNS VARCHAR(255)
     NO SQL LANGUAGE Java
     EXTERNAL NAME 'archiveJar.jar:org.vialle.mysql.
                                          HelloWorld.sayHello';

Dorénavant, vous pouvez utiliser la méthode Java dans vos requêtes SQL.

Exécution d’une méthode Java

Executez cette commande dans votre client MySQL:

SELECT java_helloworld("Eric");

Vous retournera:
+---------------------------------+
| java_helloworld("Eric") |
+---------------------------------+
| Hello Eric |
+---------------------------------+
1 row in set (0.01 sec)

Sources: