Home | History | Annotate | Line # | Download | only in rfc
      1 
      2 
      3 
      4 
      5 
      6 
      7 Network Working Group                                            V. Ryan
      8 Request for Comments: 2713                                   S. Seligman
      9 Category: Informational                                           R. Lee
     10                                                   Sun Microsystems, Inc.
     11                                                             October 1999
     12 
     13 
     14      Schema for Representing Java(tm) Objects in an LDAP Directory
     15 
     16 Status of this Memo
     17 
     18    This memo provides information for the Internet community.  It does
     19    not specify an Internet standard of any kind.  Distribution of this
     20    memo is unlimited.
     21 
     22 Copyright Notice
     23 
     24    Copyright (C) The Internet Society (1999).  All Rights Reserved.
     25 
     26 Abstract
     27 
     28    This document defines the schema for representing Java(tm) objects in
     29    an LDAP directory [LDAPv3].  It defines schema elements to represent
     30    a Java serialized object [Serial], a Java marshalled object [RMI], a
     31    Java remote object [RMI], and a JNDI reference [JNDI].
     32 
     33 1. Introduction
     34 
     35    This document assumes that the reader has a general knowledge of the
     36    Java programming language [Java].  For brevity we use the term "Java
     37    object" in place of "object in the Java programming language"
     38    throughout this text.
     39 
     40    Traditionally, LDAP directories have been used to store data. Users
     41    and programmers think of the directory as a hierarchy of directory
     42    entries, each containing a set of attributes.  You look up an entry
     43    from the directory and extract the attribute(s) of interest.  For
     44    example, you can look up a person's telephone number from the
     45    directory.  Alternatively, you can search the directory for entries
     46    with a particular set of attributes.  For example, you can search for
     47    all persons in the directory with the surname "Smith".
     48 
     49    For applications written in the Java programming language, a kind of
     50    data that is typically shared are Java objects themselves.  For such
     51    applications, it makes sense to be able to use the directory as a
     52    repository for Java objects.  The directory provides a centrally
     53    administered, and possibly replicated, service for use by Java
     54    applications distributed across the network.
     55 
     56 
     57 
     58 Ryan, et al.                 Informational                      [Page 1]
     59 
     61 RFC 2713                Schema for Java Objects             October 1999
     62 
     63 
     64    For example, an application server might use the directory for
     65    "registering" objects representing the services that it manages, so
     66    that a client can later search the directory to locate those services
     67    as it needs.
     68 
     69    The motivation for this document is to define a common way for
     70    applications to store and retrieve Java objects from the directory.
     71    Using this common schema, any Java application that needs to read or
     72    store Java objects in the directory can do so in an interoperable
     73    way.
     74 
     75 2 Representation of Java Objects
     76 
     77    This document defines schema elements to represent three types of
     78    Java objects:  a Java serialized object, a Java marshalled object,
     79    and a JNDI reference. A Java remote object is stored as either a Java
     80    marshalled object or a JNDI reference.
     81 
     82 2.1 Common Representations
     83 
     84    A Java object is stored in the LDAP directory by using the object
     85    class javaObject. This is the base class from which other Java object
     86    related classes derive: javaSerializedObject, javaMarshalledObject,
     87    and javaNamingReference.  javaObject is an abstract object class,
     88    which means that a javaObject cannot exist by itself in the
     89    directory; only auxiliary or structural subclasses of it can exist in
     90    the directory.
     91 
     92    The object class javaContainer represents a directory entry dedicated
     93    to storing a Java object. It is a structural object class.  In cases
     94    where a subclass of javaObject is mixed in with another structural
     95    object class, javaContainer is not required.
     96 
     97    The definitions for the object classes javaObject and javaContainer
     98    are presented in Section 4.
     99 
    100    The javaObject class has one mandatory attribute (javaClassName) and
    101    four optional attributes (javaClassNames, javaCodebase, javaDoc,
    102    description).  javaClassName is a single valued attribute that is
    103    used to store the fully qualified name of the object's Java class
    104    (for example, "java.lang.String").  This may be the object's most
    105    derived class's name, but does not have to be; that of a superclass
    106    or interface in some cases might be most appropriate.  This attribute
    107    is intended for storing the name of the object's "distinguished"
    108    class, that is, the class or interface with which the object should
    109    be identified.
    110 
    111 
    112 
    113 
    114 
    115 Ryan, et al.                 Informational                      [Page 2]
    116 
    118 RFC 2713                Schema for Java Objects             October 1999
    119 
    120 
    121    javaClassNames is a multivalued attribute that is used to store the
    122    fully qualified names of the object's Java classes and interfaces
    123    (for example, "java.lang.Byte"). Like all multivalued attributes, the
    124    javaClassNames attribute's values are unordered and so no one value
    125    is more "distinguished" than the others. This attribute is intended
    126    for storing an object's class and interface names and those of its
    127    ancestor classes and interfaces, although the list of values does not
    128    have to be complete.  If the javaClassNames attribute is present, it
    129    should include the value of javaClassName.
    130 
    131    For example, suppose an object is stored in the directory with a
    132    javaClassName attribute of "java.io.FilePermission", and a
    133    javaClassNames attribute of {"java.security.Permission",
    134    "java.io.FilePermission", "java.security.Guard",
    135    "java.io.Serializable"}. An application searching a directory for
    136    Java objects might use javaClassName to produce a summary of the
    137    names and types of Java objects in that directory.  Another
    138    application might use the javaClassNames attribute to find, for
    139    example, all java.security.Permission objects.
    140 
    141    javaCodebase is a multivalued attribute that is used to store the
    142    location(s) of the object's class definition.  javaDoc is used to
    143    store a pointer (URL) to the Java documentation for the class.
    144    description is used to store a textual description of a Java object
    145    and is defined in [v3Schema]. The definitions of these attributes are
    146    presented in Section 3.
    147 
    148 2.2 Serialized Objects
    149 
    150    To "serialize" an object means to convert its state into a byte
    151    stream in such a way that the byte stream can be converted back into
    152    a copy of the object.  A Java object is "serializable" if its class
    153    or any of its superclasses implements either the java.io.Serializable
    154    interface or its subinterface java.io.Externalizable.
    155    "Deserialization" is the process of converting the serialized form of
    156    an object back into a copy of the object.  When an object is
    157    serialized, the entire tree of objects rooted at the object is also
    158    serialized. When it is deserialized, the tree is reconstructed. For
    159    example, suppose a serializable Book object contains (a serializable
    160    field of) an array of Page objects.  When a Book object is
    161    serialized, so is the array of Page objects.
    162 
    163    The Java platform specifies a default algorithm by which serializable
    164    objects are serialized. A Java class can also override this default
    165    serialization with its own algorithm.  [Serial] describes object
    166    serialization in detail.
    167 
    168 
    169 
    170 
    171 
    172 Ryan, et al.                 Informational                      [Page 3]
    173 
    175 RFC 2713                Schema for Java Objects             October 1999
    176 
    177 
    178    When an object is serialized, information that identifies its class
    179    is recorded in the serialized stream. However, the class's definition
    180    ("class file") itself is not recorded. It is the responsibility of
    181    the system that is deserializing the object to determine the
    182    mechanism to use for locating and loading the associated class
    183    definitions. For example, the Java application might include in its
    184    classpath a JAR file containing the class definitions of the
    185    serialized object, or load the class definitions using information
    186    from the directory, as explained below.
    187 
    188 2.2.1 Representation in the Directory
    189 
    190    A serialized object is represented in the directory by the attributes
    191    javaClassName, javaClassNames, javaCodebase, and javaSerializedData,
    192    as defined in Section 3.  The mandatory attribute,
    193    javaSerializedData, contains the serialized form of the object.
    194    Although the serialized form already contains the class name, the
    195    mandatory javaClassName attribute also records the class name of the
    196    serialized object so that applications can determined class
    197    information without having to first deserialize the object.  The
    198    optional javaClassNames attribute is used to record additional class
    199    information about the serialized object.  The optional javaCodebase
    200    attribute is used to record the locations of the class definitions
    201    needed to deserialize the serialized object.
    202 
    203    A directory entry that contains a serialized object is represented by
    204    the object class javaSerializedObject, which is a subclass of
    205    javaObject.  javaSerializedObject is an auxiliary object class, which
    206    means that it needs to be mixed in with a structural object class.
    207    javaSerializedObject's definition is given in Section 4.
    208 
    209 2.3 Marshalled Objects
    210 
    211    To "marshal" an object means to record its state and codebase(s) in
    212    such a way that when the marshalled object is "unmarshalled," a copy
    213    of the original object is obtained, possibly by automatically loading
    214    the class definitions of the object.  You can marshal any object that
    215    is serializable or remote (that is, implements the java.rmi.Remote
    216    interface).  Marshalling is like serialization, except marshalling
    217    also records codebases. Marshalling is different from serialization
    218    in that marshalling treats remote objects specially. If an object is
    219    a java.rmi.Remote object, marshalling records the remote object's
    220    "stub" (see Section 2.5), instead of the remote object itself.  Like
    221    serialization, when an object is marshalled, the entire tree of
    222    objects rooted at the object is marshalled. When it is unmarshalled,
    223    the tree is reconstructed.
    224 
    225 
    226 
    227 
    228 
    229 Ryan, et al.                 Informational                      [Page 4]
    230 
    232 RFC 2713                Schema for Java Objects             October 1999
    233 
    234 
    235    A "marshalled" object is the represented by the
    236    java.rmi.MarshalledObject class. Here's an example of how to create
    237    MarshalledObjects for serializable and remote objects:
    238 
    239        java.io.Serializable sobj = ...;
    240        java.rmi.MarshalledObject mobj1 =
    241            new java.rmi.MarshalledObject(sobj);
    242 
    243        java.rmi.Remote robj = ...;
    244        java.rmi.MarshalledObject mobj2 =
    245            new java.rmi.MarshalledObject(robj);
    246 
    247    Then, to retrieve the original objects from the MarshalledObjects, do
    248    as follows:
    249 
    250        java.io.Serializable sobj = (java.io.Serializable) mobj1.get();
    251        java.io.Remote rstub = (java.io.Remote) mobj2.get();
    252 
    253    MarshalledObject is available only on the Java 2 Platform, Standard
    254    Edition, v1.2, and higher releases.
    255 
    256 2.3.1 Representation in the Directory
    257 
    258    A marshalled object is represented in the directory by the attributes
    259    javaClassName, javaClassNames, and javaSerializedData, as defined in
    260    Section 3.  The mandatory attribute, javaSerializedData, contains the
    261    serialized form of the marshalled object (that is, the serialized
    262    form of a MarshalledObject instance).  The mandatory javaClassName
    263    attribute records the distinguished class name of the object before
    264    it has been marshalled.  The optional javaClassNames attribute is
    265    used to record additional class information about the object before
    266    it has been marshalled.
    267 
    268    A directory entry that contains a marshalled object is represented by
    269    the object class javaMarshalledObject, which is a subclass of
    270    javaObject.  javaMarshalledObject is an auxiliary object class, which
    271    means that it needs to be mixed in with a structural object class.
    272    javaMarshalledObject's definition is given in Section 4.
    273 
    274    As evident in this description, a javaMarshalledObject differs from a
    275    javaSerializedObject only in the interpretation of the javaClassName
    276    and javaClassNames attributes.
    277 
    278 
    279 
    280 
    281 
    282 
    283 
    284 
    285 
    286 Ryan, et al.                 Informational                      [Page 5]
    287 
    289 RFC 2713                Schema for Java Objects             October 1999
    290 
    291 
    292 2.4 JNDI References
    293 
    294    Java Naming and Directory Interface(tm) (JNDI) is a directory access
    295    API specified in the Java programming language [JNDI].  It provides
    296    an object-oriented view of the directory, allowing Java objects to be
    297    added to and retrieved from the directory without requiring the
    298    client to manage data representation issues.
    299 
    300    JNDI defines the notion of a "reference" for use when an object
    301    cannot be stored in the directory directly, or when it is
    302    inappropriate or undesirable to do so.  An object with an associated
    303    reference is stored in the directory indirectly, by storing its
    304    reference instead.
    305 
    306 2.4.1 Contents of a Reference
    307 
    308    A JNDI reference is a Java object of class javax.naming.Reference.
    309    It consists of class information about the object being referenced
    310    and an ordered list of addresses.  An address is a Java object of
    311    class javax.naming.RefAddr.  Each address contains information on how
    312    to construct the object.
    313 
    314    A common use for JNDI references is to represent connections to a
    315    network service such as a database, directory, or file system.  Each
    316    address may then identify a "communications endpoint" for that
    317    service, containing information on how to contact the service.
    318    Multiple addresses may arise for various reasons, such as replication
    319    or the object offering interfaces over more than one communication
    320    mechanism.
    321 
    322    A reference also contains information to assist in the creation of an
    323    instance of the object to which the reference refers.  It contains
    324    the Java class name of that object, and the class name and location
    325    of the object factory to be used to create the object.  The
    326    procedures for creating an object given its reference and the reverse
    327    are described in [JNDI].
    328 
    329 2.4.2 Representation in the Directory
    330 
    331    A JNDI reference is stored in the directory by using the attributes
    332    javaClassName, javaClassNames, javaCodebase, javaReferenceAddress,
    333    and javaFactory, defined in Section 3.  These attributes store
    334    information corresponding to the contents of a reference described
    335    above.  javaReferenceAddress is a multivalued optional attribute for
    336    storing reference addresses.  javaFactory is the optional attribute
    337    for storing the object factory's fully qualified class name.  The
    338    mandatory javaClassName attribute is used to store the name of the
    339    distinguished class of the object.  The optional javaClassNames
    340 
    341 
    342 
    343 Ryan, et al.                 Informational                      [Page 6]
    344 
    346 RFC 2713                Schema for Java Objects             October 1999
    347 
    348 
    349    attribute is used to record additional class and interface names.
    350    The optional javaCodebase attribute is used to store the locations of
    351    the object factory's and the object's class definitions.
    352 
    353    A directory entry containing a JNDI reference is represented by the
    354    object class javaNamingReference, which is a subclass of javaObject.
    355    javaNamingReference is an auxiliary object class, which means that it
    356    needs to be mixed in with a structural object class.
    357    javaNamingReference's definition is given in Section 4.
    358 
    359 2.5 Remote Objects
    360 
    361    The Java Remote Method Invocation (RMI) system [RMI] is a mechanism
    362    that enables an object on one Java virtual machine to invoke methods
    363    on an object in another Java virtual machine. Any object whose
    364    methods can be invoked in this way must implement the java.rmi.Remote
    365    interface.  When such an object is invoked, its arguments are
    366    marshalled and sent from the local virtual machine to the remote one,
    367    where the arguments are unmarshalled and used.  When the method
    368    terminates, the results are marshalled from the remote machine and
    369    sent to the caller's virtual machine.
    370 
    371    To make a remote object accessible to other virtual machines, a
    372    program typically registers it with the RMI registry.  The program
    373    supplies to the RMI registry the string name of the remote object and
    374    the remote object itself.  When a program wants to access a remote
    375    object, it supplies the object's string name to the RMI registry on
    376    the same machine as the remote object.  The RMI registry returns to
    377    the caller a reference (called "stub") to the remote object.  When
    378    the program receives the stub for the remote object, it can invoke
    379    methods on the remote object (through the stub).  A program can also
    380    obtain references to remote objects as a result of remote calls to
    381    other remote objects or from other naming services.  For example, the
    382    program can look up a reference to a remote object from an LDAP
    383    server that supports the schema defined in this document.
    384 
    385    The string name accepted by the RMI registry has the syntax
    386    "rmi://hostname:port/remoteObjectName", where "hostname" and "port"
    387    identify the machine and port on which the RMI registry is running,
    388    respectively, and "remoteObjectName" is the string name of the remote
    389    object.  "hostname", "port", and the prefix, "rmi:", are optional. If
    390    "hostname" is not specified, it defaults to the local host.  If
    391    "port" is not specified, it defaults to 1099.  If "remoteObjectName"
    392    is not specified, then the object being named is the RMI registry
    393    itself.  See [RMI] for details.
    394 
    395 
    396 
    397 
    398 
    399 
    400 Ryan, et al.                 Informational                      [Page 7]
    401 
    403 RFC 2713                Schema for Java Objects             October 1999
    404 
    405 
    406    RMI can be supported using different protocols: the Java Remote
    407    Method Protocol (JRMP) and the Internet Inter-ORB Protocol (IIOP).
    408    The JRMP is a specialized protocol designed for RMI; the IIOP is the
    409    standard protocol for communication between CORBA objects [CORBA].
    410    RMI over IIOP allows Java remote objects to communicate with CORBA
    411    objects which might be written in a non-Java programming language
    412    [RMI-IIOP].
    413 
    414 2.5.1 Representation in the Directory
    415 
    416    Remote objects that use the IIOP are represented in the directory as
    417    CORBA object references [CORBA-LDAP].  Remote objects that use the
    418    JRMP are represented in the directory in one of two ways: as a
    419    marshalled object, or as a JNDI reference.
    420 
    421    A marshalled object records the codebases of the remote object's stub
    422    and any serializable or remote objects that it references, and
    423    replaces remote objects with their stubs.  To store a Remote object
    424    as a marshalled object (java.rmi.MarshalledObject), you first create
    425    a java.rmi.MarshalledObject instance for it.
    426 
    427        java.rmi.Remote robj = ...;
    428        java.rmi.MarshalledObject mobj =
    429            new java.rmi.MarshalledObject(robj);
    430 
    431    You can then store the MarshalledObject instance as a
    432    javaMarshalledObject.  The javaClassName attribute should contain the
    433    fully qualified name of the distinguished class of the remote object.
    434    The javaClassNames attribute should contain the names of the classes
    435    and interfaces of the remote object.  To read the remote object back
    436    from the directory, first deserialize the contents of the
    437    javaSerializedData to get a MarshalledObject (mobj), then retrieve it
    438    from the MarshalledObject as follows:
    439 
    440        java.rmi.Remote robj = (java.rmi.Remote)mobj.get();
    441 
    442    This returns the remote stub, which you can then use to invoke remote
    443    methods.
    444 
    445    MarshalledObject is available only on the Java 2 Platform, Standard
    446    Edition, v1.2 and higher releases. Therefore, a remote object stored
    447    as a MarshalledObject can only be read by clients using the the Java
    448    2 Platform, Standard Edition, v1.2 or higher releases.
    449 
    450 
    451 
    452 
    453 
    454 
    455 
    456 
    457 Ryan, et al.                 Informational                      [Page 8]
    458 
    460 RFC 2713                Schema for Java Objects             October 1999
    461 
    462 
    463    To store a remote object as a JNDI reference, you first create a
    464    javax.naming.Reference object instance for it using the remote
    465    object's string name as it has been, or will be, recorded with the
    466    RMI registry, with the additional restriction that the "rmi:" prefix
    467    must be present. Here's an example:
    468 
    469        javax.naming.Reference ref = new javax.naming.Reference(
    470          obj.getClass().getName(),
    471          new javax.naming.StringRefAddr("URL",
    472              "rmi://rserver/AppRemoteObjectX"));
    473 
    474    You then store the javax.naming.Reference instance as a
    475    javaNamingReference.  The advantage of using a JNDI reference is that
    476    this can be done without a reference to the remote object. In fact,
    477    the remote object does not have to exist at the time that this
    478    recording in the directory is made.  The remote object needs to exist
    479    and be bound with the RMI registry when the object is looked up from
    480    the directory.
    481 
    482 2.6  Serialized Objects Vs. Marshalled Objects Vs. References
    483 
    484    The object classes defined in this document store different aspects
    485    of the Java objects.
    486 
    487    A javaSerializedObject or a serializable object stored as a
    488    javaMarshalledObject represents the object itself, while a
    489    javaNamingReference or a remote object stored as a
    490    javaMarshalledObject represents a "pointer" to the object.
    491 
    492    When storing a serializable object in the directory, you have a
    493    choice of storing it as a javaSerializedObject or a
    494    javaMarshalledObject.  The javaSerializedObject object class provides
    495    the basic way in which to store serializable objects. When you create
    496    an LDAP entry using the javaSerializableObject object class, you must
    497    explicitly set the javaCodebase attribute if you want readers of that
    498    entry to know where to load the class definitions of the object. When
    499    you create an LDAP entry using the javaMarshalledObject object class,
    500    you use the MarshalledObject class.  The MarshalledObject class uses
    501    the RMI infrastructure available on the Java platform to automate how
    502    codebase information is gathered and recorded, thus freeing you from
    503    having to set the javaCodebase attribute. On the other hand, the
    504    javaCodebase attribute is human-readable and can be updated easily by
    505    using text-based tools without having to change other parts of the
    506    entry.  This allows you, for instance, to move the class definitions
    507    to another location and then update the javaCodebase attribute to
    508    reflect the move without having to update the serialized object
    509    itself.
    510 
    511 
    512 
    513 
    514 Ryan, et al.                 Informational                      [Page 9]
    515 
    517 RFC 2713                Schema for Java Objects             October 1999
    518 
    519 
    520    A javaNamingReference provides a way of recording address information
    521    about an object which itself is not directly stored in the directory.
    522    A remote object stored as a javaMarshalledObject also records address
    523    information (the object's "stub") of an object which itself is not
    524    directory stored in the directory.  In other words, you can think of
    525    these as compact representations of the information required to
    526    access the object.
    527 
    528    A javaNamingReference typically consists of a small number of human-
    529    readable strings.  Standard text-based tools for directory
    530    administration may therefore be used to add, read, or modify
    531    reference entries -- if so desired -- quite easily.  Serialized and
    532    marshalled objects are not intended to be read or manipulated
    533    directly by humans.
    534 
    535 3 Attribute Type Definitions
    536 
    537    The following attribute types are defined in this document:
    538 
    539        javaClassName
    540        javaClassNames
    541        javaCodebase
    542        javaSerializedData
    543        javaFactory
    544        javaReferenceAddress
    545        javaDoc
    546 
    547 3.1 javaClassName
    548 
    549    This attribute stores the fully qualified name of the Java object's
    550    "distinguished" class or interface (for example, "java.lang.String").
    551    It is a single-valued attribute. This attribute's syntax is '
    552    Directory String' and its case is significant.
    553 
    554        ( 1.3.6.1.4.1.42.2.27.4.1.6
    555          NAME 'javaClassName'
    556          DESC 'Fully qualified name of distinguished Java class or
    557                interface'
    558          EQUALITY caseExactMatch
    559          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    560          SINGLE-VALUE
    561        )
    562 
    563 
    564 
    565 
    566 
    567 
    568 
    569 
    570 
    571 Ryan, et al.                 Informational                     [Page 10]
    572 
    574 RFC 2713                Schema for Java Objects             October 1999
    575 
    576 
    577 3.2 javaCodebase
    578 
    579    This attribute stores the Java class definition's locations.  It
    580    specifies the locations from which to load the class definition for
    581    the class specified by the javaClassName attribute.  Each value of
    582    the attribute contains an ordered list of URLs, separated by spaces.
    583    For example, a value of "url1 url2 url3" means that the three
    584    (possibly interdependent) URLs (url1, url2, and url3) form the
    585    codebase for loading in the Java class definition.
    586 
    587    If the javaCodebase attribute contains more than one value, each
    588    value is an independent codebase. That is, there is no relationship
    589    between the URLs in one value and those in another; each value can be
    590    viewed as an alternate source for loading the Java class definition.
    591    See [Java] for information regarding class loading.
    592 
    593    This attribute's syntax is 'IA5 String' and its case is significant.
    594 
    595        ( 1.3.6.1.4.1.42.2.27.4.1.7
    596          NAME 'javaCodebase'
    597          DESC 'URL(s) specifying the location of class definition'
    598          EQUALITY caseExactIA5Match
    599          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
    600        )
    601 
    602 3.3 javaClassNames
    603 
    604    This attribute stores the Java object's fully qualified class or
    605    interface names (for example, "java.lang.String").  It is a
    606    multivalued attribute. When more than one value is present, each is
    607    the name of a class or interface, or ancestor class or interface, of
    608    this object.
    609 
    610    This attribute's syntax is 'Directory String' and its case is
    611    significant.
    612 
    613        ( 1.3.6.1.4.1.42.2.27.4.1.13
    614          NAME 'javaClassNames'
    615          DESC 'Fully qualified Java class or interface name'
    616          EQUALITY caseExactMatch
    617          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    618        )
    619 
    620 
    621 
    622 
    623 
    624 
    625 
    626 
    627 
    628 Ryan, et al.                 Informational                     [Page 11]
    629 
    631 RFC 2713                Schema for Java Objects             October 1999
    632 
    633 
    634 3.4 javaSerializedData
    635 
    636    This attribute stores the serialized form of a Java object.  The
    637    serialized form is described in [Serial].
    638 
    639    This attribute's syntax is 'Octet String'.
    640 
    641        ( 1.3.6.1.4.1.42.2.27.4.1.8
    642          NAME 'javaSerializedData
    643          DESC 'Serialized form of a Java object'
    644          SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
    645          SINGLE-VALUE
    646        )
    647 
    648 3.5 javaFactory
    649 
    650    This attribute stores the fully qualified class name of the object
    651    factory (for example, "com.wiz.jndi.WizObjectFactory") that can be
    652    used to create an instance of the object identified by the
    653    javaClassName attribute.
    654 
    655    This attribute's syntax is 'Directory String' and its case is
    656    significant.
    657 
    658        ( 1.3.6.1.4.1.42.2.27.4.1.10
    659          NAME 'javaFactory'
    660          DESC 'Fully qualified Java class name of a JNDI object factory'
    661          EQUALITY caseExactMatch
    662          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    663          SINGLE-VALUE
    664        )
    665 
    666 3.6 javaReferenceAddress
    667 
    668    This attribute represents the sequence of addresses of a JNDI
    669    reference.  Each of its values represents one address, a Java object
    670    of type javax.naming.RefAddr.  Its value is a concatenation of the
    671    address type and address contents, preceded by a sequence number (the
    672    order of addresses in a JNDI reference is significant).  For example:
    673 
    674        #0#TypeA#ValA
    675        #1#TypeB#ValB
    676        #2#TypeC##rO0ABXNyABpq...
    677 
    678    In more detail, the value is encoded as follows:
    679 
    680 
    681 
    682 
    683 
    684 
    685 Ryan, et al.                 Informational                     [Page 12]
    686 
    688 RFC 2713                Schema for Java Objects             October 1999
    689 
    690 
    691    The delimiter is the first character of the value.  For readability
    692    the character '#' is recommended when it is not otherwise used
    693    anywhere in the value, but any character may be used subject to
    694    restrictions given below.
    695 
    696    The first delimiter is followed by the sequence number.  The sequence
    697    number of an address is its position in the JNDI reference, with the
    698    first address being numbered 0.  It is represented by its shortest
    699    string form, in decimal notation.
    700 
    701    The sequence number is followed by a delimiter, then by the address
    702    type, and then by another delimiter.  If the address is of Java class
    703    javax.naming.StringRefAddr, then this delimiter is followed by the
    704    value of the address contents (which is a string).  Otherwise, this
    705    delimiter is followed immediately by another delimiter, and then by
    706    the Base64 encoding of the serialized form of the entire address.
    707 
    708    The delimiter may be any character other than a digit or a character
    709    contained in the address type.  In addition, if the address contents
    710    is a string, the delimiter may not be the first character of that
    711    string.
    712 
    713    This attribute's syntax is 'Directory String' and its case is
    714    significant.  It can contain multiple values.
    715 
    716        ( 1.3.6.1.4.1.42.2.27.4.1.11
    717          NAME 'javaReferenceAddress'
    718          DESC 'Addresses associated with a JNDI Reference'
    719          EQUALITY caseExactMatch
    720          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    721        )
    722 
    723 3.7 javaDoc
    724 
    725    This attribute stores a pointer to the Java documentation for the
    726    class.  It's value is a URL. For example, the following URL points to
    727    the specification of the java.lang.String class:
    728    http://java.sun.com/products/jdk/1.2/docs/api/java/lang/String.html
    729 
    730    This attribute's syntax is 'IA5 String' and its case is significant.
    731 
    732        ( 1.3.6.1.4.1.42.2.27.4.1.12
    733          NAME 'javaDoc'
    734          DESC 'The Java documentation for the class'
    735          EQUALITY caseExactIA5Match
    736          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
    737        )
    738 
    739 
    740 
    741 
    742 Ryan, et al.                 Informational                     [Page 13]
    743 
    745 RFC 2713                Schema for Java Objects             October 1999
    746 
    747 
    748 4 Object Class Definitions
    749 
    750    The following object classes are defined in this document:
    751 
    752        javaContainer
    753        javaObject
    754        javaSerializedObject
    755        javaMarshalledObject
    756        javaNamingReference
    757 
    758 4.1 javaContainer
    759 
    760    This structural object class represents a container for a Java
    761    object.
    762 
    763        ( 1.3.6.1.4.1.42.2.27.4.2.1
    764          NAME 'javaContainer'
    765          DESC 'Container for a Java object'
    766          SUP top
    767          STRUCTURAL
    768          MUST ( cn )
    769        )
    770 
    771 4.2 javaObject
    772 
    773    This abstract object class represents a Java object.  A javaObject
    774    cannot exist in the directory; only auxiliary or structural
    775    subclasses of it can exist in the directory.
    776 
    777        ( 1.3.6.1.4.1.42.2.27.4.2.4
    778          NAME 'javaObject'
    779          DESC 'Java object representation'
    780          SUP top
    781          ABSTRACT
    782          MUST ( javaClassName )
    783          MAY ( javaClassNames $
    784                javaCodebase $
    785                javaDoc $
    786                description )
    787        )
    788 
    789 
    790 
    791 
    792 
    793 
    794 
    795 
    796 
    797 
    798 
    799 Ryan, et al.                 Informational                     [Page 14]
    800 
    802 RFC 2713                Schema for Java Objects             October 1999
    803 
    804 
    805 4.3 javaSerializedObject
    806 
    807    This auxiliary object class represents a Java serialized object.  It
    808    must be mixed in with a structural object class.
    809 
    810        ( 1.3.6.1.4.1.42.2.27.4.2.5
    811          NAME 'javaSerializedObject'
    812          DESC 'Java serialized object'
    813          SUP javaObject
    814          AUXILIARY
    815          MUST ( javaSerializedData )
    816        )
    817 
    818 4.4 javaMarshalledObject
    819 
    820    This auxiliary object class represents a Java marshalled object.  It
    821    must be mixed in with a structural object class.
    822 
    823        ( 1.3.6.1.4.1.42.2.27.4.2.8
    824          NAME 'javaMarshalledObject'
    825          DESC 'Java marshalled object'
    826          SUP javaObject
    827          AUXILIARY
    828          MUST ( javaSerializedData )
    829        )
    830 
    831 4.5 javaNamingReference
    832 
    833    This auxiliary object class represents a JNDI reference.  It must be
    834    mixed in with a structural object class.
    835 
    836        ( 1.3.6.1.4.1.42.2.27.4.2.7
    837          NAME 'javaNamingReference'
    838          DESC 'JNDI reference'
    839          SUP javaObject
    840          AUXILIARY
    841          MAY ( javaReferenceAddress $
    842                javaFactory )
    843        )
    844 
    845 
    846 
    847 
    848 
    849 
    850 
    851 
    852 
    853 
    854 
    855 
    856 Ryan, et al.                 Informational                     [Page 15]
    857 
    859 RFC 2713                Schema for Java Objects             October 1999
    860 
    861 
    862 5. Security Considerations
    863 
    864    Serializing an object and storing it into the directory enables (a
    865    copy of) the object to be examined and used outside the environment
    866    in which it was originally created.  The directory entry containing
    867    the serialized object could be read and modified within the
    868    constraints imposed by the access control mechanisms of the
    869    directory.  If an object contains sensitive information or
    870    information that could be misused outside of the context in which it
    871    was created, the object should not be stored in the directory.  For
    872    more details on security issues relating to serialization in general,
    873    see [Serial].
    874 
    875 6. Acknowledgements
    876 
    877    We would like to thank Joseph Fialli, Peter Jones, Roger Riggs, Bob
    878    Scheifler, and Ann Wollrath of Sun Microsystems for their comments
    879    and suggestions.
    880 
    881 7. References
    882 
    883    [CORBA]      The Object Management Group, "Common Object Request
    884                 Broker Architecture Specification 2.0,"
    885                 http://www.omg.org
    886 
    887    [CORBA-LDAP] Ryan, V., Lee, R. and S. Seligman, "Schema for
    888                 Representing CORBA Object References in an LDAP
    889                 Directory", RFC 2714, October 1999.
    890 
    891    [Java]       Ken Arnold and James Gosling, "The Java(tm) Programming
    892                 Language," Second Edition, ISBN 0-201-31006-6.
    893 
    894    [JNDI]       Java Software, Sun Microsystems, Inc., "The Java(tm)
    895                 Naming and Directory Interface (tm) Specification,"
    896                 February 1998.  http://java.sun.com/products/jndi/
    897 
    898    [LDAPv3]     Wahl, M., Howes, T. and  S. Kille, "Lightweight
    899                 Directory Access Protocol (v3)", RFC 2251, December
    900                 1997.
    901 
    902    [RMI]        Java Software, Sun Microsystems, Inc., "Remote Method
    903                 Invocation," November 1998.
    904                 http://java.sun.com/products/jdk/1.2/docs/guide/rmi
    905 
    906 
    907 
    908 
    909 
    910 
    911 
    912 
    913 Ryan, et al.                 Informational                     [Page 16]
    914 
    916 RFC 2713                Schema for Java Objects             October 1999
    917 
    918 
    919    [RMI-IIOP]   IBM and Java Software, Sun Microsystems, Inc., "RMI over
    920                 IIOP", June 1999.
    921                 http://java.sun.com/products/rmi-iiop/
    922 
    923    [Serial]     Java Software, Sun Microsystems, Inc., "Object
    924                 Serialization Specification," November 1998.
    925                 http://java.sun.com/products/jdk/1.2/docs/guide/
    926                 serialization
    927 
    928    [v3Schema]   Wahl, M., "A Summary of the X.500(96) User Schema for
    929                 use with LDAPv3", RFC 2256, December 1997.
    930 
    931 8. Authors' Addresses
    932 
    933    Vincent Ryan
    934    Sun Microsystems, Inc.
    935    Mail Stop EDUB03
    936    901 San Antonio Road
    937    Palo Alto, CA 94303
    938    USA
    939 
    940    Phone: +353 1 819 9151
    941    EMail: vincent.ryan (a] ireland.sun.com
    942 
    943 
    944    Scott Seligman
    945    Sun Microsystems, Inc.
    946    Mail Stop UCUP02-209
    947    901 San Antonio Road
    948    Palo Alto, CA 94303
    949    USA
    950 
    951    Phone: +1 408 863 3222
    952    EMail: scott.seligman (a] eng.sun.com
    953 
    954 
    955    Rosanna Lee
    956    Sun Microsystems, Inc.
    957    Mail Stop UCUP02-206
    958    901 San Antonio Road
    959    Palo Alto, CA 94303
    960    USA
    961 
    962    Phone: +1 408 863 3221
    963    EMail: rosanna.lee (a] eng.sun.com
    964 
    965 
    966 
    967 
    968 
    969 
    970 Ryan, et al.                 Informational                     [Page 17]
    971 
    973 RFC 2713                Schema for Java Objects             October 1999
    974 
    975 
    976 Appendix - LDAP Schema
    977 
    978   -- Attribute types --
    979 
    980   ( 1.3.6.1.4.1.42.2.27.4.1.6
    981     NAME 'javaClassName'
    982     DESC 'Fully qualified name of distinguished Java class or interface'
    983     EQUALITY caseExactMatch
    984     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    985     SINGLE-VALUE
    986   )
    987 
    988   ( 1.3.6.1.4.1.42.2.27.4.1.7
    989     NAME 'javaCodebase'
    990     DESC 'URL(s) specifying the location of class definition'
    991     EQUALITY caseExactIA5Match
    992     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
    993   )
    994 
    995   ( 1.3.6.1.4.1.42.2.27.4.1.8
    996     NAME 'javaSerializedData'
    997     DESC 'Serialized form of a Java object'
    998     SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
    999     SINGLE-VALUE
   1000   )
   1001 
   1002   ( 1.3.6.1.4.1.42.2.27.4.1.10
   1003     NAME 'javaFactory'
   1004     DESC 'Fully qualified Java class name of a JNDI object factory'
   1005     EQUALITY caseExactMatch
   1006     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   1007     SINGLE-VALUE
   1008   )
   1009 
   1010   ( 1.3.6.1.4.1.42.2.27.4.1.11
   1011     NAME 'javaReferenceAddress'
   1012     DESC 'Addresses associated with a JNDI Reference'
   1013     EQUALITY caseExactMatch
   1014     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   1015   )
   1016 
   1017   ( 1.3.6.1.4.1.42.2.27.4.1.12
   1018     NAME 'javaDoc'
   1019     DESC 'The Java documentation for the class'
   1020     EQUALITY caseExactIA5Match
   1021     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
   1022   )
   1023 
   1024 
   1025 
   1026 
   1027 Ryan, et al.                 Informational                     [Page 18]
   1028 
   1030 RFC 2713                Schema for Java Objects             October 1999
   1031 
   1032 
   1033   ( 1.3.6.1.4.1.42.2.27.4.1.13
   1034     NAME 'javaClassNames'
   1035     DESC 'Fully qualified Java class or interface name'
   1036     EQUALITY caseExactMatch
   1037     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   1038   )
   1039 
   1040   -- from RFC-2256 --
   1041 
   1042   ( 2.5.4.13
   1043     NAME 'description'
   1044     EQUALITY caseIgnoreMatch
   1045     SUBSTR caseIgnoreSubstringsMatch
   1046     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024}
   1047   )
   1048 
   1049   -- Object classes --
   1050 
   1051   ( 1.3.6.1.4.1.42.2.27.4.2.1
   1052     NAME 'javaContainer'
   1053     DESC 'Container for a Java object'
   1054     SUP top
   1055     STRUCTURAL
   1056     MUST ( cn )
   1057   )
   1058 
   1059   ( 1.3.6.1.4.1.42.2.27.4.2.4
   1060     NAME 'javaObject'
   1061     DESC 'Java object representation'
   1062     SUP top
   1063     ABSTRACT
   1064     MUST ( javaClassName )
   1065     MAY ( javaClassNames $ javaCodebase $ javaDoc $ description )
   1066   )
   1067 
   1068   ( 1.3.6.1.4.1.42.2.27.4.2.5
   1069     NAME 'javaSerializedObject'
   1070     DESC 'Java serialized object'
   1071     SUP javaObject
   1072     AUXILIARY
   1073     MUST ( javaSerializedData )
   1074   )
   1075 
   1076 
   1077 
   1078 
   1079 
   1080 
   1081 
   1082 
   1083 
   1084 Ryan, et al.                 Informational                     [Page 19]
   1085 
   1087 RFC 2713                Schema for Java Objects             October 1999
   1088 
   1089 
   1090   ( 1.3.6.1.4.1.42.2.27.4.2.7
   1091     NAME 'javaNamingReference'
   1092     DESC 'JNDI reference'
   1093     SUP javaObject
   1094     AUXILIARY
   1095     MAY ( javaReferenceAddress $ javaFactory )
   1096   )
   1097 
   1098   ( 1.3.6.1.4.1.42.2.27.4.2.8
   1099     NAME 'javaMarshalledObject'
   1100     DESC 'Java marshalled object'
   1101     SUP javaObject
   1102     AUXILIARY
   1103     MUST ( javaSerializedData )
   1104   )
   1105 
   1106   -- Matching rule from ISO X.520 --
   1107 
   1108   ( 2.5.13.5
   1109     NAME 'caseExactMatch'
   1110     SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   1111   )
   1112 
   1113 
   1114 
   1115 
   1116 
   1117 
   1118 
   1119 
   1120 
   1121 
   1122 
   1123 
   1124 
   1125 
   1126 
   1127 
   1128 
   1129 
   1130 
   1131 
   1132 
   1133 
   1134 
   1135 
   1136 
   1137 
   1138 
   1139 
   1140 
   1141 Ryan, et al.                 Informational                     [Page 20]
   1142 
   1144 RFC 2713                Schema for Java Objects             October 1999
   1145 
   1146 
   1147 Full Copyright Statement
   1148 
   1149    Copyright (C) The Internet Society (1999).  All Rights Reserved.
   1150 
   1151    This document and translations of it may be copied and furnished to
   1152    others, and derivative works that comment on or otherwise explain it
   1153    or assist in its implementation may be prepared, copied, published
   1154    and distributed, in whole or in part, without restriction of any
   1155    kind, provided that the above copyright notice and this paragraph are
   1156    included on all such copies and derivative works.  However, this
   1157    document itself may not be modified in any way, such as by removing
   1158    the copyright notice or references to the Internet Society or other
   1159    Internet organizations, except as needed for the purpose of
   1160    developing Internet standards in which case the procedures for
   1161    copyrights defined in the Internet Standards process must be
   1162    followed, or as required to translate it into languages other than
   1163    English.
   1164 
   1165    The limited permissions granted above are perpetual and will not be
   1166    revoked by the Internet Society or its successors or assigns.
   1167 
   1168    This document and the information contained herein is provided on an
   1169    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   1170    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   1171    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   1172    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   1173    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
   1174 
   1175 Acknowledgement
   1176 
   1177    Funding for the RFC Editor function is currently provided by the
   1178    Internet Society.
   1179 
   1180 
   1181 
   1182 
   1183 
   1184 
   1185 
   1186 
   1187 
   1188 
   1189 
   1190 
   1191 
   1192 
   1193 
   1194 
   1195 
   1196 
   1197 
   1198 Ryan, et al.                 Informational                     [Page 21]
   1199 
   1201