Docs 2.0 Configuration Reference Guide


This guide will cover sections and options related to Project OpenPTK's XML configuration file. A complete Sample XML Configuration File (openptk.xml) is available for reference.

Sections:

Definitions Definition
    Attributes Attribute
        Functions Function
            Arguments Argument
            Operations Operation
Associations Association
    Attributes Attribute
        Functions Function
            Arguments Argument
            Operations Operation

Top


Defaults

These Properties are made available for reference by other Properties using the %{property_name} syntax. These Properties are NOT automatically copied into any of the other Properties defined within the XML configuration file. The following Elements will have their value Arguments checked for these Defaults:

  • Property
  • Argument

Syntax

   <Defaults>
      <Properties>
         <Property name="debug.level" value="4"/>
         <Property name="..." value="..."/>
      </Properties>
   </Defaults>

Arguments

None

Properties

Name Required Description Example Value
debug Yes Specifies what level of debugging data should be sent to the Logger. A value of "0" turns of all debugging output (only INFO and ERRORS are sent to the Logger. To turn on the debug out, set the value between "1" and "4". The higher the number, the more details. 4

Parent Element

<OpenPTK>

Child Element(s)

  • (none)

Top


Contexts

This section defines the available Contexts and sets some global values used by the Framework.

Properties

Properties defined at this level will be pushed to the all of the defined Contexts. Any Property can be added at this level. There are a number of required and optional INTERNAL Properties that need to be defined (see section below).

Syntax

<Contexts>
   <Properties>
      <Properties>
         <Property name="context.default"   value="Person-SunIdm-SPML"/>
         <Property name="context.classname" value="org.openptk.provision.common.TimeoutContext"/>
         <Property name="logger"            value="UnixLogFile"/>
         <Property name="audit"             value="false"/>
         <Property name="timestamp"         value="true"/>
      </Properties>
   </Properties>
   <Context ...>
   </Context>
   ...
</Contexts>

Arguments

None

Properties

Name Required Description Example Value
context.default Yes Which Context should be used if a Context is not specified. Person-SPML-Sun
context.classname Yes The fully qualified name of a Class that implements the ContextIF Interface. org.openptk.provision.common.BasicContext
logger Yes Which Logger should be used. The Logger is used by the Framework to handle all types of information that needs to be recorded to a log. UnixLogFile
audit No Send audit information to the Logger. Values are "true" or "false". false
timestamp No Collect timestamp information send timings to the Logger. Values are "true" or "false". true

Parent Element

<OpenPTK>

Child Element(s)

Top


Contexts.Context

A Context defines the combination of:

  • Definition
  • Connection
  • Association
  • AttrGroup
Properties

Properties defined at this level will be pushed to the all of the defined Operations (including the Properties defined in the high-level Element Contexts). Any Property can be added at this level. There are a number of required and optional INTERNAL Properties that need to be defined (see section below).

Syntax

      <Context id="..." enabled="..." definition="..." connection="..." association="...">
         <Properties>
            <Property name="context.description" value="Person to Sun Identity Manager using SPML"/>
            <Property name="operation.classname" value="org.openptk.provision.spi.operations.SpmlSunOperations"/>
            <Property name="key"                 value="uniqueid"/>
            <Property name="objectclass"         value="user"/>
            <Property name="timeout"             value="%{timeout.write}"/>
         </Properties>
         <Query type="..."/>
         <Operations>
            <Operation id="..." />
            ...
         </Operations>
      </Context>

Arguments

Name Required Description Example
id Yes A unique identifier for the Context id="Person-SunIdm-SPML"
enabled Yes Set a given Context to be enabled or not. If this is set to true then the Context is available for use. This argument allows for multiple Contexts to be defined while only having a sub-set of them be available for use. enabled="true"
definition Yes One of the defined Definitions definition="Person"
connection Yes/No A defined Connection. A Connection MUST either be defined at the Context level or within each Operation. If a Connection is defined in both locations, the Operation level Connection will be used. connection="SunIdMgr"
association Yes/No A defined Association. An Association MUST either be defined at the Context level or within each Operation. If an Association is defined in both locations, the Operation level Association will be used. association="SPML"

Properties

Be Careful

If a Property has the same name as a Property from the higher-level Element (Contexts) ... it will be replaced with the Property at this level.

Name Required Description Example Value
context.description No A description of the Context Production SPML Context for a Person
operation.classname No The fully qualified name of a class that implements the OperationsIF. This Property is not actually used by the Context. If it is set at this level, the Context, it will be pushed to all of the Operations within the Context. Any (or all) of the Operations can set their own classname Property. An Operation will use it's own classname Property instead of the Context's classname org.openptk.provision.spi.operations.SpmlSunOperations
key No The name of the Attribute that is designated as the unique identifier. This Property is not actually used by the Context. If it is set at this level, the Context, it will be pushed to all of the Operations within the Context. Any (or all) of the Operations can set their own key Property. An Operation will use it's own key Property instead of the Context's uniqueid
objectclass No The objectclass for all the Operations within the Context. This Property is not actually used by the Context. If it is set at this level, the Context, it will be pushed to all of the Operations within the Context. Any (or all) of the Operations can set their own objectclass Property. An Operation will use it's own objectclass Property instead of the Context's inetOrgPerson
timeout No Number of milliseconds an Operation should be allowed to process until it is stopped by the Context. This Property is used by the org.openptk.provision.common.TimeoutContext Context. If it is not set, the Context will use it's own internal default value. This Property is pushed to all Operations. An Operation can set (override) this Property. 5000

Parent Element

Contexts

Child Element(s)

*Query (optional: only one)
*Operations (required: one)

Top


Contexts.Context.Query

The Query Element is used to define scoping of the Context. The Query is not actually used by the Context, it is made available to the Operations. The Context will create a OpenPTK Query object and automatically add it to the Operation(s). The Operation implementation may or may not use the Query Element. Please refer to the Java Docs for details on configuring Query objects.

Syntax

<!-- simple query -->
<Query type="EQ" name="MemberObjectGroups" value="All People"/>
<!-- complex query -->
<Query type="AND">
  <Query type="EQ" name="MemberObjectGroups" serviceName="MemberObjectGroups" value="All People"/>
  <Query type="EQ" name="objectclass" value="user"/>
</Query>  

Arguments

Name Required Description Example
type Yes The queries Type. Refer to the Java Docs for available Types. For a "Simple Query", the type will be a typical evaluation key word (such as "EQ"). For a "Complex Query", the type will use either "AND" or "OR" for keywords. type="EQ"
name Yes The name of the value that's used for evaluation name="objectClass"
value Yes The value that will be used for evaluation value="inetOrgPerson"

Properties

None

Parent Element

Context

Child Element(s)

  • (none)

Top


Contexts.Context.Operations

Contains the allowed Operation implementations for the Context.

Syntax

<Operations>
   <Operation ...>
      ...
   </Operation>
   ...
</Operations>

Arguments

None

Properties

None

Parent Element

Context

Child Element(s)

Top


Contexts.Context.Operations.Operation

An available Operation for the Context.

Syntax

<Operation id="search" attrgroup="..." connection="..." association="...">
   <Properties>
      <Property name="classname"   value="org.openptk.provision.spi.operations.JndiOperations"/>
      <Property name="key"         value="uniqueid"/>
      <Property name="sort"        value="lastname,firstname"/>
   </Properties>
   <Query type="EQ" name="objectClass" value="inetOrgPerson"/>
</Operation>

Arguments

Name Required Description Example
id Yes A valid Operation type: create,read,update,delete,search,pwdchange,pwdreset. id="read"
attrgroup Yes A defined AttrGroup attrgroup=person-read
connection Yes/No A defined Connection. A Connection MUST either be defined at the Context level or within each Operation. If a Connection is defined in both locations, the Operation level Connection will be used. connection="OpenDS"
association Yes/No A defined Association. An Association MUST either be defined at the Context level or within each Operation. If an Association is defined in both locations, the Operation level Association will be used. association="JNDI"

Properties

Properties at this level will be merged with all of the Properties from the Context level. If a Property at this level has the same name as an existing Property, the Operation level (this) Property will replace it. Most of the Properties at this level are optional and may be specific to / required by the class that implements the Operation. Some commonly used Properties are listed below:

Name Required Description Example
classname No The fully qualified name of a class that implements the OperationsIF. org.openptk.provision.spi.operations.SpmlSunOperations
key No The name of the Attribute that is designated as the unique identifier. uniqueid
sort Yes/No A comma separated list of attribute names to define how the results of a search should be sorted. This really only applies to an Operation that has an id of search. lastname,firstname

Parent Element

Operations

Child Element(s)

  • Query (optional: only one)

Top


Contexts.Context.Operations.Operation.Query

The Query Element is used to define scoping of the Operation. A Query defined at this level, the Operation, will replace any existing Query that was defined at the Context level. A Query is optional, some Operation implementations may not need/use it.

Syntax

<!-- simple query -->
<Query type="EQ" name="MemberObjectGroups" value="All People"/>
<!-- complex query -->
<Query type="AND">
  <Query type="EQ" name="MemberObjectGroups" serviceName="MemberObjectGroups" value="All People"/>
  <Query type="EQ" name="objectclass" value="user"/>
</Query>  

Arguments

Name Required Description Example
type Yes The queries Type. Refer to the Java Docs for available Types. For a "Simple Query", the type will be a typical evaluation key word (such as "EQ"). For a "Complex Query", the type will use either "AND" or "OR" for keywords. type="EQ"
name Yes The name of the value that's used for evaluation name="objectClass"
value Yes The value that will be used for evaluation value="inetOrgPerson"

Properties

None

Parent Element

Context

Child Element(s)

  • (none)

Top


Definitions

This section defines the available Definitions

Syntax

<Definitions>
   <Definition id="...">
      ...
   </Definition>
   ...
</Definitions>

Arguments

None

Properties

None

Parent Element

<OpenPTK>

Child Element(s)

Top


Definitions.Definition

A Definition is an abstract object. It can be used to model (represent) many actual objects (Person, Role, Group, Computer, etc.)

Syntax

<Definition id="Person">
   <Properties>
      <Property name="definition.classname"   value="org.openptk.provision.api.Person"/>
      <Property name="definition.description" value="A generic employee,customer,consultant"/>
      <Property name="definition.password"    value="password"/>
      <Property name="definition.role"        value="Roles"/>
   </Properties>
   <Attributes>
      <Attribute id="...">
      ...
   </Attributes>
</Definition>

Arguments

Name Required Description Example
id Yes A unique identifier for the Definition id="Person"

Properties

Name Required Description Example
classname Yes The fully qualified name of a Class that implements the Subject interface Person

Parent

Definitions

Child Element(s)

Top


Definitions.Definition.Attributes

This section defines the available Attributes for a Definition

Syntax

<Attributes>
  <Attribute ...>
    ...
  </Attribute>
  ...
</Attributes>

Arguments

None

Properties

None

Parent

Definition

Child Element(s)

Top


Definitions.Definition.Attributes.Attribute

An Attribute is related to a Definition.

Syntax

<Attribute id="fullname" required="true">
   <Functions>
      <Function id="OutConcat">
      </Function>
      ...
   </Functions>
</Attribute>

Arguments

Name Required Description Example
id Yes The unique identifier for the Attribute id="firstname"
required No Flags the Attribute as being required. Valid settings are true or false. The default value is false. If the setting is true, then one of two things could happen. If there is a Function then it will be used to automatically generate a value for the Attribute. If there is not a Function then an error is returned to the Consumer Tier application. true
virtual No Used to indicate that the Attribute only exists in the OpenPTK Framework. There is no "real" attribute in the Service/Operation back-end user repository. The default value is false virtual="true"
type No Defines the data type for the Attribute. Valid settings are: String,Integer,Boolean,Object. If not set, the default value is String String
encrypted No Indicates that the data within the Attribute is encrypted. Valid settings are true and false. The default setting is false. Note: This flag is currently not being used. encrypted="true"
multivalued No Determines if an Attribute supports multi-values. The default value is false false
access No Defines what parts of the Framework should have "access" to the Attribute. Valid settings are public and private. The default setting is public. When set to public the Attribute is available to the internal Framework and to the Consumer Tier applications. When set to private the Attribute is only available to the internal Framework. private Attributes are typically used for Functions where they are used only for internal operations but should not be made available to the Consumer Tier applications (such as a users password). Note: This flag is currently not being used. access="private"

Properties

None

Parent Element

Attributes

Child Element(s)

Top


Definitions.Definition.Attributes.Attribute.Functions

A collection of Functions related to an Attribute.

Syntax

</Functions>
   <Function id="...">
      ...
   </Function>
   ...
<Functions>

Arguments

None

Properties

None

Parent

Attribute

Child Element(s)

Top


Definitions.Definition.Attributes.Attribute.Functions.Function

A Function is used to automatically derive and/or validate the Attribute. There can be multiple Functions. Each Functions will be processed in the order in which they are defined in the config file. The Function will be activated under one or both of these two conditions:

  1. The Consumer Tier applications adds the Attribute to the Input object.
  2. The Attribute has the argument required set to true.

Syntax

<Function id="InConcat" useexisting="true" classname="org.openptk.provision.definition.functions.ConcatStrings">
   <Arguments>
      <Argument name="arg1" type="attribute" value="firstname"/>
      <Argument name="arg2" type="literal"   value=" "/>
      <Argument name="arg3" type="attribute" value="lastname"/>
   </Arguments>
   <Operations>
      <Operation type="create"/>
      <Operation type="update"/>
   </Operations>
</Function>

Arguments

Name Required Description Example
id Yes I unique identifier for a given Function. id="emailaddress"
classname Yes A fully qualified Java classname that implements the Function Interface classname="org.openptk.provision.transform.ConcatStrings"
useexisting No This is a flag to the Framework. The default setting is false. Valid settings are true and false. If the setting is true then the Function will look to see if the Attribute already has a value. If it has a value then the Function will NOT be used and the provided "existing" value will be used. useexisting="true"

Properties

None

Parent Element

Attribute

Child Elements

Top


Definitions.Definition.Attributes.Attribute.Functions.Function.Operations

Operations contain one or more Operation Elements that define when to apply a Function to an Attribute.

Syntax

<Operations>
  <Operation type="create"/>
  <Operation type="update"/>
  ...
</Operations>

Arguments

None

Properties

None

Parent Element

Function

Child Element(s)

Top


Definitions.Definition.Attributes.Attribute.Functions.Function.Operations.Operation

Valid Operation types include:

  • create
  • read
  • update
  • delete
  • search
  • pwdchange
  • pwdreset

Syntax

<Operation type="..."/>

Arguments

Name Required Description Example
type Yes The name of the operation. There is no default value. type="read"

Properties

None

Parent Element

Function

Child Element(s)

None

Top


Definitions.Definition.Attributes.Attribute.Functions.Function.Arguments

Syntax

<Arguments>
   <Argument .../>
   ...
</Arguments>

Arguments

None

Properties

None

Parent Element

Function

Child Element(s)

Top


Definitions.Definition.Attributes.Attribute.Functions.Function.Arguments.Argument

Arguments are used by the Function implementation. There are two types of Arguments:

arg description
attribute The value is a name of an Attribute and it's value is assigned to the name of the Argument
literal The value is treated as a constant string and is assigned to the name of the Argument

Syntax

<Arguments>
  <Argument name="first"      type="attribute" value="firstname"/>
  <Argument name="dot"        type="literal" value="."/>
  <Argument name="last"       type="attribute" value="lastname"/>
  <Argument name="at"         type="literal" value="@"/>
  <Argument name="domainname" type="literal" value="openptk.org"/>
 </Arguments>

Arguments

Name Required Description Example
name Yes A unique name for the Argument name="first"
type Yes The argument type. The value must be either literal or attribute type="attribute"
value Yes The value of the Argument. value="firstname"

Parent Element

Arguments

Child Element(s)

None

Top


AttrGroups

Contains one or more AttrGroup Elements

Syntax

<AttrGroups>
   <AttrGroup ...>
      ...
   </AttrGroup>
   ...
</AttrGroups>

Arguments

None

Properties

None

Parent Element

OpenPTK

Child Element(s)

Top


AttrGroups.AttrGroup

An AttrGroup defines a collection of Attributes, which are used by a given Operations

Syntax

<AttrGroup id="...">
   <Attributes>
      ...
   </Attributes>
</AttrGroup>

Arguments

Name Required Description Example
id Yes I unique identifier for a given AttrGroup. id="person-read"

Properties

None

Parent Element

AttrGroups

Child Element(s)

Top


AttrGroups.AttrGroup.Attributes

A collection of one or more Attribute Elements

Syntax

<Attributes>
   <Attribute id="firstname"/>
   <Attribute id="lastname"/>
   <Attribute id="email"/>
   <Attribute .../>
   ...
</Attributes>

Arguments

None

Properties

None

Parent Element

AttrGroup

Child Element(s)

Attribute

Top


AttrGroups.AttrGroup.Attributes.Attribute

An Element that matches a valid Attribute

Syntax

<Attribute id="..."/>

Arguments

Name Required Description Example
id Yes The name of a valid Attribute. id="lastname"

Properties

None

Parent Element

Attributes

Child Element(s)

None

Top


Associations

Associations map OpenPTK Framework Attribute names to Service Attribute names. Framework Attributes NOT listed in a given Association will be treated as "pass through", their Framework Attribute name will be used for their Service Attribute name.

Syntax

<Associations>
   <Association id="...">
      ...
   </Association>
   ...
</Associations>

Arguments

None

Properties

None

Parent Element

OpenPTK

Child Element(s)

Top


Associations.Association

An Association, maps Framework names to Service specific names

Syntax

<Association id="...">
   <Attributes>
      ...
   </Attributes>
</Association>

Arguments

Name Required Description Example
id Yes A unique name used to reference the Association. This id is used as part of defining a Context id="JNDI"

Properties

None

Parent Element

Associations

Child Element(s)

Top


Associations.Association.Attributes

The collection of Attribute Elements defined within the Association

Syntax

<Attributes>
   <Attribute .../>
   <Attribute ...>
   </Attribute>
   ...
</Attributes>

Arguments

None

Parent Element

Association

Child Element(s)

Top


Associations.Association.Attributes.Attribute

A valid Attribute. If the servicename is not set, the Framework name, id, will be used as the Service name.

Syntax

<Attribute id="..." servicename="...">
   <Functions>
      ...
   </Functions>
</Attribute>

Arguments

Name Required Description Example
id Yes The unique identifier for the Attribute id="firstname"
servicename No The Service name of the Attribute. servicename="gn"
required No Flags the Attribute as being required. Valid settings are true or false. The default value is false. If the setting is true, then one of two things could happen. If there is a Function then it will be used to automatically generate a value for the Attribute. If there is not a Function then an error is returned to the Consumer Tier application. true

Properties

None

Parent Element

Attributes

Child Element(s)

Functions

Top


Associations.Association.Attributes.Attribute.Functions

A collection of Functions related to an Attribute.

Syntax

</Functions>
   <Function id="...">
      ...
   </Function>
   ...
<Functions>

Arguments

None

Properties

None

Parent

Attribute

Child Element(s)

Top


Associations.Association.Attributes.Attribute.Functions.Function

A Function is used to automatically derive and/or validate the Attribute. There can be multiple Functions. Each Functions will be processed in the order in which they are defined in the config file. The Function will be activated under one or both of these two conditions:

  1. The Consumer Tier applications adds the Attribute to the Input object.
  2. The Attribute has the argument required set to true.

Syntax

<Function id="InConcat" useexisting="true" classname="org.openptk.provision.definition.functions.ConcatStrings">
   <Arguments>
      <Argument name="arg1" type="attribute" value="firstname"/>
      <Argument name="arg2" type="literal"   value=" "/>
      <Argument name="arg3" type="attribute" value="lastname"/>
   </Arguments>
   <Operations>
      <Operation type="create"/>
      <Operation type="update"/>
   </Operations>
</Function>

Arguments

Name Required Description Example
id Yes I unique identifier for a given Function. id="emailaddress"
classname Yes A fully qualified Java classname that implements the Function Interface classname="org.openptk.provision.transform.ConcatStrings"
useexisting No This is a flag to the Framework. The default setting is false. Valid settings are true and false. If the setting is true then the Function will look to see if the Attribute already has a value. If it has a value then the Function will NOT be used and the provided "existing" value will be used. useexisting="true"

Properties

None

Parent Element

Attribute

Child Elements

Top


Associations.Association.Attributes.Attribute.Functions.Function.Operations

Operations contain one or more Operation Elements that define when to apply a Function to an Attribute.

Syntax

<Operations>
  <Operation type="create"/>
  <Operation type="update"/>
  ...
</Operations>

Arguments

None

Properties

None

Parent Element

Function

Child Element(s)

Top


Associations.Association.Attributes.Attribute.Functions.Function.Operations.Operation

Valid Operation types include:

  • create
  • read
  • update
  • delete
  • search
  • pwdchange
  • pwdreset

Syntax

<Operation type="..."/>

Arguments

Name Required Description Example
type Yes The name of the operation. There is no default value. type="read"

Properties

None

Parent Element

Function

Child Element(s)

None

Top


Associations.Association.Attributes.Attribute.Functions.Function.Arguments

Syntax

<Arguments>
   <Argument .../>
   ...
</Arguments>

Arguments

None

Properties

None

Parent Element

Function

Child Element(s)

Top


Associations.Association.Attributes.Attribute.Functions.Function.Arguments.Argument

Arguments are used by the Function implementation. There are two types of Arguments:

arg description
attribute The value is a name of an Attribute and it's value is assigned to the name of the Argument
literal The value is treated as a constant string and is assigned to the name of the Argument

Syntax

<Arguments>
  <Argument name="first"      type="attribute" value="firstname"/>
  <Argument name="dot"        type="literal" value="."/>
  <Argument name="last"       type="attribute" value="lastname"/>
  <Argument name="at"         type="literal" value="@"/>
  <Argument name="domainname" type="literal" value="openptk.org"/>
 </Arguments>

Arguments

Name Required Description Example
name Yes A unique name for the Argument name="first"
type Yes The argument type. The value must be either literal or attribute type="attribute"
value Yes The value of the Argument. value="firstname"

Parent Element

Arguments

Child Element(s)

None

Top


Connections

A collection of Connection Elements. All of the Connections will use the same Service Manager class that implements the ServiceIF Interface.

Syntax

<Connections>
   <Properties>
      <Property name="service.classname" value="org.openptk.provision.spi.BasicService"/>
   </Properties>
   <Connection ...>
      ...
   </Connection .../>
   ...
</Connections>

Arguments

None

Properties

Name Required Description Example
service.classname Yes The fully qualified name of a Class that implements the Service interface. This Service Manager will be used for all Connections. org.openptk.provision.spi.BasicService

Parent Element

OpenPTK

Child Element(s)

Top


Connections.Connection

A Connection defines information that is specific back-end to a Subject repository. The Properties defined in a given Connection are specific to that Connection. They are passed on to the Service/Operation(s) when they are created.

The actual classname that implements the Service's Operations is set in the Context. It is defined as a Property at the Context level or at the Operation level (within the Context).

Syntax

<Connection id="OpenDS">
   <Properties>
      <Property name="connection.description"          value="OpenDS 1.0"/>
      <Property name="..."                  value="..."/>
      ...
   </Properties>
</Connection>

Arguments

Name Required Description Example
id Yes A unique id for the Service. This is as part of defining a Context id="OpenDS"

Properties

Name Required Description Example
connection.description No Describes the Connection, passed to the class when created OpenDS 1.0.0
url No A proper URL for how to connect to the Service/Operations ldap://localhost:1389
user.name No The name of the Proxy user that will be used to authenticate cn=Directory Manager
user.password No The password for the Proxy user Hello World
Certain Services may require other Properties.

Parent Element

Connections

Child Element(s)

None

Top


Loggers

A collection of Logger Elements

Syntax

<Loggers>
   <Logger ..../>
   ...
</Loggers>

Arguments

None

Properties

None

Parent Element

OpenPTK

Child Element(s)

Top


Loggers.Logger

A Logger is used to capture INFO, WARNING, ERROR, and DEBUG messages.

Syntax

<Loggers>
  <Logger id="UnixLogFile" classname="org.openptk.provision.logging.AtomicLogger">
     <Properties>
        <Property name="file" value="/var/tmp/openptk.log"/>                   
     </Properties>  </Logger>
  ...
</Loggers>

Arguments

Name Required Description Example
id Yes A unique identifier for the Logger id="MyLogger"
classname Yes The fully qualified classname that implements the Loggin interface. classname="org.openptk.provision.logging.AtomicLogger"

Properties

Name Required Description Example
file Yes path to log file. /var/tmp/openptk.log
Certain Loggers may require other Properties.

Parent Element

Loggers

Child Element(s)

None

Top


Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact