Domino Task in Java
Replace the old fashion C Code server task with JAVA and enjoy portability.
Some comments are in French but I am sure you will enjoy it!
To load: load runjava JavaPwer (case sensitive).
Just use Tell JavaPower Help, Tell JavaPower Quit, Tell JavaPower VERIFIER busytime.nsf on your Domino console (do not forget to let LOG=log.nsf,1 in your ini file.
import lotus.domino.*; import lotus.notes.addins.JavaServerAddin; import lotus.notes.internal.MessageQueue; import java.util.*; public class JavaPower extends JavaServerAddin { int noTache; // ID of the Task static JavaPower javaPower; Vector vector; // Addin info // Message Queue int erreur; // to manage errors String lemsg = MSG_Q_PREFIX + "JAVAPOWER"; // MQ$ convention C de Lotus // In UpperCase please StringBuffer args = new StringBuffer(); // tell args int longueur = 256;// tell command length MessageQueue messageQueue; // dummy const public static final int CMD_EXEC=1; public static final int CMD_HELP=0; public static final int CMD_ERR=-1; // Pure Notes to do something! Session session; Database database; private void afficheMessageNormal(String chaine) { AddInLogMessageText(chaine, NOERROR); AddInIdle(); } public static void main(String[] argv) { javaPower = new JavaPower() ; javaPower.start() ; } public void JavaPower() { setName("JavaPower"); } private void afficheHelp() { afficheMessageNormal("Java Power mode d'emploi"); afficheMessageNormal("Usage: "); afficheMessageNormal("Help : ces lignes d'aide"); afficheMessageNormal("VERIFIER base.nsf: base existe?"); afficheMessageNormal("QUIT ou EXIT : permet de fermer le programme"); } private boolean verifieNotes(String nomBase) { boolean retour=false; try { session = NotesFactory.createSession(); database = session.getDatabase("",nomBase); if (database.isOpen()) { retour = true; } else { afficheMessageNormal("Java Power: Impossible d'ouvrir la base " + nomBase); } } catch (NotesException e) { afficheMessageNormal("Java Power: Erreur Notes=" + e.getMessage()); } return retour; } private void purgeNotes() { try { database.recycle(); session.recycle(); } catch (NotesException e) { afficheMessageNormal("Java Power: Erreur Notes=" + e.getMessage()); } } private int analyseMsg(StringBuffer param) { int retour = CMD_ERR; int nbParam; StringTokenizer st; st = new StringTokenizer(args.toString()); nbParam = st.countTokens(); if (nbParam==1) { // 1 seul param, donc HELP sinon return false! // On s'en fiche, si un param aide pour l'instant afficheHelp(); // Show HELP! retour = CMD_HELP; } if (nbParam==2) { String s = st.nextToken(); if (s.equalsIgnoreCase("VERIFIER")) { retour=CMD_EXEC; if (!verifieNotes(st.nextToken())) { retour= CMD_ERR; purgeNotes(); } } else { afficheHelp(); retour = CMD_HELP; } } if (nbParam>2) { // impossible afficheHelp(); retour = CMD_HELP; } return retour; } public void runNotes() { OSPreemptOccasionally(); noTache = AddInCreateStatusLine("Java Power"); // Espace esthetique AddInSetStatusText("Initialisation de Java Power"); AddInSetStatusLine(noTache, "Initialisation en cours...."); // Init Queue des messages // Etape 1, on cree la file des messages messageQueue = new MessageQueue(); // Instancions AddInSetStatusLine(noTache, "Idle"); // restons coherent avec Notes! erreur = messageQueue.create(lemsg,0,0); // Pas de limite if (erreur!= NOERROR) { /* Commentaire! Already loaded, stop! // S'il y a une erreur de creation de file des messages C'est que la file existe deja // Donc que la tache est deja demarree CQFD! Fin du commentaire */ afficheMessageNormal("Java Power: programme deja charge, abandon..."); } else { afficheMessageNormal("Java Power: Attente de vos instructions"); // Etape 2 on ouvre erreur = messageQueue.open(lemsg,0); // 1 si a creer, 0 si non if (erreur!= NOERROR) { afficheMessageNormal("Java Power: Impossible d'ouvrir la ligne des msg!"); } else { afficheMessageNormal("Java Power: Attente de vos instructions..."); while (NOERROR == erreur) { erreur = messageQueue.get(args,longueur, messageQueue.MQ_WAIT_FOR_MSG,0); if (NOERROR == erreur) { int retour; retour = analyseMsg(args); if (retour == CMD_EXEC) { AddInSetStatusLine(noTache,"Java Power: Execution en cours..."); // Faire quelque chose d'interessant! System.err.println("Ben on va faire quelque chose!"); AddInSetStatusLine(noTache, "Idle"); } // Fin if retour==CMD_EXEC AddInIdle(); // Forcer car SHOW TASKS envoit un parametre non traite par // notre tache! erreur = NOERROR; } // Fin if erreur==NOERROR } // Fin while } // Fin else pb ligne des msg // Si on arrive la, c'est que l'on doit quitter! AddInSetStatusText("Fin de la tache"); AddInLogMessageText("Java Power: GoodBye!", NOERROR); AddInDeleteStatusLine( noTache ); // File d'attente! erreur = messageQueue.close(0); //fin file attente! } // Fin else boucle des msg } // fin runNotes }