Overview of DeltaSpike

Apache DeltaSpike is a collection of portable CDI extensions. These ready-to-use modules enable you to integrate tested API extensions into your Java projects.

DeltaSpike consists of a core module and a number of optional modules for providing additional enterprise functionality to your applications. The modules include features for enhanced security with type-safe control over method invocations, integration with schedulers, injection of CDI objects into validators, a transactional context and scope, and much more. DeltaSpike also provides boot and shutdown control over CDI containers in Java SE applications.

As a CDI extension, DeltaSpike must be used in conjunction with a CDI implementation and supports both JBoss Weld and Apache OpenWebBeans. DeltaSpike is tested on a range of application servers and CDI-enabled containers including Apache TomEE, JBoss AS, WildFly, Oracle GlassFish, and Jetty.

DeltaSpike provides a number of examples to show you how to use and get the most from this technology.

Features

Java EE 7 without Java EE 7!

Transactional support for non-EJB beans: The Transactional Interceptor in DeltaSpike paved the way for @Transactional in Java EE 7.

Injectable Servlet objects: Enables CDI injection in Servlets in Java EE 6/CDI 1.0 environments

Injectable resources: Configuration, resource bundles,…​ are easy to inject when using CDI and Apache DeltaSpike.

@Exclude annotation: Lets you prevent classes from being treated as CDI beans even if they are in a CDI-enabled archive in a Java EE 6/CDI 1.0 environment where @Vetoed is unavailable or when you need to veto based on ProjectStages or expressions.

Scheduling tasks: Async processes in a non-EE7 environment.

Bean Validation integration: Injection of CDI beans and EJBs into Constraint Validators.

BeanProvider: Access the BeanManager and CDI beans even in non-managed classes like JPA 2.0 EntityListeners or Spring Beans.

JSF Improvements

Multi-window handling: Management of logical windows for batch jobs, browser tab separation in JSF and more.

Type-safe view-config: Lets you bind metadata (e.g. for security) to views with a flexible type-safe approach. It provides a more solid navigation in case of JSF and helps a lot in the maintenance phase.

View-Controller: Based on type-safe view-configs, view-controller annotations provide a type-safe alternative to standard tags.

Injection in Converters and Validators: Inject CDI beans and EJBs into JSF Converters and Validators.

JSF event broadcasting to CDI: Allows CDI to be notified about JSF events

Productivity Improvements

Security based on annotations: The foundation for building a robust, capable and non-invasive security solution.

New CDI scopes: TransactionScoped, WindowScoped, ViewScoped, ViewAccess scope, Grouped conversation scope.

Container Control and Test Control: Java SE with CDI, all with a unifying API. Start, stop, add classes to a running CDI container.

Data Module: An out of the box entity framework solution complete with support for container or application managed persistence contexts, as well as JDBC.

Decoupled Exception handling: Event-based exception handling framework, similar to the CDI event observer mechanism.

JMX integration: Any CDI bean can be exposed via JMX easily with a single annotation.

Type-safe i18n messages: Localized messages are easy to use with an interface and a resource bundle, no more boilerplate and your messages now have context within the code.

Type-safe ProjectStages: Compared to ProjectStages in JSF, DeltaSpike provides a type-safe, but still extensible approach which can be used in CDI-based applications.

Background

CDI

Java Contexts and Dependency Injection for the Java EE platform (JSR 299), abbreviated CDI was introduced as part of Java EE 6. The core features of CDI are as follows:

  • improved stateful object lifecycles with an additional context named Conversation that encompasses a series of requests within one session and lifecycle management by the container according to well-defined contexts

  • dependency injection conducted in a type-safe manner, with type checking conducted at compilation time so errors are exposed earlier and debugging is easier

  • event notification facility for object interaction

  • a better approach for interceptors with annotations binding interceptors to objects and with a new interceptor named decorator that knows about individual bean attributes through inheritance and is more appropriate for use in solving business problems

  • a Service Provider Interface (SPI) for developing portable extensions to the CDI container

CDI is a Java Community Process (JCP) standard. All Java EE 6 compliant application servers must provide support for CDI. JBoss Weld is a reference implementation of the CDI specification and other spec-compliant implementations exist such as Apache OpenWebBeans (OWB). While CDI is a Java EE 6 essential, CDI can also be used in Java SE environments with the aid of standalone CDI implementations.

Portable CDI Extensions

The CDI Service Provider Interface (SPI) is exposed to enable extension of the CDI feature set by third parties. Portable CDI extensions extend CDI implementations and improve existing Java EE APIs by enabling integration of different technologies.

As set out in the CDI specification, a portable CDI extension may integrate with a CDI container as follows:

  • providing its own beans, interceptors and decorators to the container

  • injecting dependencies into its own objects using the dependency injection service

  • providing a context implementation for a custom scope

  • augmenting or overriding the annotation-based metadata with metadata from some other source

As indicated by the name, portable CDI extensions can be used with any spec-compliant CDI implementation.

Next

For instructions on how to start using DeltaSpike, see Configure DeltaSpike in Your Projects and Enable CDI For Your Java Environment.