Draft Standard Version 1.0 (23-May-2000)
Draft Version 24-Mar-2000
Draft Version 07-Feb-2000
Draft Version 17-Jan-2000
Draft Version 23-Dec-1999
Draft Version 15-Nov-1999
Draft Version 10-Nov-1999
Draft Version 04-Nov-1999
Draft Version 28-Oct-1999
Draft Standard Version 1.0 (23-May-2000)
Description
Draft Standard Version 1.0
of the Jini Print Service API
represents the first version
released from the Jini Printing Working Group
to the entire Jini Community.
It is denoted a "draft standard"
so developers can create Jini Print Service implementations and clients
based on a common standard.
It is denoted a "draft standard"
to recognize that implementation experience
may necessitate changing the API
before finalizing it as a full standard.
This draft incorporates revisions
to resolve issues raised with the draft version of 24-Mar-2000
as agreed at the Jini Printing Working Group Meeting
of 11-Apr-2000 and subsequently.
See the Jini Print Service API Issues List
for minutes of the meeting.
This draft includes
all the capabilities of the first product release subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
Attributes
-
Package net.jini.print.util,
containing interface CategoricalSet
and implementations thereof,
was eliminated.
-
Interface Attribute
was changed to a standalone interface
rather than extending CategoricalSet.Value.
Its
getCategory() method
was changed to return type Class (the type for an attribute category)
instead of type Object.
-
Tagging subinterfaces of interface
Attribute
were defined to denote how various printing attributes are used --
interfaces DocAttribute,
PrintRequestAttribute,
PrintJobAttribute,
PrintServiceAttribute, and
SupportedValuesAttribute.
Each attribute class was tagged with one or more
of the above tagging subinterfaces
instead of interface Attribute.
-
Interface AttributeSet
was changed to extend interface java.util.Map rather than CategoricalSet.
-
Subinterfaces of interface AttributeSet
were defined that are restricted to contain
just one kind of attribute --
classes DocAttributeSet,
PrintRequestAttributeSet,
PrintJobAttributeSet, and
PrintServiceAttributeSet.
Throughout the API,
methods that had taken generic
AttributeSet arguments
or returned generic
AttributeSet objects
were changed to take or return the proper kind of restricted attribute set.
-
Implementations of interface
AttributeSet
and its subinterfaces were changed to use class java.util.HashMap
rather than CategoricalSet implementations.
-
Unmodifiable and synchronized views of an attribute set
are now provided in class
AttributeSetViews
rather than class Collections,
the new class name being more descriptive.
-
The Media attribute
and MediaEntry service registration entry
were changed to conform to recent changes
in the IPP Production Printing Extensions proposal.
The following abstract syntax classes were eliminated:
WeightSyntax.
The following media characteristics were eliminated:
MediaWeight.
The following media characteristics were added:
MediaRecycled,
MediaStock,
MediaWeightEnglish, and
MediaWeightMetric.
Class MediaName was renamed
MediaDescription.
Some additional enumeration values were added to classes
MediaColor,
MediaKind, and
MediaPrePrinted.
-
The following abstract syntax classes were added:
URLSyntax.
The following attributes were added:
ColorSupported,
PagesPerMinute,
PagesPerMinuteColor,
PDLOverrideSupported,
PrinterInfo,
PrinterLocation,
PrinterMakeAndModel,
PrinterMoreInfo,
PrinterMoreInfoManufacturer,
PrinterName,
ReferenceUriScheme,
SheetCollate.
-
Many of the individual abstract syntax classes
and concrete attribute classes
were changed to address issues
identified at the 11-Apr-2000 Jini Printing Working Group meeting.
See the Jini Print Service API Issues List
for further information.
Docs
-
Interface Doc
was changed to clarify that the
getReaderForText() and
getStreamForBytes() methods
are required to return a valid reader or input stream object
if the doc meets the stated criteria.
-
The methods in interface Doc
were changed to throw an exception in two circumstances:
(a) if the doc is leased and the lease object has not been obtained yet,
(b) if the print data source
cannot provide more than one piece of print data at a time
and the printer has not yet finished obtaining
a previous doc's print data.
-
The documentation in interfaces
Doc and
LeasedDoc
was expanded to clarify
how the doc leasing scheme works.
The description of print job processing in interface
PrintJob
was revised to accord with the doc leasing scheme.
-
The restriction on the pattern which a Print Service
uses to access the individual docs in a
MultiDoc
was eliminated.
-
The documentation in class
DocFlavor
describing typical doc flavors was rewritten.
Classes nested inside class
DocFlavor
were added to declare
predefined static constant doc flavor objects
for the example doc flavors.
-
In class
DocFlavor,
support for plain text input stream print data
and renderable image print data
was made mandatory.
Print Jobs
-
The
PrintJob.getAttributes()
method's documentation was rewritten
to clarify which attributes appear
in a Print Job's attribute set.
-
The description of print job processing
in interface PrintJob
was expanded to clarify several points,
including the treatment of multidoc print jobs
in which different docs specify different attribute values
for the same attribute category.
-
Interfaces
PrintRequest,
DocPrintRequest, and
MultiDocPrintRequest
were changed so the only methods
that throw a RemoteException
are the methods for adding an event listener
and submitting the Print Request.
These are the only methods
that might make a remote method call
to the Print Service.
The other methods are intended to be implemented locally
and therefore no longer throw a RemoteException.
Print Services
-
The
PrintService.getAttributes()
method's documentation was rewritten
to clarify which attributes appear
in a Print Service's attribute set.
-
The capability methods in interface
PrintService
were revised.
Class Settings
was defined to hold the doc flavor and attributes
for a supposed print job.
To simplify the method signatures,
and for consistency,
all the capability methods were changed
to take a Settings argument
instead of separate doc flavor and/or attribute set arguments.
The following capability methods were added:
PrintService.getDefaultAttributeValues(),
PrintService.getUnsupportedSettings().
-
A capability method was added to interface
MultiDocPrintService:
getUnsupportedSettings().
Analogous to class Settings,
class MultiDocSettings
was defined to hold the doc flavors,
document-level attributes, and job-level attributes
for a supposed multidoc print job.
-
Capability methods were added to interface
LocalizedPrintService
to determine the supported locales and the default locale.
The documentation was expanded
to clarify how the printer chooses a locale to use
if the printer does not support the exact locale the client specifies.
Events
-
The printing event class hierarchy was changed
to include additional events.
Abstract base classes for printing events
were added in a new package.
See package net.jini.print.event
for details.
-
The event registration methods in interfaces
PrintService,
PrintRequest, and
PrintJob
were changed to align with the new printing event scheme.
Lookup
Exceptions
Doc Implementations
Unified Printing API
Documentation
-
The Tutorial was revised
to conform to the above changes.
Draft Version 24-Mar-2000
Description
This draft incorporates revisions
to resolve issues raised with the draft version of 07-Feb-2000.
This is also the initial draft
of all the capabilities of the first product release subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
Attributes
-
The package summary for
net.jini.print.attribute
was rewritten and expanded
to explain the rationale behind the design
of the attribute classes.
-
Attribute sets,
used for document attributes, job templates,
print job status, and printer status,
were changed to use a new general-purpose data structure,
the categorical set.
The categorical set data structure,
defined by interface CategoricalSet
in a new package net.jini.print.util,
is designed to be part of the standard Java collections framework
in the core JDK package java.util.
Interface AttributeSet
was changed to derive from
interface CategoricalSet,
and the printing attribute base interface
Attribute
was changed to integrate with the categorical set data structure.
-
The tagging interfaces
AllOrNoneAttribute,
RegisteredAttribute,
and SpecialMatchAttribute
were eliminated.
These existed in the previous API draft
to support service registration in the Jini Lookup Service (JLUS).
This leaves the attribute classes in packages
net.jini.print.attribute and
net.jini.print.attribute.standard
free of Jini-specific code,
hence making them more suitable for use in other printing applications
such as core JDK printing (package java.awt.print).
-
The abstract syntax classes were renamed from
"...Attribute"
to "...Syntax",
and they no longer implement interface Attribute,
to emphasize that these classes are not themselves printing attributes,
they are just information containers
which in fact could possibly be used in applications besides printing.
Each printing attribute class
now implements interface Attribute
(to mark it as a printing attribute)
and extends the appropriate abstract syntax class
(to obtain its implementation).
-
Class ResolutionSyntax
(formerly ResolutionAttribute)
was changed to store its values internally
in standard units.
Operations are provided for converting from the internal units
to external units of dots per inch (dpi)
or dots per centimeter (dpcm).
-
Classes DateTimeSyntax,
Size2DSyntax,
and WeightSyntax
were added.
-
The doc description attributes and job template attributes in package
net.jini.print.attribute.standard
were extensively revised from the previous API draft
to bring them in line with the above changes.
Especially noteworthy revisions:
The former Finishings attribute
was split into two independent attributes,
FinishingsBinding and
FinishingsCover.
Attribute JobHoldUntil
was changed to let the client specify a job hold-until time
as an exact date and time.
The Media attribute
became a collection of several independent attributes
denoting different media characteristics.
-
Job description attributes and printer description attributes
were added to package
net.jini.print.attribute.standard,
which now comprises 63 attribute classes.
Docs
-
Interface Doc was changed
to address issues with docs in a distributed printing system.
It is now a non-remote, Serializable interface.
Its methods are now defined to behave idempotently;
the
readPrintData() method's name
was changed back to
getPrintData().
The documentation was changed
to clarify what print data representation object is supposed to be returned
if the getPrintData() method
is called more than once.
The getAttributes() method
was changed to return an
AttributeSet object
instead of an array of attributes.
-
Interface LeasedDoc,
an extension of interface Doc,
was added to optionally convey a lease on the print data
to the Print Job.
-
Interface DocIterator was eliminated
and interface MultiDoc was resurrected
to address issues with multiple doc print jobs
in a distributed printing system.
Interface MultiDoc
now has idempotent
getDoc()
and next() methods
providing a "linked list view" of a sequence of docs.
The pattern in which a print service proxy
is required to use a MultiDoc object
was documented.
-
Class RemoteInputStream
was moved to package net.jini.print.data.
It was changed to be an abstract "tagging base class"
extending class java.io.InputStream
but with no implementation.
Its purpose is to require certain behavior
after a RemoteException occurs while reading a remote input stream
that allows the consumer to recover from transient network failures;
this behavior could be achieved in various ways
in different concrete subclass implementations.
Class RemoteReader,
a similar abstract "tagging base class"
extending class java.io.Reader, was added.
-
The utility methods
getReaderForText() and
getStreamForBytes()
were moved from class DocFlavor
to interface Doc.
Doc Implementations
-
Package net.jini.print.data.standard was renamed
org.jpwg.jini.print.data
to emphasize that the implementations in that package
are not part of the official Jini Print Service API,
but are only examples
that clients are free to use or not use
as they see fit.
-
Package
org.jpwg.jini.print.data
(formerly package net.jini.print.data.standard)
was reorganized.
It now contains sample implementations of the
Doc interface
corresponding to the common print data representation classes
for client formatted print data:
classes StringDoc,
InputStreamDoc,
ReaderDoc,
and URLDoc.
It also contains variants of the input stream and reader docs
with leases:
classes LeasedInputStreamDoc
and LeasedReaderDoc.
Finally, it contains two sample implementations
of the MultiDoc interface:
class ArrayMultiDoc
layered on top of an array of docs,
and class IteratorMultiDoc
layered on top of an Iterator over a collection of docs.
-
Class RmiInputStream
was rewritten to support recoverable reading of remote byte streams
as specified by class RemoteInputStream.
-
Class RmiReader
was added to support recoverable reading of remote character streams
as specified by class RemoteReader.
Print Jobs
-
Package net.jini.print.job
was reorganized.
It now declares interfaces for two job-related objects:
a Print Request
representing a nascent print job being set up
before being submitted to be printed,
and a Print Job
representing an actual print job
that has been submitted to be printed.
-
Interfaces
PrintRequest,
DocPrintRequest, and
MultiDocPrintRequest
were added to define the class hierarchy for Print Requests.
-
Interface PrintJob was rewritten
and interface CancelablePrintJob was added
to define the class hierarchy for Print Jobs.
Interfaces DocPrintJob and MultiDocPrintJob were eliminated
(their roles were taken over by DocPrintRequest and MultiDocPrintRequest).
-
Classes PrintJobEvent
and PrintDataEvent
(formerly called PrintJobDataEvent)
were rewritten to support
the new Print Request/Print Job scheme.
-
The description of print job processing
(in the documentation for interface PrintJob)
was revised and expanded to support
the new Print Request/Print Job scheme.
Print Services
-
Interface PrintService
was changed to create doc Print Request objects
instead of Print Job objects.
Methods were added to examine the Print Service's
set of printer description attributes
and to register an event listener for print service events
notifying of changes in the printer description attributes.
The methods for querying a Print Service's capabilities
were augmented to test for supported combinations
of doc flavors and printing attributes.
-
Interface MultiDocPrintService
was changed to create multidoc Print Request objects
instead of Print Job objects.
-
Interface LocalizedPrintService
and class PrintServiceEvent
were added.
Lookup
-
The names of entry classes SupportedAttributeEntry and SupportedFlavorEntry
were shortened to just
AttributeEntry and
FlavorEntry.
-
Entry class AttributeEntry
was rewritten to include an attribute runtime class field
as well as the attribute category and value fields.
The attribute category and runtime class fields
were changed from a Class to a String
to save space and time in the JLUS.
-
Entry classes MediaEntry and
PrinterDescriptionEntry
were added.
-
All the Entry classes now implement interface ServiceControlled.
-
Class PrintServiceLookup was eliminated.
Code to look up Jini Print Service instances in the JLUS
does not properly belong in the core Jini Print Service API.
The intention is to provide a class
in a non-core package (such as org.jpwg.jini.print.lookup)
that works with the Jini Service Discovery Manager
to look up Jini Print Service instances.
Exceptions
-
The exception classes and interfaces
formerly declared in package net.jini.print
were moved to package net.jini.print.exception,
except for the following:
PrintServiceException
is in package net.jini.print.service;
PrintJobException
is in package net.jini.print.job.
-
A new class PrintRequestException
was added to package net.jini.print.job.
Documentation
-
The Overview, Tutorial, and package summaries
were revised and expanded
to conform to the above changes.
Draft Version 07-Feb-2000
Description
This draft incorporates revisions
agreed on at the Jini Printing Working Group telecon of 24-Jan-2000,
at which the API draft version of 17-Jan-2000 was reviewed.
See the Jini Print Service API Issues List
for minutes of the telecon.
This draft also takes a first step
towards the capabilities of the first product release subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
The print exception scheme was changed.
It now includes just base class PrintException
and subclasses PrintJobException and PrintServiceException.
It also includes several mixin interfaces
which a print exception subclass can optionally implement
to report additional data about the error.
The Print Job and Print Service methods
now are declared to throw just PrintJobException
and PrintServiceException, respectively.
-
Two utility operations,
getReaderForText() and
getStreamForBytes(),
were added to class DocFlavor
to help a Doc's client extract client formatted print data.
-
The leasing scheme was changed.
The lease on the Print Service object was eliminated.
The Print Job object's lease
was pulled out of the Print Job itself.
A Print Job object and its associated lease object
are now returned together,
wrapped in a PrintJobAndLease object.
The lease on the Doc object was eliminated,
as were the lease and landlord implementation classes
in package net.jini.print.data.standard.
-
Print Job events were added.
Interface PrintJob
now includes a method to add a remote event listener
to a Print Job.
The only Print Job event defined so far
is class PrintJobDataEvent
which a Print Job reports
in response to a
print() method call
to indicate whether the Print Job successfully obtained the print data.
The documentation for class DocPrintJob
was updated to specify when Print Job events are reported.
-
Interface MultiDocPrintJob
was changed to obtain doc objects
from a "doc iterator"
(interface DocIterator)
instead of a regular iterator
(interface java.util.Iterator).
A regular iterator is unsuitable
because interface java.util.Iterator
is not a remote interface.
A doc iterator implementation layered on top of a regular iterator
was added
(class RemoteDocIterator).
-
The attribute tagging interface NonRegisteredAttribute was eliminated,
and RegisteredAttribute
took its place.
Now, every attribute class included in the service registration
in the Jini Lookup Service (JLUS)
is explicitly tagged as either a
RegisteredAttribute,
AllOrNoneAttribute, or
SpecialMatchAttribute.
Attribute classes
not included in the service registration
are not tagged.
-
Attribute classes for job template attributes were added.
However, job templates, job description attributes,
and printer description attributes
are not in the API yet.
-
The Jini Print Service lookup scheme was changed.
Class ServiceIDEntry was eliminated.
The Print Service Lookup Utility
(class PrintServiceLookup)
now supports searches based on all the job template attributes,
and its methods are now directly analogous to the Jini Lookup Service's
lookup() methods.
Draft Version 17-Jan-2000
Description
This draft incorporates resolutions to issues
about the 23-Dec-1999 draft version
raised in the Jini Printing Working Group's email DL.
See the Jini Print Service API Issues List
for further information.
This draft still includes just the capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
Interface net.jini.print.data.MultiDoc was eliminated.
Instead, a multidoc print job gets its print data
from an array or Iterator of doc objects.
This lets the client encapsulate a group of docs to be printed
using any collection class that supports an Iterator.
-
The relationship between doc objects and Print Job objects was changed.
Previously, a doc had been considered part of a Print Job.
Now, a doc is considered to be printed by a Print Job,
but not part of it.
Specific consequences of this change are:
-
The Print Service's print job creation methods
no longer take a doc or multidoc as an argument;
they simply create a Print Job
without reference to a specific doc or multidoc.
Instead, the doc or multidoc is supplied
as a parameter of the Print Job's
print() method.
-
The Print Service's print job creation methods
no longer verify whether the Jini Print Service instance
can support printing the given doc or multidoc.
Likewise, the Print Service's
isDocSupported()
and isMultiDocSupported() methods
were eliminated.
Instead, the Print Job's print() method
does this verification.
-
The Print Job's
getDoc() and getMultiDoc() methods
were eliminated.
This change was done in anticipation
of a future version of the API
in which a client will be able to query a Print Service
for its queued Print Jobs.
These Print Jobs will be able to report their status
in the form of attributes
but will not in general be able to report
the doc object from which their print data came.
Thus, considering a doc to be "part of" a Print Job
would be problematic.
-
Interface UniDocPrintJob was renamed DocPrintJob
to eliminate confusion --
that interface is used to print a doc, not a "unidoc."
-
The Print Job's
print() method
was split into three overloaded methods
and moved into subinterfaces:
DocPrintJob.print(Doc),
MultiDocPrintJob.print(Doc[]), and
MultiDocPrintJob.print(Iterator).
Analogous changes were made
to the print service lookup utility
(class net.jini.print.lookup.PrintServiceLookup).
-
Package net.jini.print.data.impl,
containing implementations of the Doc interface,
was renamed net.jini.print.data.standard.
-
Leases were added to the Print Service, Print Job, and doc objects.
For a Jini Print Service,
the Print Service object's lease
and the Print Job object's lease
let the Jini Print Service
detect and recover from client crashes.
For a client,
the doc object's lease
lets the client detect and recover
from Jini Print Service crashes.
-
The doc implementation class hierarchy
in package net.jini.print.data.standard
was reorganized to add lease implementations.
To manage the doc leases for a client,
a landlord implementation was added also
(class net.jini.print.data.standard.DocLandlord).
-
Interface net.jini.print.data.Doc was changed to require
the doc object implementation to function correctly
whether its methods are called from the same JVM in which it was created
or whether it is sent to a remote JVM and its methods are called from there.
This affords greater flexibility
to set up a distributed printing system.
-
A remote input stream implementation was added
(class net.jini.print.data.standard.RemoteInputStream).
This lets a doc object
supply its print data via an input stream
to a Jini Print Service executing either locally or remotely.
-
The fields of class net.jini.print.data.DocFlavor
were changed from protected scope to private scope.
Class net.jini.print.data.MimeType
was changed from public scope to package scope.
These changes hide implementation details from the client.
-
In class net.jini.print.data.DocFlavor,
the default character set for a
"text/plain" MIME type
was changed from US-ASCII to UTF-8.
-
The implementation of class
net.jini.print.attribute.EnumAttribute
was simplified.
-
A locale field was added to class
net.jini.print.attribute.TextAttribute
to let a client optionally specify the text string's natural language.
-
Documentation throughout the API
as well as the Tutorial
were revised in accordance with the above changes.
Draft Version 23-Dec-1999
Description
This draft incorporates revisions
agreed on at the Jini Printing Working Group telecon of 06-Dec-1999,
at which the API draft version of 15-Nov-1999 was reviewed.
See the Jini Print Service API Issues List
for minutes of the telecon.
This draft still includes just the capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
A new subpackage was added, package
net.jini.print.data.
Print data formats are now indicated by class DocFlavor
instead of the DocumentFormat attribute (which was eliminated).
A single piece of print data is encapsulated
in an object that implements interface Doc.
Multiple pieces of print data are encapsulated
in an object that implements interface MultiDoc.
-
Another new subpackage was added, package net.jini.print.data.impl,
containing example implementations of interfaces
Doc and MultiDoc.
-
The PrintService interface
was rewritten and split into a couple of subinterfaces.
Interface PrintService itself
contains methods for discovering a Print Service's
supported doc flavors, printing attributes, and attribute values.
Subinterface UniDocPrintService
contains a method for creating a unidoc print job object
that will print a specified Doc object,
that is, a single piece of print data.
Subinterface MultiDocPrintService
contains a method for creating a multidoc print job object
that will print a specified MultiDoc object,
that is, multiple pieces of print data.
-
The PrintJob interface
was rewritten and split into a couple of subinterfaces.
Interface PrintJob itself
contains a
print() method
that extracts the print data
from the Doc or MultiDoc object
the client supplied when the Print Job was created.
Subinterfaces UniDocPrintJob and MultiDocPrintJob
contain methods that pertain to unidoc print jobs
and multidoc print jobs, respectively.
-
The print service lookup scheme
in package net.jini.print.lookup
was revised to let clients
search for Jini Print Service instances
that can print a specified Doc or MultiDoc object.
-
Documentation throughout the API
as well as the Tutorial
were revised in accordance with the above changes.
-
The
getKey() method
was added to interface Attribute.
Draft Version 15-Nov-1999
Description
This draft is the starting point
for reviewing the prototyping subset
of the Jini Print Service API
within the Jini Printing Working Group.
It includes all capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
Changed the print exception scheme
to afford more flexibility
to the client writing exception handlers.
There are now three tiers of exceptions:
a base exception class, PrintException;
exceptions for indicating particular error conditions;
and exceptions for indicating particular error conditions
encountered by particular methods.
See "Exception Classes"
in package net.jini.print
for further information.
-
Changed the semantics of the Print Job methods
to follow a "create -- write -- close" pattern
and added the ability to write multiple documents
to a print job.
This aligns the Print Job object's behavior
with the printing model defined by the Internet Printing Protocol (IPP)
in RFC 2566.
See package net.jini.print.job
for further information.
-
Changed back to interfaces
net.jini.print.job.InputStreamPrintJob
and net.jini.print.job.OutputStreamPrintJob
from interfaces net.jini.print.job.StreamPrintJob and
net.jini.print.job.StreamPrintData.
Concern was that the two-stage process
(get a StreamPrintData object from the print job,
then get the actual stream from the StreamPrintData object)
has too much potential for client programming errors;
the one-stage process
(get the stream directly from the print job)
is simpler and less error-prone.
-
Eliminated the mixin interface SpecializedLookupAttribute
and its methods
in favor of adding simpler tagging interfaces.
Right now just one is defined,
interface NonRegisteredAttribute
to indicate that a particular attribute
is not registered into the Jini Lookup Service (JLUS).
Draft Version 10-Nov-1999
Description
This is the third complete draft
of a "synthesis API" for the Jini Print Service
that includes all capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
Got rid of the Print Service Factory
and all related classes and interfaces.
Philosophy is that we will not worry for the moment
about client memory limitations,
since the code space required to support RMI (about 1/2 a megabyte)
seems much greater than the size of a Jini Print Service implementation,
and since even low-end clients these days
tend to have 2 MB or more of memory.
Eliminating the Print Service Factory
simplifies the API.
But the issue of whether a Print Service Factory is needed
will remain open
until we get some implementation experience
and see just how big Jini Print Service implementations are
compared to low-end clients' memory capacities.
-
Simplified the attribute scheme
by eliminating methods intended to support lookups
for limited-resource clients.
Attribute became a tagging interface again
instead of an abstract base class with methods.
-
Eliminated the attribute tagging interfaces
which were provided for compile-time safety
to prevent attributes from being used
in places where they shouldn't be.
Concern was that this would limit flexibility
by preventing attributes from being used in new contexts
in the future.
Instead, using an attribute improperly
will throw an exception at run time.
-
Eliminated the DocumentLocale attribute.
Although defined in IPP,
it's not clear what this attribute will be used for
in any actual printer.
-
Incorporated David Mendenhall's code of 14-Oct-1999 for
interface Attribute,
class EnumAttribute,
and class TextAttribute.
-
Added mixin interface SpecializedLookupAttribute
to support some of the special cases needed
when searching the Jini Lookup Service
for printing attributes.
Draft Version 04-Nov-1999
Description
This is the second complete draft
of a "synthesis API" for the Jini Print Service
that includes all capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
Changes Since Previous Version
-
Changed from interfaces net.jini.print.job.InputStreamPrintJob
and net.jini.print.job.OutputStreamPrintJob
to interfaces
net.jini.print.job.StreamPrintJob and
net.jini.print.job.StreamPrintData.
The stream print job object
returns a stream print data object.
The stream print data object
lets the client write print data to an output stream (the push model)
or lets the print service read print data from an input stream (the pull model).
The stream print data object
acts as an adapter between the client-side Java stream
and the underlying mechanism that transports the print data
to the (possibly remote) print service.
-
Changed the way print attributes
are registered into the Jini Lookup Service (JLUS)
in the service registration.
Before, supported print attributes and supported print attribute values
were wrapped into separate Entry objects.
Now, the Entry object
(class SupportedAttributeEntry)
contains both items of information,
a key field which is the supported print attribute class
and a value field which is the supported print attribute value.
This arrangement is anticipated to be needed
when searching the JLUS for a Jini Print Service instance
that can fulfill a given job template
(a capability to be added in the next API revision).
-
Made net.jini.print.attribute.Attribute
an abstract base class instead of an interface.
Added methods to class Attribute
to support the print service lookup scheme
(see package net.jini.print.lookup).
-
Added a Tutorial lesson
showing how a Jini Print Service instance
would set up its service registration
to go into the JLUS.
-
Moved the specific printing attribute classes
from package net.jini.print.attribute
to package net.jini.print.attribute.standard.
This clarifies the distinction
between classes and interfaces
that pertain to attributes in general
(in package net.jini.print.attribute)
and classes for specific attributes
(in package net.jini.print.attribute.standard).
Draft Version 28-Oct-1999
Description
This is the first complete draft
of a "synthesis API" for the Jini Print Service
that includes all capabilities of the prototyping subset
identified at the Jini Printing Working Group meeting
in September 1999.
See the
Jini Print Service Roadmap Prototyping Subset
for a list of these capabilities.
DRAFT STANDARD VERSION 1.0 (23-MAY-2000)