Project Polygene has retired. For details please refer to its Attic page.
Spring Integration
Zest™
Introduction
Tutorials
Javadoc
Samples
Core
Libraries
Extensions
Tools
Glossary 

Spring Integration

code

docs

tests

Table 48. Artifact

Group IDArtifact IDVersion

org.qi4j.library

org.qi4j.library.spring

2.1


Using Spring Framework in Apache Zest™

Zest™ supports that Spring Application Context is imported into the Zest™ runtime, and the declared Spring beans will be available as Zest™ services. The most important things to remember are;

  1. Only Spring Singletons are currently supported.
  2. One ApplicationContext per Zest™ Module.
  3. The Zest™ service will be given the same name as the Spring Bean name.
  4. Zest™ Configuration is not reacbable from the Spring bean (kind of obvious).
new SpringImporterAssembler( appContext ).assemble( module );

Using Apache Zest™ in Spring Framework

It is also possible to run a Zest™ Application as a Spring Bean and export its Services to Spring.

Steps to export Zest™ service:

  1. Create spring BeanFactory service of qi4j services to export.
  2. Create a class that extends Qi4jApplicationBootstrap.
  3. Sets the layer and module that register BeanFactory service.
  4. Assemble qi4j application by implementing #assemble method.
  5. Sets the identity of bean factory service. This identity is the spring bean name.
  6. Declare qi4j bootstrap in spring xml application context.

To bootstrap the Zest™ runtime in Spring, you should have a bootstrap bean that extends the org.qi4j.library.spring.bootstrap.Qi4jApplicationBootstrap and implement the org.springframework.context.ApplicationContextAware.

A new bean will appear in the application context, called "qi4jApplication" which is only intended for internal use of this library.

Example application context;

 <?xml version="1.0" encoding="UTF-8"?>

 <beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:qi4j="http://www.qi4j.org/schema/qi4j/spring"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.qi4j.org/schema/qi4j/spring http://www.qi4j.org/schema/qi4j/spring/spring-0.5.xsd">

  <!-- class that implements Qi4jApplicationBootstrap -->

  <qi4j:bootstrap class="org.hedhman.niclas.MyZestBootstrapper"/>

  <bean id="someService" class="org.hedhman.niclas.SomeService">

  <constructor-arg ref="someService"/> <!-- Reference qi4j comment service -->

 </bean>
public class MyZestBootstrapper extends Qi4jApplicationBootstrap
        implements ApplicationContextAware
{
    private ApplicationContext applicationContext;

    @Override
    public void assemble(ApplicationAssembly assembly) throws AssemblyException
    {
        // Normal assembly of an application.
          [...snip...]

    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        this.applicationContext = applicationContext;
    }

}