2016-03-31 13 views
6

スケジュールされたJavaエージェントからトリガすることでXagentをスケジュールどおりに実行しようとしています。Domino JavaエージェントからXagentをスケジュールするにはどうすればよいですか?

次は、単に私にメールを送り、私のxagentmail.xspのためのコードです:

<?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", "[email protected]"); 
doc.send(); 

}]]></xp:this.beforePageLoad> 
</xp:view> 

デヴィン・オルソンさんのブログ、Scheduled Xagentsで説明したSSL暗号化接続のアプローチを使用して、私は次のスケジュールのDominoのJavaを作成しましたエージェント:

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 
    } 
} 
} 

xagentmail.xspにブラウザのURLを入力すると、期待どおりのメールが届きます。

しかし、私のスケジュールされたJavaエージェントは、Xagentを起動してメールを送信していません。

私は、エージェントとxagentの両方を使用して、アプリケーションに対してReaderへの匿名アクセスを設定しました。私はまた、サーバー上の制限付きおよび制限なしの特権を持っています。

アイデア?

+0

サーバーコンソールからエージェントを実行するとどうなりますか? – xpagesbeast

+0

(1,2,3)でエージェントを実行しているセキュリティレベルは? –

+0

実際には、現在、顧客の開発サーバーでブラインドが実行されています。コンソールアクセスはオプションではありません。テストサーバーに移動する必要があります。 –

答えて

5

私は素晴らしい動作する以下のアプローチを使用します:私はBufferedWriterの代わりにHttpURLConnectionを使用し、ポート80でローカルホストと直接通信するためにlocalhostを使用します。

は、ここに私のエージェント・コードです:

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(); 
     } 
    } 
} 

そして、ここでは、エージェントが使用するXAgentクラスです:

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(); 
     } 
    } 
} 
エージェントは、ランタイムセキュリティレベルで実行する必要がある

何のメッセージ2.

+0

このサイトは現在Web Configurationsで設定されています。ウェブ設定を使用してローカルインターネットサイトを設定することはできますか?あなたはどうやってそれをしますか? –

+0

単に "localhost"をドメイン名として使用してください。 –

+0

ありがとうございます、私はそれを試みます...今すぐ管理者と話す必要があります! –

関連する問題