Page 1 sur 1

[Java] Class ouverture database

MessagePublié: 05 Juil 2011 à 16:19
par KHVince
Bonjour,

J'ai créé une class Java dans une bib permettant d'effectuer différentes action sur base Notes, documents, vues, etc...
Cette class est divisée en différentes fonction dont une permettant d'ouvrir une base notes, celle-çi renvoyant un objet de type database.

Le problème est qu'il n'ouvre même pas la base dans la fonction...ce qui est très gênant :/
A cette fonction, je passe en paramètre le serveur et le nom de la base.
J'ai ajouté des messages pour contrôler la session et le username est tout est correcte.
Je n'ai aucun message d'erreur, seulement qu'il n'ouvre pas la base et le isopen() est à false...

J'ai testé en faisant un getDatabase directement dans l'agent et pas de problème, il m'ouvre bien la base :/

Auriez-vous une idée ? Un truc que je fais mal ?

Voici le code :


Code : Tout sélectionner
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.Session;
import lotus.domino.View;

public class ConnectNOTES {
   private String dtb;
   private String srv;
   private Session s;
   private Database dbNotes;
   
   String view;
   String searchWord;
   
   public ConnectNOTES(Session ses, String[] args){
      this.dtb   = args[0];
      this.srv   = args[1];
      this.s      = ses;
   }
   
   public Database getConnectionBase() throws NotesException {
      
      try{
         System.out.println("Java 1--> " + srv + " - " + dtb);
         System.out.println("Java 2--> " + s.getNotesVersion());
         System.out.println("Java 3--> " + s.getEffectiveUserName());
         
         dbNotes = s.getDatabase(srv, dtb);

         if (dbNotes.isOpen()){
            System.out.println("DBNotes : Connection Successful!");
         } else {
            System.out.println("DBNotes : Connection Failed!");
         }
           
       }catch(NotesException e){
            e.printStackTrace();
            System.out.println("ConnectNOTES - Error Trace in getConnectionBase() : " + e.getMessage());
       }
       
       return dbNotes;
   }

   public Document getDocumentParametre(Database db, String[] args) {
      
      Document document = null;

      try {
         
         this.view      = args[0];
         this.searchWord   = args[1];
         
         View viewParam = db.getView(view);
         document = viewParam.getDocumentByKey(searchWord, true);
         
      } catch (NotesException e){
            e.printStackTrace();
            System.out.println("ConnectNOTES - Error Trace in getDocumentParametre() : " + e.getMessage());
      }
      
      return document;
   }

        ....

}


Dans l'agent Java notes, l'appel de la fonction se fait :
Code : Tout sélectionner
          //Instanciation objet connectNotes
        Database curDb = agentContext.getCurrentDatabase();
          String[] paramNOTESArray;
          paramNOTESArray = new String[2];
          paramNOTESArray[0] = curDb.getServer();
          paramNOTESArray[1] = "path DB";
          ConnectNOTES connectNotes = new ConnectNOTES(session, paramNOTESArray);

          Database db = connectNotes.getConnectionBase();
         
          if (!db.isOpen()) {
             System.out.println("Erreur à l'ouverture de la base xxxxx");
          } else {
             System.out.println("xxxxx ouverte");
          }


Merci de votre aide.

Vince.

PS: Lotus 8.5.1FP3

MessagePublié: 05 Juil 2011 à 19:38
par roubech
je ne vois pas la déclaration et l'initialisation de ton objet session

MessagePublié: 06 Juil 2011 à 07:50
par seroa
Salut,

Je trouve que ta classe ne sert pas à grand chose, mais je me trompe peut être. Elle t'apporte quoi de plus que les classes domino déjà existantes ?

J'ai vu aussi que tu ne recycles pas tes objets domino.

MessagePublié: 06 Juil 2011 à 08:16
par KHVince
Bonjour,

@roubech :
Je n'ai pas mis tout le code de l'agent mais :
Code : Tout sélectionner
import lotus.domino.*;
import java.sql.*;
import java.io.PrintWriter;

public class Test extends AgentBase {
public void NotesMain() {

      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();

          //Création d'un objet pw pour envoyer dans le navigateur
          PrintWriter pw = getAgentOutput();

...

          //Instanciation objet connectNotes
   Database curDb = agentContext.getCurrentDatabase();
          String[] paramNOTESArray;
          paramNOTESArray = new String[2];
          paramNOTESArray[0] = curDb.getServer();
          paramNOTESArray[1] = "path DB";
          ConnectNOTES connectNotes = new ConnectNOTES(session, paramNOTESArray);

...



@seroa :
Devant récupérer différentes informations de différentes bases notes dans l'agent, j'ai préféré tout centraliser dans une class.
Pour le recyclage des objets, c'est pô faux, petit oublie :/


Merci,
Vince

MessagePublié: 06 Juil 2011 à 08:20
par seroa
ok,

comment compte tu envoyer ou récupérer les paramètres srv, dbt et searchword dans ton agent ?

MessagePublié: 06 Juil 2011 à 15:05
par KHVince
Je ne vais pas entrer dans le détails de ma conception et/ou architecture mais j'ai une base de paramètre dans laquelle j'ai toutes les info nécessaire sur les autres bases (chemin, serveurs, etc...) sachant que le chemin/nom de cette base paramètre est dans un doc profil de mes bases.

MessagePublié: 07 Juil 2011 à 14:34
par LSong
tu as pensé de faire un
dbNote.Open (je sais pas s'il faut des argument)

??