Sisu

The project has been created.

Sisu

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.

Scope

The Sisu project provides a complete dependency injection framework with specific capabilities for bridging to OSGi.

Description

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.

Relationship with other Eclipse projects

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.

Initial Contribution

The initial contribution of the Sisu will consist of the following parts:

  • Sisu
  • Containers
  • JSR330 support

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)

Registries

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]

Sisu Guice

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.

Sisu Guava

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.

Sisu Maven Plugin

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.

Legal Issues

There are no known legal issues.

Committers

The following individuals are proposed as initial committers to the project:

  • Stuart McCulloch, Sonatype (lead)
  • Jason van Zyl, Sonatype (lead)
  • Benjamin Bentmann, Sonatype
  • Igor Fedorenko, Sonatype
  • Alin Dreghiciu, Sonatype

Mentors

The following Architecture Council members will mentor this project:

  • Mik Kersten
  • Wayne Beaton

Interested Parties

The following individuals, organisations, companies and projects have expressed interest in this project:

  • Dain Sundstrom, Proofpoint
  • Dhanji R. Prasanna
  • Jesse Wilson, Google
  • Werner Keil, Eclipse UOMo
  • Bob Lee, Square
  • David Blevins, IBM
  • Brian de Alwis

Project Scheduling

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.

Meaning of the word sisu

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.

Changes to this Document

Date Change
21-July-2011 Document created
27-July-2011 Added several interested parties.