# Java Object Schema
# $OpenLDAP: pkg/ldap/servers/slapd/schema/java.schema,v 1.3 2002/01/04 20:17:55 kurt Exp $
# depends upon core.schema

# Network Working Group                                            V. Ryan
# Request for Comments: 2713                                   S. Seligman
# Category: Informational                                           R. Lee
#                                                   Sun Microsystems, Inc.
#                                                             October 1999
# 
# 
#      Schema for Representing Java(tm) Objects in an LDAP Directory
# 
# Status of this Memo
# 
#    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 Notice
# 
#    Copyright (C) The Internet Society (1999).  All Rights Reserved.
# 
# Abstract
# 
#    This document defines the schema for representing Java(tm) objects in
#    an LDAP directory [LDAPv3].  It defines schema elements to represent
#    a Java serialized object [Serial], a Java marshalled object [RMI], a
#    Java remote object [RMI], and a JNDI reference [JNDI].
# 

# [trimmed]

# 3 Attribute Type Definitions
# 
#    The following attribute types are defined in this document:
# 
#        javaClassName
#        javaClassNames
#        javaCodebase
#        javaSerializedData
#        javaFactory
#        javaReferenceAddress
#        javaDoc
# 
# 3.1 javaClassName
# 
#    This attribute stores the fully qualified name of the Java object's
#    "distinguished" class or interface (for example, "java.lang.String").
#    It is a single-valued attribute. This attribute's syntax is '
#    Directory String' and its case is significant.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.6
#          NAME 'javaClassName'
#          DESC 'Fully qualified name of distinguished Java class or
#                interface'
#          EQUALITY caseExactMatch
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
#          SINGLE-VALUE
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.6
	NAME 'javaClassName'
	DESC 'Fully qualified name of distinguished Java class or interface'
	EQUALITY caseExactMatch
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
	SINGLE-VALUE )
 
# 3.2 javaCodebase
# 
#    This attribute stores the Java class definition's locations.  It
#    specifies the locations from which to load the class definition for
#    the class specified by the javaClassName attribute.  Each value of
#    the attribute contains an ordered list of URLs, separated by spaces.
#    For example, a value of "url1 url2 url3" means that the three
#    (possibly interdependent) URLs (url1, url2, and url3) form the
#    codebase for loading in the Java class definition.
# 
#    If the javaCodebase attribute contains more than one value, each
#    value is an independent codebase. That is, there is no relationship
#    between the URLs in one value and those in another; each value can be
#    viewed as an alternate source for loading the Java class definition.
#    See [Java] for information regarding class loading.
# 
#    This attribute's syntax is 'IA5 String' and its case is significant.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.7
#          NAME 'javaCodebase'
#          DESC 'URL(s) specifying the location of class definition'
#          EQUALITY caseExactIA5Match
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.7
	NAME 'javaCodebase'
	DESC 'URL(s) specifying the location of class definition'
	EQUALITY caseExactIA5Match
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 3.3 javaClassNames
# 
#    This attribute stores the Java object's fully qualified class or
#    interface names (for example, "java.lang.String").  It is a
#    multivalued attribute. When more than one value is present, each is
#    the name of a class or interface, or ancestor class or interface, of
#    this object.
# 
#    This attribute's syntax is 'Directory String' and its case is
#    significant.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.13
#          NAME 'javaClassNames'
#          DESC 'Fully qualified Java class or interface name'
#          EQUALITY caseExactMatch
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
#        )
# 
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.13
	NAME 'javaClassNames'
	DESC 'Fully qualified Java class or interface name'
	EQUALITY caseExactMatch
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
 
# 3.4 javaSerializedData
# 
#    This attribute stores the serialized form of a Java object.  The
#    serialized form is described in [Serial].
# 
#    This attribute's syntax is 'Octet String'.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.8
#          NAME 'javaSerializedData
#          DESC 'Serialized form of a Java object'
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
#          SINGLE-VALUE
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.8
	NAME 'javaSerializedData'
	DESC 'Serialized form of a Java object'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
	SINGLE-VALUE )

# 3.5 javaFactory
# 
#    This attribute stores the fully qualified class name of the object
#    factory (for example, "com.wiz.jndi.WizObjectFactory") that can be
#    used to create an instance of the object identified by the
#    javaClassName attribute.
# 
#    This attribute's syntax is 'Directory String' and its case is
#    significant.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.10
#          NAME 'javaFactory'
#          DESC 'Fully qualified Java class name of a JNDI object factory'
#          EQUALITY caseExactMatch
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
#          SINGLE-VALUE
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.10
	NAME 'javaFactory'
	DESC 'Fully qualified Java class name of a JNDI object factory'
	EQUALITY caseExactMatch
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
	SINGLE-VALUE )

# 3.6 javaReferenceAddress
# 
#    This attribute represents the sequence of addresses of a JNDI
#    reference.  Each of its values represents one address, a Java object
#    of type javax.naming.RefAddr.  Its value is a concatenation of the
#    address type and address contents, preceded by a sequence number (the
#    order of addresses in a JNDI reference is significant).  For example:
# 
#        #0#TypeA#ValA
#        #1#TypeB#ValB
#        #2#TypeC##rO0ABXNyABpq...
# 
#    In more detail, the value is encoded as follows:
# 
#    The delimiter is the first character of the value.  For readability
#    the character '#' is recommended when it is not otherwise used
#    anywhere in the value, but any character may be used subject to
#    restrictions given below.
# 
#    The first delimiter is followed by the sequence number.  The sequence
#    number of an address is its position in the JNDI reference, with the
#    first address being numbered 0.  It is represented by its shortest
#    string form, in decimal notation.
# 
#    The sequence number is followed by a delimiter, then by the address
#    type, and then by another delimiter.  If the address is of Java class
#    javax.naming.StringRefAddr, then this delimiter is followed by the
#    value of the address contents (which is a string).  Otherwise, this
#    delimiter is followed immediately by another delimiter, and then by
#    the Base64 encoding of the serialized form of the entire address.
# 
#    The delimiter may be any character other than a digit or a character
#    contained in the address type.  In addition, if the address contents
#    is a string, the delimiter may not be the first character of that
#    string.
# 
#    This attribute's syntax is 'Directory String' and its case is
#    significant.  It can contain multiple values.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.11
#          NAME 'javaReferenceAddress'
#          DESC 'Addresses associated with a JNDI Reference'
#          EQUALITY caseExactMatch
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.11
	NAME 'javaReferenceAddress'
	DESC 'Addresses associated with a JNDI Reference'
	EQUALITY caseExactMatch
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

# 3.7 javaDoc
# 
#    This attribute stores a pointer to the Java documentation for the
#    class.  It's value is a URL. For example, the following URL points to
#    the specification of the java.lang.String class:
#    http://java.sun.com/products/jdk/1.2/docs/api/java/lang/String.html
# 
#    This attribute's syntax is 'IA5 String' and its case is significant.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.1.12
#          NAME 'javaDoc'
#          DESC 'The Java documentation for the class'
#          EQUALITY caseExactIA5Match
#          SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
#        )
# 
attributetype ( 1.3.6.1.4.1.42.2.27.4.1.12
	NAME 'javaDoc'
	DESC 'The Java documentation for the class'
	EQUALITY caseExactIA5Match
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 4 Object Class Definitions
# 
#    The following object classes are defined in this document:
# 
#        javaContainer
#        javaObject
#        javaSerializedObject
#        javaMarshalledObject
#        javaNamingReference
# 
# 4.1 javaContainer
# 
#    This structural object class represents a container for a Java
#    object.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.2.1
#          NAME 'javaContainer'
#          DESC 'Container for a Java object'
#          SUP top
#          STRUCTURAL
#          MUST ( cn )
#        )
# 
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
	NAME 'javaContainer'
	DESC 'Container for a Java object'
	SUP top
	STRUCTURAL
	MUST cn )

# 4.2 javaObject
# 
#    This abstract object class represents a Java object.  A javaObject
#    cannot exist in the directory; only auxiliary or structural
#    subclasses of it can exist in the directory.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.2.4
#          NAME 'javaObject'
#          DESC 'Java object representation'
#          SUP top
#          ABSTRACT
#          MUST ( javaClassName )
#          MAY ( javaClassNames $
#                javaCodebase $
#                javaDoc $
#                description )
#        )
# 
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.4
	NAME 'javaObject'
	DESC 'Java object representation'
	SUP top
	ABSTRACT
	MUST javaClassName
	MAY ( javaClassNames $ javaCodebase $
		javaDoc $ description ) )

# 4.3 javaSerializedObject
# 
#    This auxiliary object class represents a Java serialized object.  It
#    must be mixed in with a structural object class.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.2.5
#          NAME 'javaSerializedObject'
#          DESC 'Java serialized object'
#          SUP javaObject
#          AUXILIARY
#          MUST ( javaSerializedData )
#        )
# 
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.5
	NAME 'javaSerializedObject'
	DESC 'Java serialized object'
	SUP javaObject
	AUXILIARY
	MUST javaSerializedData )
 
# 4.4 javaMarshalledObject
# 
#    This auxiliary object class represents a Java marshalled object.  It
#    must be mixed in with a structural object class.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.2.8
#          NAME 'javaMarshalledObject'
#          DESC 'Java marshalled object'
#          SUP javaObject
#          AUXILIARY
#          MUST ( javaSerializedData )
#        )
# 
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.8
	NAME 'javaMarshalledObject'
	DESC 'Java marshalled object'
	SUP javaObject
	AUXILIARY
	MUST javaSerializedData )

# 4.5 javaNamingReference
# 
#    This auxiliary object class represents a JNDI reference.  It must be
#    mixed in with a structural object class.
# 
#        ( 1.3.6.1.4.1.42.2.27.4.2.7
#          NAME 'javaNamingReference'
#          DESC 'JNDI reference'
#          SUP javaObject
#          AUXILIARY
#          MAY ( javaReferenceAddress $
#                javaFactory )
#        )
# 
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.7
	NAME 'javaNamingReference'
	DESC 'JNDI reference'
	SUP javaObject
	AUXILIARY
	MAY ( javaReferenceAddress $ javaFactory ) )
 
# Full Copyright Statement
# 
#    Copyright (C) The Internet Society (1999).  All Rights Reserved.
# 
#    This document and translations of it may be copied and furnished to
#    others, and derivative works that comment on or otherwise explain it
#    or assist in its implementation may be prepared, copied, published
#    and distributed, in whole or in part, without restriction of any
#    kind, provided that the above copyright notice and this paragraph are
#    included on all such copies and derivative works.  However, this
#    document itself may not be modified in any way, such as by removing
#    the copyright notice or references to the Internet Society or other
#    Internet organizations, except as needed for the purpose of
#    developing Internet standards in which case the procedures for
#    copyrights defined in the Internet Standards process must be
#    followed, or as required to translate it into languages other than
#    English.
# 
#    The limited permissions granted above are perpetual and will not be
#    revoked by the Internet Society or its successors or assigns.
# 
#    This document and the information contained herein is provided on an
#    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
#    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
#    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
#    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
#    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
