Garder une api en mémoire afin de s'y connecter fréquemment

PDREANO Messages postés 3 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 21 septembre 2009 - 9 avril 2009 à 17:15
PDREANO Messages postés 3 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 21 septembre 2009 - 11 avril 2009 à 12:34
Bonjour,
C'est mon premier post sur ce forum, je vous demanderais donc d'être indulgent.
Voila à partir d'un programme je dois fréquemment me connecter à une base via une api java et une Java native interface.
pour déclencher mon script java, mon programme principale lance via le shell une commande tel que java -Djava.library.path=/Applications/progr.app/Contents/Resources/Java/system/native/ -jar "/Users/dist/interactions.jar"" ou le driver java native interface se trouve dans le repertoire system/native.

Le petit programme qui se lance alors et qui marche très bien (et oui ce programme marche, je suis bien content Javascript:Insert_Emoticon('/imgs2/smile.gif'); mais le pb est ailleurs). a cette structure :

Public class melangedecouleur {
-- initialisation-----
MonApi monapi = new MonApi ();
Apiservices messervices = new Apiservices();

-- recuperation de services--

ServicedesCouleurs servicedesproduits = messervices.getServicedesCouleurs
ServicemelangedesCouleurs melangedescouleurs = messervices.getServicemelangedesCouleurs

etc...

--- creation des listes de couleurs

List Couleurs = new ArrayList();
List CouleursIDs = new ArrayList();

Couleur cyanambre = servicedesproduits.rechercheparID(1042);
couleurs.add(cyanambre);
........ // puis on s'amuse avec les couleurs et on affiche un resultat dans un show message dialog.


Le programme marche très bien je vous rassure il y a une methode main (!) , seulement voila, l'initialisation de l'api par :
MonApi monapi = new MonApi ();
Apiservices messervices = new Apiservices;

prends 8 secondes environs et je voudrais que cela soit fait une bonne fois pour toute car à chaque fois que j'appelle le programme tout se reinitialise je voudrais que le programme reste résident et appeler via une autre classe l'api deja initialisé. Malheureuseement toutes mes tentatives ont été vaines ( j'ai même créé une fenêtre pour n'éteindre le programme qu'a fermeture de la fenêtre mais dés que je veux créer une classe qui se connecte a celle ci java me force a activer le JNI même sur cette seconde classe qui ne veut qu'appeler des methodes de la premiere classe et non de l'api).

Quelqu'un a t'il une idée Je pense que je dois mal m'y prendre ?? euh non j'en suis sûr lolJavascript:Insert_Emoticon('/imgs2/smile_clown.gif');

Merci par avance de votre aide.

3 réponses

benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 9
11 avril 2009 à 10:57
Bonjour,

J'espère avoir compris ton problème, car ton premier post est un peut raté côté mise en forme :P
Je pense que tu devrais créer un singleton de ton API:

public class MonApi
{
    private static singleton = null;

    private MonApi()
    {
    }

    public static MonApi getInstance()
    {
        if(instance==null)
        {
            instance = new MonApi();
        }
        return instance;
    }
}

Tu récupère l'API comme ceci:
MonApi = MonApi.getInstance();

Celle-ci sera instancié qu'une fois pour toute la vie du programme et elle sera accessible de partout.

Benoit.
0
PDREANO Messages postés 3 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 21 septembre 2009
11 avril 2009 à 12:32
Merci beaucoup et désolé pour la mise en forme.

Malheureusement le singleton ne résoudra pas le pb car en fait c'est à chaque fois un nouveau programme qui est envoyé en ligne de commande dans deux JVM différente. J'ai regardé un peu et je pense qu'il faudra que je garde un programme java résident en écoute qui a chargé l'api et que filemaker m'envoie un autre programme java sans api qui puisse l'interroger.


la solution sera peut être par le RMI je vais essayer de m'y pencher.

Si vous avez d'autres solutions je suis preneur.

Encore merci.
0
PDREANO Messages postés 3 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 21 septembre 2009
11 avril 2009 à 12:34
Mince je m'aperçois que mes retours à la ligne ne sont pas pris dans mes messages comment faites vous ??


Vous faites du copier coller ?
0
Rejoignez-nous