blob: 441f8fde5501176fc41c8150b232b7cc8ec2a965 [file] [log] [blame]
<?xml version="1.0"?>
<!--
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<document>
<properties>
<title>Services Repository Proposal</title>
</properties>
<body>
<section name="Description">
<p>
The services repository would be a place to store non-core/third party
Turbine services that could be utilized by anyone developing with the
Turbine services framework. There are services that are stored in
the main Turbine CVS that would be good candidates for the services
repository: castor, xmlrpc, xslt, webmacro, freemarker, naming.
These are services that Turbine can function without. Many Turbine
developers have probably created services but have never offered them
to the group because they are somewhat specialized: these services would
be ideal in the repository because they would have a description and
might be a great starting place for another developer. Or even better,
a contributed service might be exactly what another developer needs.
</p>
<p>
There are also services in other OSS Turbine-based applications that
would be good candidates for the services repository. Tambora has
a rule service and processing service that could be useful for other
Turbine-based B2B solutions, and the URL management and disk caching
services in Jetspeed are also general purpose services that would be
very useful to a wide audience of developers.
</p>
</section>
<section name="Rationale">
<p>
It would be nice to try and slim down the primary Turbine CVS.
There are many services currently in that are not core services. These
non-core services could easily be stored somewhere else and make the
primary Turbine CVS easier to navigate and become familiar with.
</p>
<p>
It would be highly desirable to build up an extensive library
of services. All of these services can't be kept in the primary
Turbine CVS and so I imagine there are quite a few services out there
that have not been contributed due to there specialized nature.
Specialized services are ideal for the repository, if the services
are kept in a central location and cataloged all parties involved
will benefit.
</p>
</section>
<section name="Requirements">
<p>
Services would have to be functional from JAR files. For this to work
the following changes would have to be made:
</p>
<ul>
<li>
The Services framework would have to be altered to load services
packaged in the form of JAR files.
</li>
<li>
Dependent services would have to be listed in the manifest so that the
the initialization of a service could be deferred until all
prerequisites of the service have been initialized.
</li>
<li>
The service package in a JAR should state all of its configuration
options as it may be necessary to have this configuration information
extracted from the JAR and added to TR.props or whatever future
configuration mechanisms we devise. It might be nice to have an
option in Turbine where there is no TR.props to begin with but
starting Turbine with a certain option would produce a configuration
that reflected the use of a set of services. Or Turbine would start,
but would require some configuration from via a little web application
before Turbine would accept connections from the outside world.
</li>
</ul>
</section>
<section name="Scope">
<p>
This would primarily affect the services framework, but the tools
required to pull information from JARS and load the JARS could probably
be used for loading/configuration sub-applications. We can probably
borrow a lot of this code from Avalon as I think this is pretty
much worked out in its service framework.
</p>
</section>
<section name="Initial Source">
</section>
<section name="Initial Committers">
</section>
</body>
</document>