blob: 6a2eff093efe5ce52ec3d6350b14a7c8e3f31d66 [file] [log] [blame]
<html>
<head>
<title>Sisu</title>
</head>
<style>
dt {
display: list-item;
list-style-position: outside;
list-style-image:
url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left: 16px;
}
dd {
margin-left: 25px;
margin-bottom: 5px;
}
</style>
<body>
<p>
The Sisu project is a proposed open source project under the <a
href="http://www.eclipse.org/projects/project_summary.php?projectid=technology">Technology
Container Project</a>.
</p>
<p>
This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the <a
href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse
Proposals</a> Forum.
</p>
<h2>Scope</h2>
<p>The Sisu project provides a complete dependency injection
framework with specific capabilities for bridging to OSGi.</p>
<h2>Description</h2>
<p>
Sisu is a fully compliant <a href="http://www.jcp.org/en/jsr/detail?id=330">JSR330</a>
container that supports classpath scanning, auto-binding, and dynamic
auto-wiring. Sisu uses Guice to perform dependency injection and provides the JSR330 support, but
removes the need to write explicit bindings in Guice modules.
Integration with other containers via the Eclipse Extension Registry
and the OSGi Service Registry is a goal of this project.
</p>
<p>Sisu also provides a replacement Plexus container that builds on
top of the JSR330 core. Plexus is the dependency injection container
used in Maven 2.x. We wanted a more widely used technology for
dependency injection and worked to replace Plexus with Sisu, a
Guice-based solution, in Maven 3.x. Plexus was also used in m2eclipse
and Nexus, but those usages have also been replaced with Sisu.</p>
<h2>Relationship with other Eclipse projects</h2>
<p>The projects at Eclipse that currently employ the use of Sisu
are m2eclipse, Tycho, and Hudson. The Xtext framework is currently
using Guice 2.x but is a project that could also levage Sisu and could
likely take advantage of some of the OSGi capabilities provided by the
Sisu framework. We hope to find other projects that want to leverage
dependency injection, in particular using the combination of JSR330
and OSGi, and we work together to improve the framework.</p>
<h2>Initial Contribution</h2>
<p>The initial contribution of the Sisu will consist of the
following parts:</p>
<ul>
<li><a href="https://github.com/sonatype/sisu">Sisu</a></li>
<li>Containers</li>
<li>JSR330 support</li>
</ul>
<p>The following components are Guice extensions that use the Guice
SPI.</p>
<table>
<tr>
<td>guice-bean-reflect</td>
<td>Bean reflection and introspection, ClassSpace abstraction</td>
</tr>
<tr>
<td>guice-bean-inject</td>
<td>Bean property injection (based on custom Guice injection)</td>
</tr>
<tr>
<td>guice-bean-scanners</td>
<td>JSR330 classpath scanning and support for indexes</td>
</tr>
<tr>
<td>guice-bean-converters</td>
<td>Additional Guice TypeConverters (File, URL)</td>
</tr>
<tr>
<td>guice-bean-locators</td>
<td>Lookup/watch implementations across multiple injectors</td>
</tr>
<tr>
<td>guice-bean-binders</td>
<td>Auto-bind implementations, auto-wire dependencies</td>
</tr>
<tr>
<td>guice-bean-containers</td>
<td>Classic and OSGi entry-points, JUnit/TestNG support</td>
</tr>
<tr>
<td>sisu-inject-bean</td>
<td>OSGi aggregate bundle (JSR330 support)</td>
</tr>
</table>
<p>Plexus support builds on top of JSR330 support. The following components are Guice extensions to allow legacy
Plexus components to run unmodified within Guice.</p>
<table>
<tr>
<td>guice-plexus-metadata</td>
<td>Runtime form of Plexus metadata</td>
</tr>
<tr>
<td>guice-plexus-scanners</td>
<td>Plexus XML and Plexus annotation scanners</td>
</tr>
<tr>
<td>guice-plexus-converters</td>
<td>Plexus TypeConverters (Date, Bean XML)</td>
</tr>
<tr>
<td>guice-plexus-locators</td>
<td>Plexus lookup semantics / visibility filtering</td>
</tr>
<tr>
<td>guice-plexus-binders</td>
<td>Auto-bind Plexus components, auto-wire Plexus requirements</td>
</tr>
<tr>
<td>guice-plexus-lifecycles</td>
<td>Plexus lifecycle support (start, stop, dispose, etc.)</td>
</tr>
<tr>
<td>guice-plexus-shim</td>
<td>Thin facade; delegates legacy API to new container</td>
</tr>
<tr>
<td>sisu-inject-plexus</td>
<td>OSGi aggregate bundle (Plexus support)</td>
</tr>
</table>
<p>Registries</p>
<p>The following components are Sisu extensions to allow
interaction with other containers.</p>
<table>
<tr>
<td>sisu-eclipse-registry</td>
<td>Eclipse extension bi-jection [work-in-progress]</td>
</tr>
<tr>
<td>sisu-osgi-registry</td>
<td>OSGi service bi-jection [work-in-progress]</td>
</tr>
<tr>
<td>sisu-spi-registry</td>
<td>Service Provider injection [work-in-progress]</td>
</tr>
</table>
<p>
<a href="https://github.com/sonatype/sisu-guice">Sisu Guice</a>
</p>
<p>This is a version of Guice that we provide a set of patches on
top of. These patches help with various issues and conveniences that
we have encountered that the Guice team doesn't wish to apply.</p>
<p>
<a href="https://github.com/sonatype/sisu-guava">Sisu Guava</a>
</p>
<p>This is a version of Guauva that we provide a set of
patches on top of. These patches help with various issues and
conveniences that we have encountered that the Guice team doesn't
wish to apply.</p>
<p>
<a href="https://github.com/sonatype/sisu-maven-plugin">Sisu Maven
Plugin</a>
</p>
<p>The Sisu Maven Plugin primarily provides support for the
generation of Sisu index files. These index files cache the results of
classpath scanning, providing faster startup times. Sisu has a Java6
APT plugin to generate the index files at compile time, but this can’t
help when building with a Java5 JDK or assembling a WAR out of
existing components. In such cases the Sisu Maven Plugin can generate
the index files as part of the build process. In the future the plugin
may also provide support for launching/controlling Sisu applications.</p>
<p>All these parts are fully implemented and are currently working
together to form the basis of Maven 3.x, Nexus, Hudson, and Tycho.</p>
<h2>Legal Issues</h2>
<p>There are no known legal issues.</p>
<h2>Committers</h2>
<p>The following individuals are proposed as initial committers to
the project:</p>
<ul>
<li>Stuart McCulloch, Sonatype (lead)</li>
<li>Jason van Zyl, Sonatype (lead)</li>
<li>Benjamin Bentmann, Sonatype</li>
<li>Igor Fedorenko, Sonatype</li>
<li>Alin Dreghiciu, Sonatype</li>
</ul>
<h2>Mentors</h2>
<p>The following Architecture Council members will mentor this
project:</p>
<ul>
<li>Mik Kersten</li>
<li>Wayne Beaton</li>
</ul>
<h2>Interested Parties</h2>
<p>The following individuals, organisations, companies and projects
have expressed interest in this project:</p>
<ul>
<li>Dain Sundstrom, Proofpoint</li>
<li>Dhanji R. Prasanna</li>
<li>Jesse Wilson, Google</li>
<li>Werner Keil, Eclipse UOMo</li>
<li>Bob Lee, Square</li>
<li>David Blevins, IBM</li>
<li>Brian de Alwis</li>
</ul>
<h2>Project Scheduling</h2>
<p>The Sisu project intends to make the first code contribution by
August 30th, and we hope for the first builds to be available soon
after that.</p>
<h2>Meaning of the word sisu</h2>
<p>
<a href="http://en.wikipedia.org/wiki/Sisu">Sisu</a> is a Finnish term
loosely translated into English as strength of will, determination,
perseverance, and acting rationally in the face of adversity. However,
the word is widely considered to lack a proper translation into any
language. Sisu has been described as being integral to understanding
Finnish culture. The literal meaning is equivalent in English to
"having guts", and the word derives from sisus, which means something
inner or interior. However sisu is defined by a long-term element in
it; it is not momentary courage, but the ability to sustain an action
against the odds. Deciding on a course of action and the sticking to
that decision against repeated failures is sisu. It is similar to
equanimity, except the forbearance of sisu has a grimmer quality of
stress management than the latter. The noun sisu is related to the
adjective sisukas, one having the quality of sisu.
</p>
<h2>Changes to this Document</h2>
<table>
<tr>
<th>Date</th>
<th>Change</th>
</tr>
<tr>
<td>21-July-2011</td>
<td>Document created</td>
</tr>
<tr>
<td>27-July-2011</td>
<td>Added several interested parties.</td>
</tr>
</table>
</body>
</html>
<html><body></body></html>