How to assign Xagent from a Domino Java agent?

Trying to get Xagent to run on schedule by starting from a scheduled Java agent.

Below is the code for my xagentmail.xsp, which just sends me an email:

<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> <xp:this.beforePageLoad><![CDATA[#{javascript: // test send mail doc = database.createDocument() ; doc.replaceItemValue("Form", "memo"); doc.replaceItemValue("Subject", " from xagentmail.xsp"); doc.replaceItemValue("SendTo", " PDella-Nebbia@testdomain.com "); doc.send(); }]]></xp:this.beforePageLoad> </xp:view> 

Using the SSL-ENCRYPTED connection approach described on Devin Olson's Scheduled Xagents blog , I created the following Domino Java scheduled agent:

 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import javax.net.ssl.SSLSocketFactory; import lotus.domino.AgentBase; public class JavaAgent extends AgentBase { // Change these settings below to your setup as required. static final String hostName = "server1.testdomain.com"; static final String urlFilepath = "/test/poidemo.nsf/xagentmail.xsp"; static final int sslPort = 443; public void NotesMain() { try { final SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); final Socket socket = factory.createSocket(JavaAgent.hostName, JavaAgent.sslPort); final BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); final StringBuilder sb = new StringBuilder(); sb.append("GET "); sb.append(JavaAgent.urlFilepath); sb.append(" HTTP/1.1\n"); final String command = sb.toString(); sb.setLength(0); sb.append("Host: "); sb.append(JavaAgent.hostName); sb.append("\n\n"); final String hostinfo = sb.toString(); out.write(command); out.write(hostinfo); out.flush(); in.close(); out.close(); socket.close(); } catch (final Exception e) { // YOUR_EXCEPTION_HANDLING_CODE } } } 

When I enter the URL in the browser to my xagentmail.xsp, I receive the mail as expected.

But my planned Java agent does not start Xagent to send mail.

I set up anonymous Reader access for the application with both the agent and xagent. I also have limited and unlimited privileges on the server.

Any ideas?

+6
source share
1 answer

I use the following approach, which works fine: I use HttpURLConnection instead of BufferedWriter, and I use localhost on port 80 to talk directly to the server.

Here is my agent code:

 import lotus.domino.AgentBase; import lotus.domino.Session; public class JavaAgent extends AgentBase { @Override public void NotesMain() { try { final String xpageName = "demo"; Session session = getSession(); dk.fmcgsolutions.XAgent.run(session.getAgentContext(), xpageName); } catch (Exception e) { e.printStackTrace(); } } } 

And here is the XAgent class that the agent uses:

 package dk.fmcgsolutions; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import lotus.domino.AgentContext; public class XAgent { public static void run(AgentContext agentContext, String xpageName) { try { String dbPath = agentContext.getCurrentDatabase().getFilePath(); String url = "http://localhost/" + dbPath + "/" + xpageName + ".xsp"; System.out.println("Starting " + xpageName + " in database " + dbPath); URL xPageURL = new URL(url); HttpURLConnection conn = (HttpURLConnection) xPageURL.openConnection(); conn.connect(); switch (conn.getResponseCode()) { case HttpURLConnection.HTTP_OK: // read from the urlconnection via the bufferedreader BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println("Response: " + line); } bufferedReader.close(); break; case HttpURLConnection.HTTP_INTERNAL_ERROR: System.out.println("Interal server error while running"); break; default: System.out.println("An error occurred: " + conn.getResponseCode()); System.out.println("Error message: " + conn.getResponseMessage()); break; } conn.disconnect(); System.out.println("Finished " + xpageName + " in database " + dbPath); } catch (Exception e) { e.printStackTrace(); } } } 

The agent must be run with security level at run time 2.

+5
source

All Articles