segunda-feira, 28 de fevereiro de 2011

Notes/XPages - Debugando um Java Agent

Existe uma forma de debugar o Java Agent no Designer, mas é totalmente instável, o Designer trava e tem que ser fechado o tempo todo.
Então vamos usar o Eclipse para debugar nosso Agent Java. É recomendável que se deixe um eclipse apenas para isso, pois vamos mudar a JRE do Eclipse para usar a JRE do Notes. Caso use o mesmo Eclipse para outras aplicações Java, terá que ficar alterando o JRE padrão o tempo todo.

Primeiramente, crie um projeto java no eclipse como o nome que preferir. Crie a classe JavaAgent. Cole o seguinte código:
import lotus.domino.*;

public class JavaAgent extends AgentBase {

    private Database database;
    private Session session;

    public JavaAgent() {

    }

    public JavaAgent(Session s, Database d) {
        this.session = s;
        this.database = d;
    }

    //
    public static void main(String[] args) {
        Session sess=null; 
        Database db=null;
        JavaAgent ag;

        // Initialize Notes
        NotesThread.sinitThread(); 

        try {
            sess = NotesFactory.createSession();  // start a Notes session
            db = sess.getDatabase("", 

            "nomeDaDatabase.nsf");  // simulate home database for agent
            ag = new JavaAgent(sess, db);  /* simulate agent object  with session and database*/
            ag.NotesMain();   // call main routine of agent
        }
        catch(NotesException ne) {
            System.out.println(ne.id + " " + ne.text);
        }
        catch (Exception e)    {
            e.printStackTrace();
        }
        finally {
            try { 
                if (db != null) db.recycle(); 
                if (sess != null) sess.recycle(); 
            }
            catch (Exception x) {}
            NotesThread.stermThread();
        }
    }

    public void NotesMain() {
        Session session = null;
        AgentContext agentContext = null;
        try {
            if (this.session != null) // Already have an agent context.  
                {
                session = this.session;
                }
            else {  // Need to get agent context.  
                session = this.getSession();
                if (session==null) throw new 

                NotesException(NotesError.NOTES_ERR_ERROR,  "Could not get current session at start of agent.");
                agentContext = session.getAgentContext();
                if (agentContext==null) throw new 

                NotesException(NotesError.NOTES_ERR_ERROR,  "Could not get agent context at start of agent.");
                        this.database = agentContext.getCurrentDatabase();
                if (this.database==null) throw new 

                NotesException(NotesError.NOTES_ERR_ERROR,  "Could not get current database at start of agent.");
            }
        }
        catch(NotesException ne) {
            System.out.println(ne.id + " " + ne.text);
            return;
        }
        catch (Exception e)    {
            e.printStackTrace();
            return;
        }

        //Your code goes here!!!
    }
} 
 Aparecerá erros em todos os objetos do Notes, pois ainda não colocamos a JVM/JRE do Notes.

Vamos mudar o JRE do Eclipse. Vá no menu: Window > Preferences.



Vá em Java > Installed JREs.


Clique em Add, selecione Standard VM, clique em Next. Em JRE home, clique em Directory e selecione o diretório da JVM do Notes. Exemplo: C:\Program Files\IBM\Lotus\Notes\jvm

Coloque um nome de sua preferência e clique em Finish. Agora marque a JVM do Notes como padrão.

Apenas dê OK.
Agora vamos para a segunda parte. Quando você estiver programando o Java Agent no Eclipse, ele já vai usar a JVM do Notes, estando disponíveis todos comandos vindos do Notes para Java Agent. Mas também precisamos usar essa JVM na hora de executar o programa e debugar.
Vá em Run > Run Configurations.

Dê um clique duplo em Java Application para criar uma nova configuração. Coloque o nome que quiser (usei JavaAgent), selecione seu projeto e a Main Class.

Vá na aba Arguments e, caso o Working Directory não esteja já definido para o diretório de seu Notes, clique em Other e o selecione.



Certifique-se de que em JRE esteja selecionado em Runtime JRE: Project JRE (<nome que você colocou na jvm>).

Clique em Apply e Close. Agora você pode programa e debugar seu Java Agent no Eclipse.
Agora apenas modifique a linha:
db = sess.getDatabase("", "nomeDaDatabase.nsf");
colocando o nome/caminho de sua database.
Programe seu Java Agent apartir da linha:
//Your code goes here!!!

-------------------------------------------------------------
Fonte: http://www.bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse
Adaptação: Fernando Camargo