データベースにアクセスする際に、導入されるデータベースの保存されているディレクトリが何かの事情で変わってもいいように、フルパスでハードコードすることはやはりしない方がいいことです。
そこで、パスを実行時に取得するための方法をご紹介してみたいと思います。
ここでの前提はエージェントが起動されたデータベースが保存されているディレクトリに、また他のデータベースがあり、それをアクセスしに行く、というものです。
あるディレクトリにまとめてデータベース群を導入する、というのは通常行われることですので、それにあわせて作ってみました。
まず最初に現在のコンテキストでデータベースオブジェクトを作成します。
Database dbCur = agentContext.getCurrentDatabase();
そのデータベースオブジェクトに対して、そのファイルパスを getFilePath で取得します。
以下の処理ではファイル名の部分を引いて、パス部分のみを抜き出す処理をしています。
String strDBPath = dbCur.getFilePath().substring(0, dbCur.getFilePath().length() - dbCur.getFileName().length());
セッションオブジェクトからサーバー名を取得し、ファイル名を先ほど取得したパスにつけてアクセスします。
String strServer = session.getServerName() ;
Database db = session.getDatabase( strServer, strDBPath + "DatabaseFile.nsf");
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
Database dbCur = agentContext.getCurrentDatabase();
String strDBPath = dbCur.getFilePath().substring(0, dbCur.getFilePath().length() - dbCur.getFileName().length());
String strServer = session.getServerName();
String strDBFile = strDBPath + "JBasic.nsf";
Database db = session.getDatabase( strServer, strDBPath + "JBasic.nsf");
// Database db = session.getDatabase( strServer, strDBFile);
Document doc = agentContext.getDocumentContext();
getAgentOutput().println("Content-type: text/html");
getAgentOutput().println("<br><br>");
getAgentOutput().println("<h2>パス取得のテスト</h2><br>");
getAgentOutput().println("サーバー名 ==> " + strServer +"<br>");
getAgentOutput().println("DBパス ==> " + strDBPath +"<br>");
getAgentOutput().println("ファイル名 ==> " + strDBFile +"<br>");
} catch(Exception e) {
e.printStackTrace();
}
}
}
ファイル名やパス名がどうなっているかを見てみましょう。

|
|