⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfcrfc2713.txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 3 页
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:汪谢华(ouseka   ouseka@sina.com)
译文发布时间:2001-4-26
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。




Network Working Group                                            V. Ryan
Request for Comments: 2713                                   S. Seligman
Category: Informational                                           R. Lee
                                                  Sun Microsystems, Inc.
October 1999


LDAP(轻型目录存取协议)目录中JAVATM对象的表征模式
(RFC2713 Schema for Representing Java(tm) Objects in an LDAP Directory )


本备忘录状态
   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

版权声明
   Copyright (C) The Internet Society (1999).  All Rights Reserved.

摘要
	本文档定义JAVA对象在LDAP目录 [LDAPv3] 中的表现模式。它定义了模式基本元
素来表征一个JAVA序列对象 [Serial],一个JAVA整理过的对象 [RMI],一个JAVA远程对
象 [RMI],一个JNDI参考 [JNDI]。

目录

1.绪论	2
2.JAVA对象陈述	3
2.1 公共陈述	3
2.2 可序列化对象	4
2.2.1 目录中的表征	4
2.3 整理过的对象	4
2.3.1 目录中的表征	5
2.4 JNDI参考	5
2.4.1 参考的内容	6
2.4.2 目录中的表征	6
2.5 远程对象	6
2.5.1 目录中的表征	7
2.6 序列化的对象 VS. 整理过的对象 VS. 参考	8
3、属性类型定义	9
3.1 javaClassName	9
3.2 javaCodebase	9
3.3 javaClassNames	10
3.4 javaSerializedData	10
3.5 javaFactory	10
3.6 javaReferenceAddress	11
3.7 javaDoc	11
4.对象类的定义	12
4.1 javaContainer	12
4.2 javaObject	12
4.3 javaSerializedObject	13
4.4 javaMarshalledObject	13
4.5 javaNamingReference	13
5.安全考虑	14
6.鸣谢	14
7.参考	14
8.作者的地址	15
附录 - LDAP 模式	16

1.绪论
本文假定读者已经具备一定的JAVA编程语言知识 [JAVA] 。简短起见,在整个文档中,
我们用术语“Java Object”来代替“object in the Java programming language”。

一般地,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还是记录
了被序列化对象的类名以使应用能够在不必先逆序列化该对象就能确定类信息。可选的
javaClassNames属性用来记录附加有关序列化对象的类信息。可选的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.Serializable sobj = ...;
       java.rmi.MarshalledObject mobj1 =
           new java.rmi.MarshalledObject(sobj);

       java.rmi.Remote robj = ...;
       java.rmi.MarshalledObject mobj2 =
           new java.rmi.MarshalledObject(robj);

	那么,为从MarshalledObject恢复原始的对象,可这样做:
       java.io.Serializable sobj = (java.io.Serializable) mobj1.get();
       java.io.Remote rstub = (java.io.Remote) mobj2.get();

	MarshalledObject只在Java2 Platfrom, Standard Edition, V1.2或更高版本的平台上可用。

2.3.1 目录中的表征
一个整理过的对象用javaClassName, javaClassNames, javaSerializedData(定义在第3节
中)属性来在目录中表征。必选属性javaSerializedData包含整理过的对象的序列化形
态(也就是,MarshalledObject实例的序列化形态)。必选属性javaClassName记录对象
整理前的知名类名。可选的属性javaClassNames用来记录整理前的有关对象的附加类
信息。

一个包含整理过的对象的目录记录用javaObject的子类javaMarshalledObject对象类来
表征。javaMarshalledObject是个辅助对象类,也就是说需要与一个结构上的对象类混
合使用。javaMarshalledObject的定义在第4节中给出。

显然,javaMarshalledObject与javaSerializedObject的不同之处只在于javaClassName和
javaClassNames属性的解释。

2.4 JNDI参考
JAVA名字与目录接口JNDI(Java Naming and Directory Interface)是个在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用于保
存对象的知名类名。可选属性javaClassNames用来记录附加类及接口名。可选属性
javaCodeBase用于保存对象的制造者位置及对象的类定义。

一条目录记录包含一个用javaObject的子类javaNamingReference对象类表征的JNDI
参考。javaNamingReference是个辅助对象类,也就是它必须与一个结构上的对象类混
合使用。javaNamingReference的定义在第4节中给出。

2.5 远程对象
JAVA远程方法调用系统(the Java Remote Method Invocation(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] 。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -