The Sisu project is a proposed open source project under the Technology Container Project.
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 Eclipse Proposals Forum.
The Sisu project provides a complete dependency injection framework with specific capabilities for bridging to OSGi.
Sisu is a fully compliant JSR330 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.
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.
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.
The initial contribution of the Sisu will consist of the following parts:
The following components are Guice extensions that use the Guice SPI.
|guice-bean-reflect||Bean reflection and introspection, ClassSpace abstraction|
|guice-bean-inject||Bean property injection (based on custom Guice injection)|
|guice-bean-scanners||JSR330 classpath scanning and support for indexes|
|guice-bean-converters||Additional Guice TypeConverters (File, URL)|
|guice-bean-locators||Lookup/watch implementations across multiple injectors|
|guice-bean-binders||Auto-bind implementations, auto-wire dependencies|
|guice-bean-containers||Classic and OSGi entry-points, JUnit/TestNG support|
|sisu-inject-bean||OSGi aggregate bundle (JSR330 support)|
Plexus support builds on top of JSR330 support. The following components are Guice extensions to allow legacy Plexus components to run unmodified within Guice.
|guice-plexus-metadata||Runtime form of Plexus metadata|
|guice-plexus-scanners||Plexus XML and Plexus annotation scanners|
|guice-plexus-converters||Plexus TypeConverters (Date, Bean XML)|
|guice-plexus-locators||Plexus lookup semantics / visibility filtering|
|guice-plexus-binders||Auto-bind Plexus components, auto-wire Plexus requirements|
|guice-plexus-lifecycles||Plexus lifecycle support (start, stop, dispose, etc.)|
|guice-plexus-shim||Thin facade; delegates legacy API to new container|
|sisu-inject-plexus||OSGi aggregate bundle (Plexus support)|
The following components are Sisu extensions to allow interaction with other containers.
|sisu-eclipse-registry||Eclipse extension bi-jection [work-in-progress]|
|sisu-osgi-registry||OSGi service bi-jection [work-in-progress]|
|sisu-spi-registry||Service Provider injection [work-in-progress]|
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.
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.
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.
All these parts are fully implemented and are currently working together to form the basis of Maven 3.x, Nexus, Hudson, and Tycho.
There are no known legal issues.
The following individuals are proposed as initial committers to the project:
The following Architecture Council members will mentor this project:
The following individuals, organisations, companies and projects have expressed interest in this project:
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.
Sisu 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.
|27-July-2011||Added several interested parties.|
Back to the top