小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java 對(duì) Domino Objects 的訪問(wèn),第 2 部分

 smoking_boy 2005-09-08
本文是由兩部分組成的系列文章的第 2 部分:本文將介紹使用 Domino Objects 開(kāi)發(fā) Java 應(yīng)用程序中涉及的一些高級(jí)主題,其中包括 SSL 加密、servlet、連接池、單點(diǎn)登錄、會(huì)話超時(shí)和回收,本文還給出了一些故障檢修技術(shù)。

本文是由兩部分組成的系列文章的第 2 部分。在本系列文章的 第 1 部分中,您了解了本地和遠(yuǎn)程地從 Java 應(yīng)用程序使用 Domino Objects 的一些基礎(chǔ)知識(shí)。本文中您將了解 SSL 加密、servlet、連接池、單點(diǎn)登錄、會(huì)話超時(shí)和回收。文中還包括關(guān)于故障檢修的一個(gè)部分。本文假設(shè)您熟悉 Domino Java API,并已經(jīng)閱讀了第一篇文章。

SSL 加密
本系列文章的前一篇文章討論了在本地或遠(yuǎn)程運(yùn)行 Java 應(yīng)用程序。遠(yuǎn)程調(diào)用需要 HTTP 和 DIIOP 訪問(wèn)權(quán)。可以使用 SSL (Secure Sockets Layer) 對(duì)通過(guò) DIIOP 端口的傳輸進(jìn)行加密。有關(guān)如何設(shè)置 DIIOP 的說(shuō)明,請(qǐng)參閱前一篇文章。客戶機(jī)代碼通過(guò)在 createSession 調(diào)用中指定新的第二個(gè)參數(shù)來(lái)表明加密要求。該參數(shù)是一個(gè) String 數(shù)組,第一個(gè)元素將 -ORBEnableSSLSecurity 作為其值,例如:

String args[] = new String[1];
args[0] = "-ORBEnableSSLSecurity";
Session s = NotesFactory.createSession
("myhost.east.:63148", args, 
"Jane Smith/East/Acme", "topS3cr3t");

仍然使用非 SSL 端口(上例中為 63148)來(lái)獲得 IOR。實(shí)際服務(wù)請(qǐng)求是通過(guò) DIIOP SSL 端口進(jìn)行的,默認(rèn)情況下,該端口為 63149。
運(yùn)行代碼之前,必須設(shè)置有一個(gè)從證書(shū)權(quán)威機(jī)構(gòu)獲得的通用受信任的根證書(shū)的服務(wù)器和客戶機(jī)。最好將這個(gè)過(guò)程分為一系列的步驟來(lái)講述。

步驟 1
創(chuàng)建密鑰環(huán)(key ring)。打開(kāi) Domino 服務(wù)器中的 Server Certificate Admin (certsrv.nsf) 數(shù)據(jù)庫(kù),使用其表單創(chuàng)建和填充密鑰環(huán)。有關(guān)的詳細(xì)信息,請(qǐng)參閱 Administering the Domino System, Volume 2 或 Domino Administrator Help。為了進(jìn)行測(cè)試,可以使用 CertAdminCreateKeyringWithSelfCert 表單創(chuàng)建具有自我認(rèn)證證書(shū)的密鑰環(huán)。

步驟 2
將密鑰環(huán)移至服務(wù)器。密鑰環(huán)包含密鑰環(huán)文件(KYR 文件)和存儲(chǔ)文件(STH 文件)。在訪問(wèn) Server Certificate Admin 數(shù)據(jù)庫(kù)的計(jì)算機(jī)上生成這些文件。將這兩個(gè)密鑰環(huán)文件移至或復(fù)制到包含 Domino 服務(wù)器的計(jì)算機(jī)上。將它們放在服務(wù)器的數(shù)據(jù)目錄中。例如,如果使用默認(rèn)名稱(chēng)創(chuàng)建具有自我認(rèn)證證書(shū)的密鑰環(huán),并將文件復(fù)制到服務(wù)器的數(shù)據(jù)文件安裝在 C:\Lotus\Domino\Data 中的計(jì)算機(jī)上,那么服務(wù)器文件將為:

C:\Lotus\Domino\Data\selfcert.kyr C:\Lotus\Domino\Data\selfcert.sth.

步驟 3
將 TrustedCerts.class 復(fù)制到客戶機(jī)中并將其放在類(lèi)路徑中。一旦密鑰環(huán)文件位于服務(wù)器中,啟動(dòng)或重新啟動(dòng) DIIOP 任務(wù)會(huì)在 Domino 數(shù)據(jù)目錄中生成名為 TrustedCerts.class 的文件。將該文件分布到任何計(jì)算機(jī)中,您將從這臺(tái)計(jì)算機(jī)使用 CORBA 通過(guò) SSL 訪問(wèn)服務(wù)器,并將包含該文件的目錄放在類(lèi)路徑中。例如,如果將文件復(fù)制到客戶機(jī)的 C:\Lotus\TrustedCerts.class 中,那么設(shè)置類(lèi)路徑將如下所示:

set classpath := %classpath%;c:\lotus

步驟 4
為服務(wù)器啟用 SSL。在服務(wù)器的 Domino Directory 的 Server 文檔中,轉(zhuǎn)至 Ports 選項(xiàng)卡,然后轉(zhuǎn)至 Internet Ports 選項(xiàng)卡。在 SSL 設(shè)置下,指定 SSL 密鑰文件名(例如,selfcert.kyr)。再轉(zhuǎn)至 DIIOP 選項(xiàng)卡。確保 SSL 端口號(hào)正確 —— 默認(rèn)端口號(hào)為 63149。啟用 SSL 端口。并根據(jù)需要設(shè)置 Name & password 和 Anonymous 身份驗(yàn)證。

Servlet
Domino 服務(wù)器 HTTP 任務(wù)通過(guò)加載 servlet 引擎和 JVM 來(lái)支持 servlet。在 Domino Directory 的 Server 文檔中,轉(zhuǎn)至 Internet Protocols 選項(xiàng)卡、Domino Web Engine 選項(xiàng)卡和 Java Servlets 選項(xiàng)卡進(jìn)行設(shè)置。Domino Designer Help 文檔“Running servlets in Domino”提供了一般情況的詳細(xì)說(shuō)明。下面是 Server 文檔上面部分的示例:

圖 1. Server 文檔
Server 文檔

默認(rèn)情況下,Domino 在 domino\servlet 下的數(shù)據(jù)目錄中查找 servlet 可執(zhí)行代碼。例如,如果名為 domino\servlet 的文件中包含可執(zhí)行 servlet,那么可以按如下所示將其存儲(chǔ)在服務(wù)器上:

c:\lotus\domino\data\domino\servlet\MyServlet.class

從瀏覽器(默認(rèn)情況下),通過(guò)在 URL 中指定 /servlet 和類(lèi)文件的名稱(chēng)來(lái)運(yùn)行 servlet。例如:

http://myhost.east./servlet/MyServlet

如果正在訪問(wèn) Domino Objects,還有考慮其他兩點(diǎn)。首先,對(duì)于遠(yuǎn)程訪問(wèn),服務(wù)器的 Notes.ini 文件必須為變量 JavaUserClasses 指定 NCSO 歸檔文件。該變量是由 HTTP 任務(wù)加載的 JVM 的類(lèi)路徑。典型規(guī)范應(yīng)該為:

JavaUserClasses=c:\lotus\domino\data\domino\java\NCSO.jar

其次,在本地訪問(wèn) Domino Objects 的代碼必須使用 NotesThread。因?yàn)槠渌椒o(wú)法在 servlet 中使用,所以在使用任何 Domino Objects 之前先調(diào)用 NotesThread.sinitThread,然后調(diào)用 NotesThread.stermThread。下列代碼示范了在本地訪問(wèn) Domino Objects 的簡(jiǎn)單 servlet:

import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;
public class MyServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,    
    HttpServletResponse response) throws IOException    
    {    
    try    
    {    
    NotesThread.sinitThread();    
    Session s1 = NotesFactory.createSession();    
    String name = s1.getUserName();    
    response.setContentType("text/html");    
    ServletOutputStream out = response.getOutputStream();    
    out.println("<HTML><B>Information from servlet:</B><BR>");    
    out.println("<BR>Name = " + name);    
    }    
    catch (Exception e)    
    {    
    e.printStackTrace();    
    }    
    finally    
    {    
    NotesThread.stermThread();    
    }    
    }
}

Java 類(lèi)的本地訪問(wèn)僅需要 HTTP。必須運(yùn)行 HTTP 任務(wù),這樣瀏覽器才可以訪問(wèn)服務(wù)器,從而調(diào)用 servlet。無(wú)需使用 DIIOP 任務(wù)。對(duì)于遠(yuǎn)程訪問(wèn),必須同時(shí)運(yùn)行 DIIOP 任務(wù)。編碼將相對(duì)簡(jiǎn)單,因?yàn)椴皇褂?NotesThread。極有可能您將不使用遠(yuǎn)程類(lèi)從同一臺(tái)計(jì)算機(jī)訪問(wèn) Domino。首選是本地類(lèi)。然而,可以從不同計(jì)算機(jī)上運(yùn)行的其他 servlet 管理器(例如,WebSphere)來(lái)使用遠(yuǎn)程類(lèi)。下面是一個(gè)模板:

import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;
public class MyServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,    
    HttpServletResponse response) throws IOException    
    {    
    try    
    {    
    Session s1 = NotesFactory.createSession("myserver.east.");    
    String name = s1.getUserName();    
    s1.recycle();    
    response.setContentType("text/html");    
    ServletOutputStream out = response.getOutputStream();    
    out.println("<HTML><B>Information from servlet:</B><BR>");    
    out.println("<BR>Name = " + name);    
    }    
    catch (Exception e)    
    {    
        e.printStackTrace();
    }    
    }
}

連接池
連接池允許使用同一 ORB (Object Reference Broker) 創(chuàng)建多個(gè)會(huì)話,因?yàn)樗袝?huì)話共享一個(gè) TCP/IP 連接,所以這將減少網(wǎng)絡(luò)資源。在 servlet 應(yīng)用程序和服務(wù)器到服務(wù)器的應(yīng)用程序中,連接池特別有用??梢允褂?NotesFactory createORB 方法之一生成 ORB。然后使用帶有 ORB 參數(shù)的 createSession 方法創(chuàng)建會(huì)話。

這里存在的危險(xiǎn)是過(guò)度加載網(wǎng)絡(luò)連接?;ㄙM(fèi)很長(zhǎng)時(shí)間的某一會(huì)話上的操作會(huì)妨礙共享 ORB 的其他會(huì)話上的操作。創(chuàng)建的會(huì)話數(shù)不要超過(guò)連接可以處理的數(shù)目,當(dāng)完成一個(gè)會(huì)話時(shí)要對(duì)其進(jìn)行回收。

下列代碼是一個(gè)簡(jiǎn)單示例,該示例使用了一個(gè) ORB,以及多達(dá) 10 個(gè)的 Domino 會(huì)話。第一次運(yùn)行 servlet 時(shí)以及每第十次運(yùn)行 servlet 之后,servlet 都會(huì)創(chuàng)建新的 ORB。示例使用了下一節(jié)中將介紹的 SSO。

import java.util.*;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;
public class ConnPool3 extends HttpServlet
{
    Session s = null;    
    Static org.omg.CORBA.ORB orb = null;    
    Static int count = 0;    
    Static Object sem = new Object;
    public void doGet(HttpServletRequest request,    
    HttpServletResponse response) throws IOException    
    {    
    try    
        {
    synchronized (sem)    
    {    
    if ((orb == null) || ((count++ % 10) == 0))    
        orb = NotesFactory.createORB();        
                }
    s = NotesFactory.createSession("myhost1.east.:63148", 
    orb,request);
    String name = s.getUserName();    
    s.recycle();
    response.setContentType("text/html"); 
    ServletOutputStream out = response.getOutputStream();    
    out.println("<HTML><B>Information from servlet:</B><BR>");
    out.println("<BR>Name = " + name);    
    out.println("<BR>Count = " + count);    
         }        
              catch (Exception e)            
              {            
                    e.printStackTrace();                
                    }
                    }            
              }

SSO(單點(diǎn)登錄)
單點(diǎn)登錄允許通過(guò)一臺(tái)服務(wù)器上的一次登錄,來(lái)訪問(wèn)多個(gè) Domino 和 WebSphere 服務(wù)器。訪問(wèn)的服務(wù)器必須像 Administering the Domino System, Volume 2 或 Domino Administrator 幫助中說(shuō)明的那樣設(shè)置了 SSO。您還可以參閱紅皮書(shū) Domino and WebSphere Together Second Edition 。

下列簽名在通過(guò) Domino 或 WebSphere 服務(wù)器的預(yù)先身份驗(yàn)證之后創(chuàng)建了一個(gè) SSO 會(huì)話。

  • Session s = createSession(host, String) 的訪問(wèn)以先前從 Session.getSessionToken 獲得的 String 令牌以及 servlet 中的 WebSphere 或 HTTP cookie 列表使用的 LtpaToken cookie 為基礎(chǔ)。
  • Session s = createSession(host, Credentials) 的訪問(wèn)以 org.omg.SecurityLevel2.Credentials 對(duì)象為基礎(chǔ)。該方法在 WebSphere 環(huán)境中使用,在其中使用 loginHelper 創(chuàng)建 Credentials 對(duì)象。
  • Session s = createSession(host, null) 的訪問(wèn)以 WebSphere 環(huán)境中的當(dāng)前 Credentials 對(duì)象為基礎(chǔ)??梢詮?WebSphere 中的 EJB (Enterprise JavaBeans) 使用該方法。
  • Session s = createSession(host, HttpServletRequest) 的訪問(wèn)以 Domino Web 服務(wù)器的身份驗(yàn)證為基礎(chǔ)。

下列代碼說(shuō)明了基本知識(shí)。它使用名稱(chēng)和密碼訪問(wèn)服務(wù)器,獲得 SSO 令牌,然后使用該令牌訪問(wèn)同一 SSO 域中的其他服務(wù)器。

import lotus.domino.*;
public class sso1 implements Runnable
{ 

   public static void main(String argv[])
   {
   sso1 t = new sso1();
   Thread nt = new Thread((Runnable)t);
   nt.start();
   }
   public void run()
   {
   String token = null;
   try 
      { 
          String host1 = "myhost1.east.:63148";
          String name = "Jane Smith/East/Acme";
          String pw = "topS3cr3t";
          Session s = NotesFactory.createSession(host1, name, pw);
          token = s.getSessionToken();
          s.recycle();
      } 
          catch(Exception e)
          {
          e.printStackTrace();
          }
   try 
      { 
          String host2 = "myhost2.east.:63148";
          Session s = NotesFactory.createSession(host2, token);
          System.out.println(s.getUserName());
      } 
          catch(Exception e)
          {
          e.printStackTrace();
          }
          }
      }

接下來(lái)的代碼是一個(gè) servlet 示例,從 HTTP cookie 列表中取得 SSO 令牌。


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;

public class sso13 extends HttpServlet
{ 
	public void doGet (HttpServletRequest request,
	HttpServletResponse response)
	throws ServletException, IOException
	{ 
		Cookie[] cookies = null;
		String sessionToken = null;
		try 
		{ 
			cookies = request.getCookies();
		} 
		catch (Exception e)
		{ 
			e.printStackTrace();
		} 
		if (cookies != null)
		{ 
			for (int i = 0; i < cookies.length; i++)
			{ 
				if (cookies[i].getName().equals("LtpaToken"))
				{ 
					sessionToken = cookies[i].getValue();
				}
			}
		} 
		if (sessionToken != null)
		{ 
			try
			{
				NotesThread.sinitThread();
				Session session = NotesFactory.createSession(null, sessionToken);
				response.setContentType("text/plain");
				ServletOutputStream out = response.getOutputStream();
				out.println("UserName: " + session.getUserName());
			} 
			catch (NotesException e)
			{ 
				e.printStackTrace();
			}
			finally 
			{ 
				NotesThread.stermThread();
			}
		}
	}
} 
      		

會(huì)話超時(shí)
對(duì)于遠(yuǎn)程會(huì)話,服務(wù)器都會(huì)有最大空閑時(shí)間的限制。如果一個(gè)會(huì)話的空閑時(shí)間超過(guò)這個(gè)限制,服務(wù)器將中止此會(huì)話并釋放資源。在 Server 文檔里,可以在 Internet Protocols -〉DIIOP 標(biāo)簽的 Idle session timeout 域里設(shè)置這個(gè)值,默認(rèn)值是 60 分鐘。

圖 2. Server 文檔
Server 文檔

在客戶端代碼里,使用 Session.isValid() 方法來(lái)判斷一個(gè)遠(yuǎn)程會(huì)話是否可用。如果遠(yuǎn)程會(huì)話已經(jīng)超時(shí),isValid() 方法將返回 false 值。下面的例子將創(chuàng)建一個(gè)遠(yuǎn)程會(huì)話,然后重新訪問(wèn)此會(huì)話。在條件語(yǔ)句中將判斷這個(gè)會(huì)話是否仍然可用,如果不可用,程序?qū)⒅匦聞?chuàng)建一個(gè)會(huì)話。


import lotus.domino.*;
public class isvalidTest implements Runnable
{ 
	String host=null, user="", pwd="";
	Session s = null;
	public static void main(String argv[])
	{ 
		if(argv.length < 1)
		{ 
			System.out.println("Need to supply Domino server name");
			return;
		} 
		isvalidTest t = new isvalidTest(argv);
		Thread nt = new Thread((Runnable)t);
		nt.start();
	} 

	public isvalidTest(String argv[])
	{ 
		host = argv[0];
		if(argv.length >= 2) user = argv[1];
		if(argv.length >= 3) pwd = argv[2]; 
	} 

	public void run()
	{ 
		try
		{ 
			s = NotesFactory.createSession(host, user, pwd);
			String p = s.getPlatform();
			System.out.println("Platform = " + p);
		} 
		catch(Exception e)
		{ 
			e.printStackTrace();
		}
		// Later the same day

		try 
		{ 
			if (!s.isValid())
				s = NotesFactory.createSession(host, user, pwd);
			String n = s.getUserName();
			System.out.println("Username = " + n);
		} 
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
			

isValid() 方法將激活會(huì)話,而該會(huì)話將重置超時(shí)時(shí)鐘。

回收
Java 不認(rèn)識(shí)重量級(jí)后端 Domino Objects,僅認(rèn)識(shí)表示這些對(duì)象的輕量級(jí) Java 對(duì)象。對(duì)于本地類(lèi),Domino Objects 在運(yùn)行 Java 程序的過(guò)程中使用了內(nèi)存,如果不回收這些內(nèi)存,就不會(huì)發(fā)生垃圾收集,直到程序退出。內(nèi)存使用在下列情況下可能存在一些問(wèn)題:

  • 程序運(yùn)行了很長(zhǎng)的時(shí)間
    尤其在 servlet 屬于這類(lèi)程序的時(shí)候。
  • 程序?qū)?Domino Objects 進(jìn)行迭代
    處理文檔的循環(huán)屬于這類(lèi)迭代的時(shí)候。

所有 Domino Objects 都有回收方法?;厥辗椒▽⒔K止當(dāng)前對(duì)象及其所有子對(duì)象,并釋放它們的內(nèi)存。在內(nèi)存使用可能存在問(wèn)題的時(shí)候,強(qiáng)烈建議對(duì)內(nèi)存進(jìn)行回收。例如,可以將下列語(yǔ)句(其中會(huì)話是 Session 對(duì)象)放在 servlet 中 doGet 代碼的后面。這樣將在每次調(diào)用 servlet 后回收所有使用的 Domino Objects。

session.recycle();

可以將下列語(yǔ)句放在處理文檔(其中 doc 是 Document 對(duì)象)的循環(huán)(在任何應(yīng)用程序中)的后面。這樣將在每次調(diào)用時(shí)回收 Document 對(duì)象及其所有子對(duì)象(如 Item)。

doc.recycle();

對(duì)于遠(yuǎn)程 Domino Objects,回收沒(méi)有這樣重要。那時(shí)內(nèi)存使用是在 DIIOP 過(guò)程中,由線程執(zhí)行垃圾收集。如果失去 TCP/IP 連接,整個(gè)會(huì)話都將被自動(dòng)回收。

回收也有下列簽名:

recycle(java.util.Vector objects)

其中 vector 包含 Domino Objects。該簽名有效地對(duì)回收請(qǐng)求進(jìn)行批處理,提高遠(yuǎn)程調(diào)用的效率。
在進(jìn)行回收時(shí),請(qǐng)遵守下列指導(dǎo)原則:

  • 僅當(dāng)對(duì)象不再需要時(shí)才能進(jìn)行回收。
  • 對(duì)于本地 Domino Objects,在創(chuàng)建對(duì)象的線程中回收該對(duì)象。
  • 對(duì)于 Session 中的本地 Domino Objects,僅在其他所有線程都退出后才能調(diào)用 recycle()。
  • 使用 NotesThread.sinitThread() 和 NotesThread.stermThread() 時(shí),在 stermThread 之前調(diào)用 recycle()。
  • 如果多個(gè)對(duì)象都表示同一 Domino 對(duì)象,回收一個(gè)對(duì)象就會(huì)回收所有對(duì)象。
  • 如果試圖使用回收的對(duì)象,結(jié)果是不明確的??赡軟](méi)有錯(cuò)誤。

故障檢修
下一節(jié)將介紹一般問(wèn)題的故障檢修方案。

類(lèi)路徑和路徑
確保代碼可以訪問(wèn)必需的類(lèi)。假設(shè) Notes 和 Domino 軟件安裝在 c:\lotus\domino 中,那么類(lèi)路徑和路徑必須按如下所示方式進(jìn)行設(shè)置:

環(huán)境 類(lèi)路徑 路徑
本地應(yīng)用程序或 servlet c:\lotus\domino\Notes.jar c:\lotus\domino
遠(yuǎn)程應(yīng)用程序或 servlet c:\lotus\domino\data\domino\java\NCSO.jar 不適用

對(duì)于本地類(lèi)來(lái)說(shuō),PATH 是重要的,因?yàn)?Notes.jar 需要使用 Notes/Domino 二進(jìn)制文件和 Notes.ini。

如果從沒(méi)有 Domino 軟件的計(jì)算機(jī)遠(yuǎn)程訪問(wèn) Domino,必須將 NCSO 歸檔文件復(fù)制到該計(jì)算機(jī)中。類(lèi)路徑應(yīng)該反映歸檔文件在該計(jì)算機(jī)中的位置。

對(duì)于 SSL,類(lèi)路徑必須指定包含 TrustedCerts.class 的文件夾。

遠(yuǎn)程計(jì)算機(jī)
要遠(yuǎn)程使用 Domino Objects,必須運(yùn)行遠(yuǎn)程計(jì)算機(jī),必須運(yùn)行 Domino 服務(wù)器,客戶機(jī)計(jì)算機(jī)必須使用正確的主機(jī)名稱(chēng)或 IP 地址。

在 Windows 中,如果有權(quán)訪問(wèn)服務(wù)器計(jì)算機(jī),可以通過(guò)下列 DOS 命令獲取諸如主機(jī)名稱(chēng)、DNS 服務(wù)器和 IP 地址之類(lèi)的信息:

> ipconfig/all

在客戶機(jī)計(jì)算機(jī)中,必須能夠訪問(wèn)服務(wù)器計(jì)算機(jī)??梢試L試 ping 命令:

> ping hostname

或者

> ping ipaddress

如果無(wú)法 ping 遠(yuǎn)程計(jì)算機(jī),那么是網(wǎng)絡(luò)有問(wèn)題??赡苁俏锢砭W(wǎng)絡(luò)連接、網(wǎng)絡(luò)設(shè)置或輸入的名稱(chēng)存在問(wèn)題。必須解決這些問(wèn)題,才能繼續(xù)進(jìn)行后面的操作。

如果可以 ping 遠(yuǎn)程計(jì)算機(jī),嘗試 telnet 命令來(lái)查看遠(yuǎn)程計(jì)算機(jī)監(jiān)聽(tīng)的端口是否正確。對(duì)于 HTTP,默認(rèn)端口是 80,對(duì)于 DIIOP,默認(rèn)端口為 63148。

> telnet host port

如果能夠 ping 計(jì)算機(jī),但不能 telnet 端口,那么可能是發(fā)生了下列情況之一:

  • 未運(yùn)行 Domino Server。
  • 運(yùn)行了服務(wù)器,但是沒(méi)有運(yùn)行 HTTP 或 DIIOP 任務(wù)。

如果通過(guò) Web 服務(wù)器端口訪問(wèn) IOR,應(yīng)該能夠使用下列 URL 從瀏覽器訪問(wèn) Domino Server:

http://hostname

應(yīng)該能夠使用下列 URL 查看 IOR 文件:

http://hostname:port/diiop_ior.txt

如果有權(quán)訪問(wèn) Domino Server,可以使用下列控制臺(tái)命令檢查 DIIOP 任務(wù):

> tell diiop show config

下面是一些典型輸出:

> tell diiop show config
Dump of Domino IIOP (DIIOP) Configuration Settings

Full Server Name:  CN=Buffalo/O=Zoo
Common Server Name:  Buffalo/Zoo
Refresh Interval:  3 minutes

Host Full Name:  Buffalo.myCompany.com
Host Short Name:  Buffalo
Host Address:  9.99.99.999
Public Host Name/Address:  9.99.99.999

TCP Port:  63148  Enabled
SSL Port:  63149  Enabled
Initial Net Timeout: 120 seconds
Session Timeout:  60 minutes
Client Session Timeout:  62 minutes

IOR File:  d:\dom60x\data\domino\html\diiop_ior.txt
SSL Key File:  d:\dom60x\data\mykeyfile.kyr
Java Key File:  d:\dom60x\data\domino\java\TrustedCerts.class

Allow Ambiguous Names:  False
Web Name Authentic:  False
User Lookup View:  ($Users)
Allow Database Browsing:  True
TCP Name/Password Allowed:  True
TCP Anonymous Allowed:  True
SSL Name/Password Allowed:  True
SSL Anonymous Allowed:  True
Multi-Server Session Authentication:  Enabled
Multi-Server Session Configuration:  mySSOConfig

Internet Sites:  Disabled

Single Server Cookies:  Disabled

錯(cuò)誤消息
下面是一些錯(cuò)誤消息和可能的解釋。

HTTP JVM java.lang.ClassNotFoundException and HTTP JVM java.lang.NoClassDefFoundError
這些消息顯示在服務(wù)器控制臺(tái)上。它們指明客戶機(jī)正在嘗試使用遠(yuǎn)程類(lèi),但未在服務(wù)器中的 Notes.ini 中指定該 JavaUserClasses。

NotesException: Could not get IOR from Domino Server: java.net.ConnectException: Connection refused
該錯(cuò)誤消息指出存在下列情況之一:

  • 未運(yùn)行服務(wù)器。
  • 未運(yùn)行 HTTP 任務(wù),代碼通過(guò) HTTP 端口獲得 IOR。
  • 未運(yùn)行 DIIOP 任務(wù),代碼通過(guò) DIIOP 端口獲得 IOR。
  • 指定了 IP 端口,但該端口不正確。

NotesException: Could not get IOR from Domino Server: java.net.ConnectException: Operation timed out
在條錯(cuò)誤消息指出存在網(wǎng)絡(luò)配置錯(cuò)誤。

NotesException: Could not get IOR from Domino Server: java.net.UnknownHostException
這條錯(cuò)誤消息指出存在下列情況之一:

  • 未正確指定計(jì)算機(jī)名稱(chēng)或 IP 地址。
  • 未運(yùn)行計(jì)算機(jī)。

NotesException: Could not open Notes session: org.omg.CORBA.COMM_FAILURE: java.net.ConnectException: Connection refused
這條錯(cuò)誤消息指出您未在服務(wù)器上運(yùn)行 DIIOP 任務(wù)。

NotesException: Invalid user name/password
這條錯(cuò)誤消息指出代碼嘗試使用未知名稱(chēng)或無(wú)效密碼訪問(wèn) Domino Directory。

NotesException: Server access denied
這條錯(cuò)誤消息指出進(jìn)行了 Anonymous 訪問(wèn),但未被允許。

NotesException: User username is not a server
這條錯(cuò)誤消息指出嘗試通過(guò)客戶機(jī)上的 Domino Directory 來(lái)運(yùn)行會(huì)話。

NotesException: Wrong Password
這條錯(cuò)誤消息指出在嘗試通過(guò) Notes ID 訪問(wèn)時(shí),代碼提供了錯(cuò)誤密碼。如果代碼不發(fā)送密碼,訪問(wèn)最初為 Anonymous。如果需要身份驗(yàn)證(例如,試圖打開(kāi)數(shù)據(jù)庫(kù)),會(huì)出現(xiàn) Lotus Notes 框來(lái)要求您輸入密碼。該框會(huì)一直顯示,直到用戶提供了正確的密碼或單擊 Cancel 為止。

Reference to createSession is ambigous
在編譯過(guò)程中會(huì)出現(xiàn)這種錯(cuò)誤消息。表明使用了 null 作為 createSession 參數(shù)。在大多數(shù)情況下,必須使用“(String)null”。

UnsatisfiedLinkError: NCreateSession
該錯(cuò)誤消息指明本地會(huì)話未使用 NotesThread。提供 NotesThread.sinitThread 和 stermThread,或者使用 NotesThread。

NotesFactory 簽名
NotesFactory createSession 方法可以創(chuàng)建本地或遠(yuǎn)程會(huì)話對(duì)象。可以使用 Notes ID 或 Domino Directory 進(jìn)行本地會(huì)話調(diào)用。遠(yuǎn)程會(huì)話使用 Domino Directory。

對(duì)于遵守下列格式的 NotesFactory 簽名:

hostname = hostname | hostname:port | ipaddress | ipaddress:port

  • 使用 Notes ID 的本地會(huì)話需要 Notes.jar 和 NotesThread。下列方法簽名用于創(chuàng)建使用 Notes ID 的本地會(huì)話。

    createSession()
    createSession((String)null)
    createSession("")
    createSession((String)null, (String)null, password)
    createSession("", (String)null, password)
    createSessionWithFullAccess() // useful on server only
    createSessionWithFullAccess(password) // useful on server only 

  • 使用 Domino Directory(僅服務(wù)器)的本地會(huì)話也需要 Notes.jar 和 NotesThread。下列方法簽名用于創(chuàng)建使用 Domino Directory 的本地會(huì)話。

    createSession((String)null, "", "") // Anonymous
    
    createSession("", "", "") // Anonymous
    createSession((String)null, username, password)
    createSession("", username, password)

  • 使用 Domino Directory 的遠(yuǎn)程會(huì)話需要 NCSO.jar 或等同文件。另外,如果客戶機(jī)使用 DIIOP 端口或 HTTP 端口獲得 IOR,必須可以通過(guò) DIIOP 端口或 HTTP 端口訪問(wèn)服務(wù)器。下列方法簽名用于創(chuàng)建使用 Domino Directory 的遠(yuǎn)程會(huì)話。

    createSession(hostname) // Anonymous
    createSession(hostname, username, password)
    createSession(hostname, -ORBEnableSSLSecurity, username, password)
    createSessionWithIOR(ior) // Anonymous
    createSessionWithIOR(ior, username, password)
    createSessionWithIOR(ior, -ORBEnableSSLSecurity, username, password)
    getIOR(hostname)

Notes.ini 變量
下列 Domino 服務(wù)器的 Notes.ini 變量會(huì)影響 DIIOP 任務(wù)。

變量 描述
DIIOPConfigUpdateInterval 指定 DIIOP 應(yīng)該檢查的時(shí)間,以刷新它在 Domino Directory 中的配置數(shù)據(jù),以分鐘表示。默認(rèn)值為 3 分鐘
DIIOPDNSLookup 確定 DIIOP 是否應(yīng)該為連接和使用 DIIOP 服務(wù)的每個(gè)客戶機(jī)進(jìn)行 DNS 名稱(chēng)查找:
1 —— 啟用 DNS 查找
2 ——(默認(rèn))禁用 DNS 查找
當(dāng)使用服務(wù)器控制臺(tái)顯示任務(wù)時(shí),可以看到這條信息
DIIOPIORHost 指定主機(jī)名稱(chēng)或 IP 地址,使用其通過(guò) DIIOP 識(shí)別服務(wù)器。默認(rèn)名稱(chēng)基于 Server 文檔中 Basics 選項(xiàng)卡下“Fully qualified Internet host name”字段。設(shè)置該值的首選方法是使用 Server 文檔中 DIIOP 和 Internet Protocols 選項(xiàng)卡下的 Host name/Address 字段。
在 R5 中,該變量稱(chēng)為 DIIOP_IOR_HOST,但它對(duì)向后兼容仍然有效
DIIOPIgnorePortLimits (僅 Linux)確定是否忽略端口限制,從而可以使用默認(rèn) DIIOP 端口 63148 和 63149。一些 Linux 系統(tǒng)設(shè)置端口限制,不允許使用 DIIOP 通常的默認(rèn)值:
1 —— 忽略限制;使用端口 63148 和 63149
2 —— 遵守限制;使用端口 60148 和 60149
在 R5 中,該變量稱(chēng)為 DIIOP_IGNORE_PORT_LIMITS,但它對(duì)向后兼容仍然有效。
DIIOPLogLevel 指定 DIIOP 向服務(wù)器控制臺(tái)和日志提供的信息的級(jí)別:
0 —— 僅顯示錯(cuò)誤和警告
1 —— 還顯示信息消息
2 —— 還顯示會(huì)話初始化和終止消息
3 —— 還顯示會(huì)話統(tǒng)計(jì)信息
4 —— 還顯示事務(wù)消息
可以在服務(wù)器控制臺(tái)中使用 tell diiop log= n 命令設(shè)置該值
DIIOPCookieCheckAddress 對(duì)于與 Domino HTTP 服務(wù)器下載的 applet 一起使用的基于服務(wù)器的 cookie,該變量確定訪問(wèn) cookie 的客戶機(jī)的 IP 地址是否必須與接收 cookie 的客戶機(jī)的 IP 地址相匹配:
0 ——(默認(rèn))不必匹配
1 —— 必須匹配
大多數(shù)情況下,客戶機(jī) IP 地址不必匹配。使用 HTTP 發(fā)出 cookie,HTTP 通常是通過(guò)代理服務(wù)器發(fā)送的。cookie 的用戶是 applet,而 applet 不通過(guò)代理服務(wù)器
DIIOPCookieTimeout 對(duì)于與 Domino HTTP 服務(wù)器下載的 applet 一起使用的基于服務(wù)器的 cookie,該變量指定每個(gè) cookie 有效的分鐘數(shù)。無(wú)法使用到期的 cookie 與 DIIOP 任務(wù)進(jìn)行會(huì)話。該變量的默認(rèn)值為 10。最小值為 1

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多