本備忘錄狀態
ThismemoprovidesinformationfortheInte.netcommunity.Itdoes
notspecifyanInternetstandardofanykind.Distributionofthis
memoisunlimited.
版權聲明
Copyright(C)TheInternetSociety(1999).AllRightsReserved.
摘要
本文檔定義JAVA對象在LDAP目錄[LDAPv3]中的表現模式。它定義了模式基本元
素來表征一個JAVA序列對象[Serial],一個JAVA整理過的對象[RMI],一個JAVA遠程對
象[RMI],一個JNDI參考[JNDI]。
1.緒論
本文假定讀者已經具備一定的JAVA編程語言知識[JAVA]。簡短起見,在整個文檔中,
我們用術語“JavaObject”來代替“objectintheJavaprogramminglanguage”。
一般地,LDAP目錄被用來存儲數據。用戶與程序員把目錄看成是具有一系列屬性的目
錄層次。你從目錄中查尋一條記錄并且抽取你所感興趣的一個或多個屬性。例如:你可
以從目錄中查尋某人的電話號碼?;蛘?,你可以在目錄中搜索具體特殊屬性的記錄。比
如,你可以在目錄中查找所有姓氏為Smith的人員。
對于用JAVA編寫的應用程序來說,一種數據典型地為JAVA對象自己共享。對那些應
用來說,它有意義于使能夠使用目錄作為JAVA對象庫。該目錄提供中心管理的,可復
制的,通過網絡分布式地為JAVA應用所使用的服務。
比如,一個應用服務器可能用目錄來“注冊”對象以表征它所管理的服務,以至于一個
客戶能隨后查找目錄來定位所需服務。
本文的目的是來定義應用程序從目錄中存儲與讀取JAVA對象的公共方法。使用這種公
共模式,任何需要讀取或存儲目錄中的JAVA對象的JAVA應用程序都能使用一種能公
共操作的方法。
2.JAVA對象陳述
本文定義模式基本元素來表征三種JAVA對象的類型:JAVA序列化的對象,JAVA整理
過的對象,和JNDI參考。JAVA遠程對象可作為JAVA整理過的對象或JNDI參考保存。
2.1公共陳述
JAVA對象用對象類javaObject存儲于LDAP目錄中。它是其它JAVA對象相關類驅動:
javaSerializedObject,javaMarshalledObject,和javaNamingReference的基礎類。javaObject
是個抽象對象類,也就說一個javaObject不能自己存在于目錄中;只有它的輔助性的或
結構上的子類可以存在于目錄中。
對象類javaContainer表征一個目錄記錄來保存一個JAVA對象。它是個結構上的對象類。
在實例中javaObject的子類與其它結構化的對象類混合在一起,javaContainer不是必需
的。
對象類javaObject與javaContainer的定義在第4節中。
javaObject類有一個必選的屬性(javaClassName)和四個可選的屬性(javaClassNames,
javaCodeBase,javaDoc,description)。javaClassName是個單值屬性,用于保存對象完
整的JAVA類名(如,java.lang.String)。這可能對象的源類名,但并不必須是;在某此
場合作為超類或接口可能是最適當的。該屬性用來保存對象的區分類的名字,說得更精
確此,類或接口應該被區分清楚。
javaClassNames是個多值的屬性以用來保存對象的完整的JAVA類和接口的對象名字
(比如,java.lang.Byte)。如所有多值屬性那樣,javaClassNames屬性的值是無序的,
并且沒有一個值比其它值更具可辨性。該屬性用來保存對象對類和接口名字與其父類或
接口,而且值不是必須完成的。如果javaClassNames屬性是存在的,它應該包括
javaClassName的值。
例如,假設一個javaClassName屬性值為java.io.FilePermission,javaClassNames屬性值
為{"java.security.Permission","java.io.FilePermission","java.security.Guard",
"java.io.Serializable"}的對象保存于目錄中。一個應用在目錄中查找JAVA對象可能用
javaClassName來在該目錄中產生JAVA對象的名字與類型的集合。別的應用程序可以
用javaClassNames屬性來尋找,比如,所有的java.security.Permission對象。
javaCodebase是個多值屬性用于保存對象的類定義定位。javaDoc用于保存指向類的
JAVA文檔的指針(URL)。description用于保存JAVA對象的文本描述且定義于
[v3Schema]中。這些屬性的定義在第3節中。
2.2可序列化對象
可序列化一個對象意味著將其狀態轉換成字節流使字節流能被轉換回對象的一個副本。
如果一個JAVA對象的類或它的任何超類實現了java.io.Serializable接口或它的子接口
java.io.Externalizable,則此JAVA對象是可序列化的(serializable)。"Deserialization"是
指將序列化的對象形態轉換回對象的一個副本的過程。當一個對象序列化之后,以此對
象為根的整個對象樹也都是序列化的。當它被逆序列化后整個樹被重建。比如,假設一
個可序列化的Book對象包括(一個可序列化的字段)一個Page數組對象。當一個Book
對象序列化后,Page數組對象亦被序列化。
JAVA平臺指定一個默認的算法用來序列化可序列化對象。JAVA類也可以以自己的算
法來覆蓋這個默認序列化。序列[Serial]詳細地描述了對象序列化。
當一個對象序列化時,標識它的類的信息被記錄在這個序列化流中。然而類的定義(類
文件)本身沒被記錄。逆序列化對象以決定用于定位和加載相關聯的類的定義,是系統
的職責。比如,JAVA應用可能包括它的類路徑(classpath)在JAR文件中包含可序列
化對象的類定義,或者如以下所解釋的那樣用目錄中的信息加載類定義。
2.2.1目錄中的表征
一個可序列化的對象在目錄中用javaClassName,javaClassNames,javaCodeBase,和
javaSerializedData屬性表征,這些屬性在第3節中定義。必選屬性javaSerializedData包
括對象的序列化形態。盡管序列化形態已包含類名,必選屬性javaClassName還是記錄
了被序列化對象的類名以使應用能夠在不必先逆序列化該對象就能確定類信息??蛇x的
javaClassNames屬性用來記錄附加有關序列化對象的類信息??蛇x的javaCodeBase屬
性用于記錄逆序列化對象所必需的類定義的位置。
一條包含一個序列化對象的目錄記錄用javaObject的子類javaSerializedObject對象類來
表征。javaSerializedObject是個輔助對象類,也就是說它需與一個結構上的對象類混合
使用。javaSerializedObject的定義在第4節中給出。
2.3整理過的對象
“整理”一個對象就是在它是“未經整理”時的以一種方式記錄其狀態和代碼存根
(codebase(s))的方法,原始對象的一個副本可能自動在加載該對象的類定義。你可以
整理任何可序列化或遠程的(即,實現java.rmi.Remote接口)對象。除了整理還記錄
代碼存根(codebase),整理就與序列化一樣。整理與序列化的不同之處在于整理格外
地對待遠程對象。如果一個對象是java.rmi.Remote對象,整理記錄遠程對象的“存根”
(stub)(見第2.5節),而不是記錄遠程對象本身。如序列化那樣,當一個對象被整理
后,整個以此對象為根的對象樹均被整理。當它被逆整理,整個樹亦被逆整理。
一個“整理過的”對象用java.rmi.MarshalledObject類表征。這里有個如何為可序列化
與遠程對象創建MarshalledObject的例子:
java.io.Serializablesobj=...;
java.rmi.MarshalledObjectmobj1=
newjava.rmi.MarshalledObject(sobj);
java.rmi.Remoterobj=...;
java.rmi.MarshalledObjectmobj2=
newjava.rmi.MarshalledObject(robj);
那么,為從MarshalledObject恢復原始的對象,可這樣做:
java.io.Serializablesobj=(java.io.Serializable)mobj1.get();
java.io.Remoterstub=(java.io.Remote)mobj2.get();
MarshalledObject只在Java2Platfrom,StandardEdition,V1.2或更高版本的平臺上可用。
2.3.1目錄中的表征
一個整理過的對象用javaClassName,javaClassNames,javaSerializedData(定義在第3節
中)屬性來在目錄中表征。必選屬性javaSerializedData包含整理過的對象的序列化形
態(也就是,MarshalledObject實例的序列化形態)。必選屬性javaClassName記錄對象
整理前的知名類名??蛇x的屬性javaClassNames用來記錄整理前的有關對象的附加類
信息。
一個包含整理過的對象的目錄記錄用javaObject的子類javaMarshalledObject對象類來
表征。javaMarshalledObject是個輔助對象類,也就是說需要與一個結構上的對象類混
合使用。javaMarshalledObject的定義在第4節中給出。
顯然,javaMarshalledObject與javaSerializedObject的不同之處只在于javaClassName和
javaClassNames屬性的解釋。
2.4JNDI參考
JAVA名字與目錄接口JNDI(JavaNamingandDirectoryInterface)是個在JAVA編程語
言中指定的目錄訪問API[JNDI]。它提供目錄的對象導向的視圖,允許JAVA對象添
加到或恢復自目錄而不要求客戶管理數據表征。
JNDI定義“reference”的概念,是用在對象不能被直接保存在目錄中,或不適當,不
合需求時。有關聯的參考的對象是被間接保存在目錄中的,是用保存其參考來替代的。
2.4.1參考的內容
一個JNDI參考是個javax.naming.Reference類的JAVA對象。它由被參考對象的類信息
和有序的地址列表組成。一個地址是一個javax.naming.RefAddr類的JAVA對象。每個
地址包含如何構造該對象的信息。
JNDI參考的普通用法就是表征到網絡服務的連接,如數據庫,目錄,或文件系統。每
個地十可以識別一個服務的“通信端點”,包含有如何聯系服務的信息。多地址可能出
現于各種各樣的原因,如復制,或者對象通過多于一種的通信機制提供接口。
一個參考也包含幫助創建該參考涉及對象的實例的信息。它包含該對象的JAVA類名,
類名和對象制造者位置以用來創建該對象。給出其參考來創建對象的過程與相反的過程
在[JNDI]中描述。
2.4.2目錄中的表征
JNDI參考用javaClassName,javaClassNames,javaCodeBase,javaReferenceAddress,和
javaFactory屬性保存于目錄中,這些屬性定義于第3節中。這些屬性保存對應于上面描
述的參考的信息。javaReferenceAddress是個多值可選的屬性來保存參考地址。
javaFactory是個可選屬性來保存對象制造者完整類名。必選屬性javaClassName用于保
存對象的知名類名??蛇x屬性javaClassNames用來記錄附加類及接口名??蛇x屬性
javaCodeBase用于保存對象的制造者位置及對象的類定義。
一條目錄記錄包含一個用javaObject的子類javaNamingReference對象類表征的JNDI
參考。javaNamingReference是個輔助對象類,也就是它必須與一個結構上的對象類混
合使用。javaNamingReference的定義在第4節中給出。
2.5遠程對象
JAVA遠程方法調用系統(theJavaRemoteMethodInvocation(RMI)system)[RMI]是一
種使一個JAVA虛擬機上的對象能夠調用別一個JAVA虛擬機上對象的方法的機制。任
何具體能以這種方式被調用的方法的對象必須實現java.rmi.Remote接口。當這樣一個
對象被調用,它的參數被整理并從本地虛擬機送至逆整理并使用這些參數的遠端虛擬
機。當該方法結束,結果自遠端被整理并送至調用者的虛擬機。
為使一個遠程對象對別的虛擬機可訪問,有個程序一般性地用RMI注冊器進行注冊。
該程序提供給RMI注冊器該遠程對象的字符串名字和該遠程對象本身。當有程序欲訪
問遠程對象,它提供此對象的字符串名字給與遠程對象同樣的機器上的RMI注冊器。
RMI注冊器返回給調用者一個參考(稱作“stub”)給遠程對象。當程序收到遠程對象
的stub,它就可以調用遠程對象的方法(通過stub)。程序也可獲得作為向其它遠程對
象的遠程調用的結果的遠程對象參考,或從其它名字服務獲得遠程對象的參考。比如,
程序可以從一個支持文中所定義的模式的LDAP服務器上查尋到一個遠程對象的參考。
RMI注冊器接受的字符串名字語法為“rmi://hostname:port/remoteObjectName”,其中
hostname與port標識RMI注冊器運行的主機和端口,remoteObjectName是遠程對象的
名字。hostname,port和前綴"rmi:"是可選的。如果hostname沒指定,默認為本地主機
(localhost)。如果port沒指定,默認為1099。如果remoteObjectName沒指定,則對象被
命名為RMI注冊器自己。細節見[RMI]。
RMI能被不能的協議所支持:JAVA遠程方法協議(JRMP)和互聯網Inter-ORB協議
(IIOP)。JRMP是專為RMI設計的協議;IIOP是CORBA對象間通信的標準協議
[CORBA]?;贗IOP的RMI允許JAVA遠程對象與可能是用非JAVA語言編寫的
CORBA對象進行通信[RMI–IIOP]。
2.5.1目錄中的表征
使用IIOP的遠程對象在目錄中被作為CORBA對象參考來表征[CORBA–LDAP]。
使用JRMP的遠程對象在目錄中用一種或兩種方法來表征:作為整理過的對象,或作為
JNDI參考。
一個整理過的對象記錄遠程對象存根(stub)和任何可序列化的或遠程的所參考的對象
的代碼存根,并且用它們的存根(stubs)代替遠程對象。為將一個遠程對象作為整理
過的對象(java.rmi.MarshalledObject)來保存,你應先創建一個它的
java.rmi.MarshalledObject實例。
java.rmi.Remoterobj=...;
java.rmi.MarshalledObjectmobj=newjava.rmi.MarshalledObject(robj);
然后你可以將此MarshalledObject實例作為javaMarshalledObject來保存。javaClassName
屬性應該包含此遠程對象的完整的知名類名。javaClassNames屬性應該包含遠程對象的
類和接口的名字。欲從目錄中讀回遠程對象,先要逆序列化javaSerializedData的內容
以得到一個MarshalledObject(mobj),然后像如下那樣從該MarshalledObject恢復:
java.rmi.Remoterobj=(java.rmi.Remote)mobj.get();
本語句返回遠程存根(stub),你可用來調用遠程方法。
MarshalledObject只在Java2Platfrom,StandardEdition,V1.2或更高版本的平臺上可用。
因此,作為MarshalledObject保存的遠程對象只能被使用Java2Platfrom,StandardEdition,
V1.2或更高版本平臺的客戶所讀取。
欲將JNDI參考保存為遠程對象,你得先創建一個javax.naming.Reference對象實例,因
為它使用遠程對象的名字就像它已經或將要被記錄在RMI注冊器上,并且存在附加限
制"rmi:"前綴。這里是例子:
javax.naming.Referenceref=newjavax.naming.Reference(
obj.getClass().getName(),
newjavax.naming.StringRefAddr("URL",
"rmi://rserver/AppRemoteObjectX"));
然后你可將此javax.naming.Reference實例作為javaNamingReference保存。使用JNDI
參考的好處在于可以沒有遠程對象的參考時進行。實事上,該遠程對象不必在目錄中的
這個記錄產生時就存在。在遠程對象被從目錄中查找時是必須存在的,而且要被捆定在
RMI注冊器中。
2.6序列化的對象VS.整理過的對象VS.參考
本文定義的對象類保存JAVA對象的不同方面。
一個作為javaMarshalledObject保存的javaNamingReference或遠程對象表征一個指向對
象的指針時,作為javaMarshalledObject保存的javaSerializedObject或可序列化的對象
表征對象自己。
保存一個可序列化的對象到目錄中時,你擁有作為javaSerializedObject還是作為
javaMarshalledObject保存的選擇。javaSerializedObject對象類提供保存可序列化對象的
基本方法。當用javaSerializedObject對象類創建一個LDAP記錄時,如果你希望該記錄
的讀取者知道到哪里加載該對象的類定義,你必須明確地設置javaCodeBase屬性。當
用javaMarshalledObject對象類創建一個LDAP目錄記錄時,你要使用MarshalledObject
類。MarshalledObject類使用在JAVA平臺上可用的RMI下部構造,使聚集與記錄代碼
存根(codebase)信息自動化,從而使設置javaCodeBase屬性變得不是必需的。另一方
面,javaCodeBase屬性是肉眼可讀的,是可以在不必改變記錄的其它部分的前提下輕易
用文本工具更新。這就使得你,例如,移動類定義到別的地方并且更新javaCodeBase
屬性來體現移動而不必更新序列化的對象自己。javaNamingReference提供一種記錄沒
有直接保存于目錄中的對象的地址的信息。作為javaMarshalledObject保存的遠程對象
也記錄自己沒直接保存于目錄中的對象的地址信息。換句話說,你可以把它們看成是訪
問對象必需的信息的簡潔的表征。
javaNamingReference一般地由一個肉眼可讀的小數字字符組成。目錄管理的標準文本
工具可因此用來添加,讀取,或修改參考記錄――如若很需要――非常容易。序列化的
與整理過的對象不會被人直接地讀取或操作。
3、屬性類型定義
以下屬性類型在本文本中定義:
javaClassName
javaClassNames
javaCodebase
javaSerializedData
javaFactory
javaReferenceAddress
javaDoc
3.1javaClassName
該屬性保存JAVA對象的“知名的”類或接口(如,java.lang.String)的完整名字。它
是個單值屬性。其語法是'DiretoryString'而且是大小寫無關的。
(1.3.6.1.4.1.42.2.27.4.1.6
NAME'javaClassName'
DESC'FullyqualifiednameofdistinguishedJavaclassor
interface'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
)
3.2javaCodebase
該屬性保存JAVA類定義的位置。它指定加載由javaClassName屬性指定的類的類定義
的位置。每個屬性的值包含一個有序的URL列表,由空格分開。比如,值“url1url2url3”
表示三個(可能互相依賴的)URL(url1,url2,url3)構成用于加載JAVA類定義的代碼
存根(codebase)。
該屬性的語法是'IA5String',而且是大小寫無關的。
(1.3.6.1.4.1.42.2.27.4.1.7
NAME'javaCodebase'
DESC'URL(s)specifyingthelocationofclassdefinition'
EQUALITYcaseExactIA5Match
SYNTAX1.3.6.1.4.1.1466.115.121.1.26
)
3.3javaClassNames
該屬性保存JAVA對象的完整類或接口名(如,java.lang.String)。它是多值的屬性。當
多于一個值存在時,每一個是類或接口或該對象父類或父接口的名字。
該屬性的語法為'DirectoryString',并且大小寫無關。
(1.3.6.1.4.1.42.2.27.4.1.13
NAME'javaClassNames'
DESC'FullyqualifiedJavaclassorinterfacename'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
)
3.4javaSerializedData
該屬性保存JAVA對象的序列化形態。序列化形態在[Serial]中描述。
該屬性的語法為'OctetString'。
(1.3.6.1.4.1.42.2.27.4.1.8
NAME'javaSerializedData
DESC'SerializedformofaJavaobject'
SYNTAX1.3.6.1.4.1.1466.115.121.1.40
SINGLE-VALUE
)
3.5javaFactory
該屬性保存能被用來創建由javaClassName屬性標識的對象實例的對象制造者(如,§
com.wiz.jndi.WizObjectFactory)的完整的類名。
該屬性的語法是'DirectoryString',并且大小寫無關。
(1.3.6.1.4.1.42.2.27.4.1.10
NAME'javaFactory'
DESC'FullyqualifiedJavaclassnameofaJNDIobjectfactory'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
)
3.6javaReferenceAddress
該屬性表征JNDI參考的地址序列。它的每個值表示一個地址,一個類型為
javax.naming.RefAddr的JAVA對象。它的值是地址類型和地址內容的串聯,并以一個
序號打頭(JNDI參考中的地址順序是很重要的)。比如:
#0#TypeA#ValA
#1#TypeB#ValB
#2#TypeC##rO0ABXNyABpq...
詳細地講,這個值如下編碼:
分隔符是值的第一個字符。為了易讀性,字符“#”在值中沒被另外地使用時是推薦使
用,而且任何字符可以用來服從下面給出的限制。
每一個分隔符跟著是序列號。地址的序列號是它在JNDI參考中的位置,第一的位置編
號為0。它用最簡短的十進制形式表示。
序列號接下來是一個分隔符,然后是地址類型,然后是另一個分隔符。如果地址屬于
JAVA類javax.naming.StringRefAddr,則其分隔符接著的是地址內容的值(字符)。否則,
分隔符接著是另一個分隔符,然后接著是這整個地址的序列化形態的Base64編碼。
分隔符可以是任何未包含在地址類型中的數字或字符。另外,若地址內容是個字符串,
分隔符不能為此字符串的首字符。
該屬性的語法為'DirectoryString',并且大小寫無關。它可以含有多個值。
(1.3.6.1.4.1.42.2.27.4.1.11
NAME'javaReferenceAddress'
DESC'AddressesassociatedwithaJNDIReference'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
)
3.7javaDoc
該屬性保存指向類的JAVA文檔的指針。其值為URL。比如,以下URL指向
java.lang.String類的說明:
http://java.sun.com/products/jdk/1.2/docs/api/java/lang/String.html
該屬性語法為'IA5String',并且大小寫無關。
(1.3.6.1.4.1.42.2.27.4.1.12
NAME'javaDoc'
DESC'TheJavadocumentationfortheclass'
EQUALITYcaseExactIA5Match
SYNTAX1.3.6.1.4.1.1466.115.121.1.26
)
4.對象類的定義
下面對象類在本文中定義:
javaContainer
javaObject
javaSerializedObject
javaMarshalledObject
javaNamingReference
4.1javaContainer
該結構上的對象類表示一個JAVA對象的容器。
(1.3.6.1.4.1.42.2.27.4.2.1
NAME'javaContainer'
DESC'ContainerforaJavaobject'
SUPtop
STRUCTURAL
MUST(cn)
)
4.2javaObject
該抽象對象類表示一個JAVA對象。javObject不能存在于目錄中;只有其輔助的或結構
上的子類可以存在于目錄中。
(1.3.6.1.4.1.42.2.27.4.2.4
NAME'javaObject'
DESC'Javaobjectrepresentation'
SUPtop
ABSTRACT
MUST(javaClassName)
MAY(javaClassNames$
javaCodebase$
javaDoc$
description)
)
4.3javaSerializedObject
該輔助對象類表示一個序列化的JAVA對象。必須與一個結構上的對象類混合在一起。
(1.3.6.1.4.1.42.2.27.4.2.5
NAME'javaSerializedObject'
DESC'Javaserializedobject'
SUPjavaObject
AUXILIARY
MUST(javaSerializedData)
)
4.4javaMarshalledObject
該輔助對象類表示一個整理過的JAVA對象。它必須與一個結構上的對象類相混合。
(1.3.6.1.4.1.42.2.27.4.2.8
NAME'javaMarshalledObject'
DESC'Javamarshalledobject'
SUPjavaObject
AUXILIARY
MUST(javaSerializedData)
)
4.5javaNamingReference
該輔助對象類表示JNDI參考。它必須與一個結構上的對象類相混合。
(1.3.6.1.4.1.42.2.27.4.2.7
NAME'javaNamingReference'
DESC'JNDIreference'
SUPjavaObject
AUXILIARY
MAY(javaReferenceAddress$
javaFactory)
)
5.安全考慮
序列化一個對象并保存到目錄中,使得該對象(副本)能在其被創建的環境以外被檢查
與使用。包含有序列化對象的目錄記錄能在由目錄的訪問控制機制的強制約束下被讀取
與修改。若一個對象包含有敏感的信息或包含的信息可能被外在地誤用,則此對象不應
被保存在目錄中。更多序列化的安全問題的細節見[Serial]。
6.鳴謝
感謝JosephFialli,PeterJones,RogerRiggs,BobScheifler,和SunMicrosystems的Ann
Wollrath,感謝他們的意見和建議。
7.參考
[CORBA]TheObjectManagementGroup,"CommonObjectRequest
BrokerArchitectureSpecification2.0,"
http://www.omg.org
[CORBA-LDAP]Ryan,V.,Lee,R.andS.Seligman,"Schemafor
RepresentingCORBAObjectReferencesinanLDAP
Directory",RFC2714,October1999.
[Java]KenArnoldandJamesGosling,"TheJava(tm)Programming
Language,"SecondEdition,ISBN0-201-31006-6.
[JNDI]JavaSoftware,SunMicrosystems,Inc.,"TheJava(tm)
NamingandDirectoryInterface(tm)Specification,"
February1998.http://java.sun.com/products/jndi/
[LDAPv3]Wahl,M.,Howes,T.andS.Kille,"Lightweight
DirectoryAclearcase/" target="_blank" >ccessProtocol(v3)",RFC2251,December
1997.
[RMI]JavaSoftware,SunMicrosystems,Inc.,"RemoteMethod
Invocation,"November1998.
http://java.sun.com/products/jdk/1.2/docs/guide/rmi
[RMI-IIOP]IBMandJavaSoftware,SunMicrosystems,Inc.,"RMIover
IIOP",June1999.
http://java.sun.com/products/rmi-iiop/
[Serial]JavaSoftware,SunMicrosystems,Inc.,"Object
SerializationSpecification,"November1998.
http://java.sun.com/products/jdk/1.2/docs/guide/
serialization
[v3Schema]Wahl,M.,"ASummaryoftheX.500(96)UserSchemafor
usewithLDAPv3",RFC2256,December1997.
8.作者的地址
VincentRyan
SunMicrosystems,Inc.
MailStopEDUB03
901SanAntonioRoad
PaloAlto,CA94303
USA
Phone:+35318199151
EMail:vincent.ryan@ireland.sun.com
ScottSeligman
SunMicrosystems,Inc.
MailStopUCUP02-209
901SanAntonioRoad
PaloAlto,CA94303
USA
Phone:+14088633222
EMail:scott.seligman@eng.sun.com
RosannaLee
SunMicrosystems,Inc.
MailStopUCUP02-206
901SanAntonioRoad
PaloAlto,CA94303
USA
Phone:+14088633221
EMail:rosanna.lee@eng.sun.com
附錄-LDAP模式
--屬性類型--
(1.3.6.1.4.1.42.2.27.4.1.6
NAME'javaClassName'
DESC'FullyqualifiednameofdistinguishedJavaclassorinterface'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
)
(1.3.6.1.4.1.42.2.27.4.1.7
NAME'javaCodebase'
DESC'URL(s)specifyingthelocationofclassdefinition'
EQUALITYcaseExactIA5Match
SYNTAX1.3.6.1.4.1.1466.115.121.1.26
)
(1.3.6.1.4.1.42.2.27.4.1.8
NAME'javaSerializedData'
DESC'SerializedformofaJavaobject'
SYNTAX1.3.6.1.4.1.1466.115.121.1.40
SINGLE-VALUE
)
(1.3.6.1.4.1.42.2.27.4.1.10
NAME'javaFactory'
DESC'FullyqualifiedJavaclassnameofaJNDIobjectfactory'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
)
(1.3.6.1.4.1.42.2.27.4.1.11
NAME'javaReferenceAddress'
DESC'AddressesassociatedwithaJNDIReference'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
)
(1.3.6.1.4.1.42.2.27.4.1.12
NAME'javaDoc'
DESC'TheJavadocumentationfortheclass'
EQUALITYcaseExactIA5Match
SYNTAX1.3.6.1.4.1.1466.115.121.1.26
)
(1.3.6.1.4.1.42.2.27.4.1.13
NAME'javaClassNames'
DESC'FullyqualifiedJavaclassorinterfacename'
EQUALITYcaseExactMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
)
--自RFC-2256--
(2.5.4.13
NAME'description'
EQUALITYcaseIgnoreMatch
SUBSTRcaseIgnoreSubstringsMatch
SYNTAX1.3.6.1.4.1.1466.115.121.1.15{1024}
)
--對象類--
(1.3.6.1.4.1.42.2.27.4.2.1
NAME'javaContainer'
DESC'ContainerforaJavaobject'
SUPtop
STRUCTURAL
MUST(cn)
)
(1.3.6.1.4.1.42.2.27.4.2.4
NAME'javaObject'
DESC'Javaobjectrepresentation'
SUPtop
ABSTRACT
MUST(javaClassName)
MAY(javaClassNames$javaCodebase$javaDoc$description)
)
(1.3.6.1.4.1.42.2.27.4.2.5
NAME'javaSerializedObject'
DESC'Javaserializedobject'
SUPjavaObject
AUXILIARY
MUST(javaSerializedData)
)
(1.3.6.1.4.1.42.2.27.4.2.7
NAME'javaNamingReference'
DESC'JNDIreference'
SUPjavaObject
AUXILIARY
MAY(javaReferenceAddress$javaFactory)
)
(1.3.6.1.4.1.42.2.27.4.2.8
NAME'javaMarshalledObject'
DESC'Javamarshalledobject'
SUPjavaObject
AUXILIARY
MUST(javaSerializedData)
)
--自ISOX.520的匹配規則--
(2.5.13.5
NAME'caseExactMatch'
SYNTAX1.3.6.1.4.1.1466.115.121.1.15
)
完整的版權聲明
Copyright(C)TheInternetSociety(1999).AllRightsReserved.
Thisdocumentandtranslationsofitmaybecopiedandfurnishedto
others,andderivativeworksthatcommentonorotherwiseexplainit
orassistinitsimplementationmaybeprepared,copied,published
anddistributed,inwholeorinpart,withoutrestrictionofany
kind,providedthattheabovecopyrightnoticeandthisparagraphare
includedonallsuchcopiesandderivativeworks.However,this
documentitselfmaynotbemodifiedinanyway,suchasbyremoving
thecopyrightnoticeorreferencestotheInternetSocietyorother
Internetorganizations,exceptasneededforthepurposeof
developingInternetstandardsinwhichcasetheproceduresfor
copyrightsdefinedintheInternetStandardsprocessmustbe
followed,orasrequiredtotranslateitintolanguagesotherthan
English.
Thelimitedpermissionsgrantedaboveareperpetualandwillnotbe
revokedbytheInternetSocietyoritssuccessorsorassigns.
Thisdocumentandtheinformationcontainedhereinisprovidedonan
"ASIS"basisandTHEINTERNETSOCIETYANDTHEINTERNETENGINEERING
TASKFORCEDISCLAIMSALLWARRANTIES,EXPRESSORIMPLIED,INCLUDING
BUTNOTLIMITEDTOANYWARRANTYTHATTHEUSEOFTHEINFORMATION
HEREINWILLNOTINFRINGEANYRIGHTSORANYIMPLIEDWARRANTIESOF
MERCHANTABILITYORFITNESSFORAPARTICULARPURPOSE.