///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-spring, Spring Integration Library]]
= Spring Integration =

[devstatus]
--------------
source=libraries/spring/dev-status.xml
--------------

include::../../build/docs/buildinfo/artifact.txt[]

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

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

[snippet,java]
----
source=libraries/spring/src/test/java/org/apache/polygene/library/spring/importer/PolygeneImportServiceTest.java
tag=import
----

== Using Apache Polygene™ in Spring Framework ==
It is also possible to run a Polygene™ Application as a Spring Bean and export its Services to Spring.

Steps to export Polygene™ service:

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

To bootstrap the Polygene™ runtime in Spring, you should have a bootstrap bean that extends the
+org.apache.polygene.library.spring.bootstrap.PolygeneApplicationBootstrap+ and implement the
+org.springframework.context.ApplicationContextAware+.

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

Example application context;
[source,xml]
----
 <?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:polygene="http://polygene.apache.org/schema/polygene/spring"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://polygene.apache.org/schema/polygene/spring http://polygene.apache.org/schema/polygene/spring/spring-0.5.xsd">

  <!-- class that implements PolygeneApplicationBootstrap -->

  <polygene:bootstrap class="org.hedhman.niclas.MyPolygeneBootstrapper"/>

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

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

 </bean>
----

[snippet,java]
----
source=libraries/spring/src/test/java/org/apache/polygene/library/spring/MyPolygeneBootstrapper.java
tag=code
----
