
This post way sparked by a post in the Notes/Domino forum on developerWorks.
Let me start by saying that you could probably use the AgentRunner if you can figure it out and if it still works. I haven’t used it for a LONG time and I doubt that it still works with the changes made to the Java API in Notes/Domino 6.x and 7.x. The Using Document of the AgentRunner database hasn’t been updated since 1999!! Anyways – there are other options.
Write the code in a separate class hierarchy
The first one is to write the agent functionality in separate classes and then have the agent code call these classes to do its job. This is a viable approach though it means you have to maintain the actual business code and the agent code in separate places (the business code in Eclipse and the agent code in Notes/Domino).
Extend lotus.domino.AgentBase
Another option is to extend the AgentBase class and implement some of the intializing functionality yourself for testing. The approach isn’t optimal and still makes you implement some boilerplate code but it’s a start and a viable option for writing and testing your agents in Eclipse. The new AgentBase class can be made to detect whether it runs inside Eclipse or inside Notes/Domino so it’s easy to move the code into Notes/Domino once it works.
The boilerplate code has to do with initializing a thread to Notes in a main() method before calling the NotesMain() method of your agent class. The below example shows the required boilerplate code for the ExampleAgent1 class:
public static void main(String[] args) {
try {
NotesThread.sinitThread();
new ExampleAgent1().NotesMain();
} catch (Exception e) {
e.printStackTrace();
} finally {
NotesThread.stermThread();
}
}
The new AgentBase class (called EclipseAgentBase) means you can write agents in Eclipse. The only change is that you extend EclipseAgentBase instead of AgentBase:
import lotus.domino.NotesThread;
import lotus.domino.Session;
public class ExampleAgent1 extends EclipseAgentBase {
public static void main(String[] args) {
try {
NotesThread.sinitThread();
new ExampleAgent1().NotesMain();
} catch (Exception e) {
e.printStackTrace();
} finally {
NotesThread.stermThread();
}
}
public void NotesMain() {
try {
Session session = this.getSession();
System.out.println("Username: " + session.getUserName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
In the next part of the post I’ll dive into how do build the EclipseAgentBase class.