Finally, the new release is out! With the numerous fixes, API
simplifications and enhancements done, I hope that we are reaching a new
level of maturity. Some new concepts were introduced like the notion of
Restlet context which abstracts a Restlet from its environment (connectors,
logging mechanism, parameters). I'd like to especially thank for following
contributors:
 - AJ Barnes
 - Chris Winters
 - Dave Pawson
 - John D. Mitchell
 - Piyush Purang
 - Thierry Boileau
 - Tiago Silveira

Detailed changes log (copy below):
http://www.restlet.org/docs/changes

Updated road map:
http://www.restlet.org/roadmap

Updated tutorial:
http://www.restlet.org/tutorial

Direct download link:
http://www.restlet.org/downloads/restlet-1.0b18.zip

Best regards,
Jerome

-----------
CHANGES LOG
-----------
[Bugs fixed]
 - Status descriptions are now sent back to Jetty 6 for error statuses.
Reported by AJ Barnes.
 - The DirectoryHandler was listing the directories twice to do the content
negotiation, slowing down the process. 
 - The content negotiation was not properly handling the situation where no
language and media type preferences are defined. Reported by Thierry
Boileau.
 - Fixed potential NPE in DefaultClient and RedirectTestCase when no
connector found.
 - Fixed bug in NRE's factory which prevented the detection of HTTPS
connectors. Now all HTTPS connectors work fully (Simple, Jetty5 and Jetty6).
 - Fixed bug in DirectoryHandler preventing the return of a directory
listing if an index file name was set but not found. Reported by Thierry
Boileau.
 - Added option to turn off content negotiation on DirectoryHandler which
was causing some issues with online Javadocs. The content negotiation is now
   off by default. Reported by Tiago Silveira.
 - Fixed caching conflicts with content negotiation. Now ETags are properly
considered. Reported by Chris Winters.
 - Fixed potential NPE in the DateUtils comparison methods. Reported by
Chris Winters.
 - Reworked all equals() methods in the data package to accept Object as
parameter. 
 - Fixed bug in MediaType.includes() and added a JUnit test case for
MediaType comparison. Report and patch by Chris Winters.
 
[API breaking changes]
 - Removed get/setTimeout() methods from the Client interface and related
classes. Also, removed the configureSsl() method from the Server interface.
        We will now use connectors'parameters instead. Suggested by John D.
Mitchell.
 - NRE's HttpClient (based on HttpUrlConnection) now used these parameters:
"chunkLength", "followRedirects", "allowUserInteraction", "useCaches"
   "connectTimeout" and "readTimeout".
 - NRE's HttpClient no longers sets the JDK's system property
"http.keepalive" to "false". This could conflict with other classes using
HttpUrlConnection.
 - Jetty 5.1 connector now supports parameters: "minThreads", "maxThreads",
"lowResourcePersistTimeMs", "maxIdleTimeMs" for the HTTP server and
   "keystorePath", "keystorePassword", "keyPassword" for the HTTPS one.
 - Simple 3.1 connector now supports parameters: "defaultThreads",
"waitTimeMs" for the HTTP server and "keystorePath", "keystorePassword",
   "keyPassword" for the HTTPS one.
 - Moved Jetty5 to com.noelios.ext.jetty5 package so that Javadocs of both
versions can be displayed.
 - The "X-Forwarded-For" header is not used anymore by default to get all
client addresses, including intermediary proxies. However, there is now a 
   standard way to enable this feature: by setting the
"useForwardedForHeader" parameter to "true" for the HTTP server connector
used. Be aware of the
   potential security effects of using this header if you don't control all
the intermediary proxies as the header could be faked otherwise. This change
   was suggested by John D. Mitchell.
 - Removed unused org.restlet.connector.LocalClient connector.
 - Moved content of com.noelios.restlet.impl to com.noelios.restlet,
com.noelios.restlet.connector and com.noelios.restlet.data
 - Renamed Call's "outputRef" property back to "redirectRef" as we now have
Representation's "identifier" property to get the location of the call's
output.
 - Factorized all Call's client data into ClientData class (was
PreferenceData). 
 - Factorized all Call's server data into a new ServerData class.
 - Renamed Call.contextRef into Call.baseRef and Call.relativePath into
Call.relativePart. Added Call.getRelativeRef returning a real relative
reference.
 - org.restlet.Call is now a class instead of an interface. Removed
DefaultCall classes.
 - Removed "requestHeader" and "responseHeader" variables from CallModel.
Not accessible anymore at this point from an uniform Call.
 - Renamed static Reference.toUri() method into Reference.toString() for
consistency with existing Reference.toString() methods (non-static).
 - Renamed Call.setBestOutput() into Call.setOutput() and adjusted the
Javadocs to explain behavior (set best output for the given resource).
 - Removed empty and unused interfaces Gateway, OriginServer, Proxy,
UserAgent, Cache, Resolver, Tunnel, ControlData, Data. Suggested by Piyush
Purang.
 - Refactored CharacterSet, CharacterSets and DefaultCharacterSet into a
single CharacterSet class.
 - Refactored Encoding, Encodings and DefaultEncoding into a single Encoding
class. 
 - Refactored ChallengeScheme, ChallengeSchemes and DefaultChallengeScheme
into a single ChallengeScheme class. 
 - Refactored Language, Languages and DefaultLanguage into a single Language
class. 
 - Refactored MediaType, MediaTypes and DefaultMediaType into a single
MediaType class. 
 - Refactored Method, Methods and DefaultMethod into a single Method class. 
 - Refactored Protocol, Protocols and DefaultProtocol into a single Protocol
class. 
 - Refactored Status, Statuses and DefaultStatus into a single Status class.

 - Fixed the remaining inconsistent usages of ParameterList. Removed
MediaType.getParametersValue(). 
   Now getParameters() methods always instantiate a new list of none was
existing before.
 - Separated HTTP constants (header names and status codes) into a separate
HttpConstants class.
 - Added an org.restlet.component.Application class to hold a portable
Restlet Application.
 - Added org.restlet.Context and a specialized ContainerContext subclass.
This allow container to provide contextual services to Restlet, without
giving
   a direct access to the container itself or to its connectors.
 - Following the advices of API design gurus Eamonn McManus and Joshua
Bloch), I've refactored the whole API in several ways:
    - Set most of the member variables to "private" instead of "protected"
for better encapsulation and evolving capabilities
    - Removed most interfaces which and too fragile and little useful
without a default/abstract implementation. 
 - Removed RestletServer and RestletContainer, replaced by Container and
Application. A container manages a set of applications.
 - Separated the Handler concept into a Chainer (similar signature) and a
Handler (new method specific to find the target resource). Handler now
directly
   derives from Restlet. The goal is to provide a cleaner separation of
roles.
 - The Resource interface doesn't derive anymore from Restlet. The
responsability of the control and handling of incoming calls is moved to the
repurposed
   Handler class.
 - Replaced ServerMap and ClientMap by ServerList and ClientList to fit with
the new Container and Application classes. 
 - Renamed DefaultClient and DefaultServer to GenericClient and
GenericServer to better reflect the purpose of the classes and the concept
of call
   dispatcher based on the scheme instead of the connector name.  
 - Removed addition of custom headers from Call.connectorCall for
JavaMailClient and HttpClient. Will now require the usage of Converters.
 - Fully refactored the context data of Call. Added a new
org.restlet.data.ContextData class containing all data potentially varying
with the current
   Restlet handling the call. For example Call.getResourcePath() is now
Call.getContext().getRelativePath(), Call.setContextPath() is now
Call.getContext().
   setBaseRef(), etc.
 - Replaced the CharacterSetPref, EncodingPref, LanguagePref and
MediaTypePref by a generic Preference<Metadata> class.
 - Replaced Router.Mode enumeration by static constants on Router.
Simplifies the Javadocs display and works well enough.
 - Moved org.restlet.Factory into a hidden org.restlet.spi.Factory package.
Same thing for the NRE's Factory.
 - Replaced HostRouter.Mode enumeration by constants on HostRouter.
 - Moved WrapperMap to NRE util package as it's not used anymore in the API.
 - ScorerList now derives from WrapperList like similar classes (ClientList,
ParameterList, etc.).
 - Renamed RedirectHandler to RedirectRestlet as it is not taking advantage
of the features of a Handler.
 - Refactored the Servlet connector to make it work with the new notion of
Restlet's context.
 - Added put() and delete() methods on Resource interface and related
classes.
 - Renamed ContextClient into LocalClient to remove ambiguity with concept
of Restlet's context.
 - Handler now has a default implementation of the handlePut() and
handleDelete() methods.
 - Renamed ClientData.get*Prefs() methods into getAccepted*() to be more
inline with HTTP terminology.
 - Refactored and improved robustness of the ServerServlet adapter. Now you
have access to the ServletContext's logger and resources via the standard
   Restlet.getContext() methods.

[Other changes] 
 - Separated the HTTP client connector (based on JDK's HttpUrlConnection)
previously integrated to the NRE core. This will allow future alternative
   implementations like based on Apache HTTP Client or Apache MINA NIO
framework. Please ensure that the new extension
(com.noelios.restlet.ext.net) is
   added to your classpath when the application is making HTTP client calls.
 - Added ParameterList.getFirstValue() methods taking and additional
"defaultValue" parameter.
 - Parameterized all connectors, including the LocalClient.
 - Added HTTPS connector for Jetty 6.0
 - Updated Jetty 6 to RC1.
 - The Jetty 6 extension now appears in the Javadocs due to the package
renaming of the Jetty 5 extension.
 - Updated documentation, especially for the distribution. Suggested by Dave
Pawson.
 - Added more control on Simple HTTPS connector, see list of parameters.
 - Updated AsyncWeb to version 0.8.2.
 - The number of worker threads can now be configured for AsyncWeb.
 - Refactored the names in the NRE's impl package, uses Abstract prefix for
abstract classes and Default prefix for other ones implementing Restlet API.
 - The ServerServlet connector now copies all Servlet initialization
parameters (from the Web Application then from the Web Container) into the
connector
   parameters list. This allows the settings of the parameters related to
HTTP server connectors in all cases (standalone or embedded).
 - ContextClient now uses parameters for its configuration (default
encoding, language, mediatype, etc.).
 - Some unit test were catching exceptions, preventing JUnit from failing
the tests.
 - Added a Resource.setIdentifier() method taking a URI as a String.
 - Now the "Content-Location" is supported, for both the HTTP client and
server connectors. The corresponding property is available via the 
   call.getOutput().get/setIdentifier() method.
 - Added a default implementation for the HEAD method in AbstractResource
and AbstractHttpServer. Suggested by Thierry Boileau.
 - Now, all calls' resource references are automatically normalized to
ensure a consistent handling. Reported by Thierry Boileau.
 - Added Eclipse code formatter and template styles used to SVN.
 - Added DirectoryHandlerBuilder to allow the setting of the
contentNegotiation flag.
 - Added SVG media type constant to MediaTypes. Also part of the common
extesions (*.svg) of ContextClient.
 - Improved the default directory listing template to look more like Apache
style of listing. Added the ".." link when possible, etc.
 - Added Reference.getParentRef() method.
 - Added Tag.ALL constant, equivalent to the special "*" value in HTTP.

Reply via email to