Class SpringNamespaceHandler

  • All Implemented Interfaces:
    com.tangosol.config.xml.NamespaceHandler

    public class SpringNamespaceHandler
    extends com.tangosol.config.xml.AbstractNamespaceHandler
    The SpringNamespaceHandler provides the ability to reference Spring beans in a cache configuration file. In cases where a cache configuration needs to specify an externally provided user class via a <class-scheme> or <instance> element, this namespace handler can provide a Spring bean from a BeanFactory.

    In order to use this handler in a cache configuration file, the handler must be declared. This is done via the following declaration:

     xmlns:spring="class://com.oracle.coherence.spring.SpringNamespaceHandler"
     
    To guard against invalid configuration, the XSD (coherence-spring-config.xsd) that corresponds to this namespace handler can also be referenced.

    Here is a complete example:

     <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
       xmlns:spring="class://com.oracle.coherence.spring.SpringNamespaceHandler"
       xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd
       class://com.oracle.coherence.spring.SpringNamespaceHandler coherence-spring-config.xsd">
     
    To specify a bean, use the <bean> and <bean-name> elements under <class-scheme> or <instance> elements:
     <class-scheme>
       <spring:bean>
         <spring:bean-name>listener</spring:bean-name>
       </spring:bean>
     </class-scheme>
     
    Cache configuration properties (including cache configuration macros) can be injected into a bean using two possible mechanisms: push or pull. The push mechanism allows the runtime macro value to be injected into the bean by this NamespaceHandler such as:
     <spring:bean>
       <spring:bean-name>listener</spring:bean-name>
       <spring:property name="backingMapManagerContext">{manager-context}</spring:property>
     </spring:bean>
     
    The pull mechanism allows for cache configuration properties to be referenced in the Spring application context file such as:
     <bean id="listener" class="foo.BML" lazy-init="true">
       <property name="backingMapManagerContext" value="#{manager-context}"/>
     </bean>
     
    A bean factory that will provide the Spring beans can be specified in two ways:

    1. Specify an application context in the cache configuration file:

     <spring:bean-factory>
       <spring:application-context-uri>application-context.xml</spring:application-context-uri>
     </spring:bean-factory>
     
    Similar to a cache configuration file, the application context file will be loaded either via the file system or the classpath. URLs are supported.

    2. Specify a bean factory as a resource:

    A Spring bean factory can be manually registered as a resource in the following manner:

     ConfigurableCacheFactory factory = CacheFactory.getCacheFactoryBuilder().
             getConfigurableCacheFactory(...);
    
     factory.getResourceRegistry().registerResource(BeanFactory.class,  // type
             factoryName,                                               // resource name
             factory,                                                   // factory reference
             null);                                                     // optional ResourceLifecycleObserver
     
    If a resource name other than the fully-qualified-class-name of the BeanFactory is specified, that name can be referenced in the bean element:
     <spring:bean>
       <spring:factory-name>custom-factory</spring:factory-name>
       <spring:bean-name>listener</spring:bean-name>
     </spring:bean>
     

    Copyright (c) 2013-2015. All Rights Reserved. Oracle Corporation.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

    Author:
    Patrick Peralta, Brian Oliver
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      protected static java.lang.String getFactoryNameAsString​(java.lang.Class<?> factoryClass, com.tangosol.config.expression.Expression<java.lang.String> exprFactoryName, com.tangosol.config.expression.ParameterResolver resolver)
      Return the factory name produced by the provided expression, or the name of the factory class if the expression is null.
      • Methods inherited from class com.tangosol.config.xml.AbstractNamespaceHandler

        getAttributeProcessor, getAttributeProcessor, getDocumentPreprocessor, getElementProcessor, getElementProcessor, onEndNamespace, onStartNamespace, onUnknownAttribute, onUnknownElement, registerAttributeType, registerElementType, registerProcessor, registerProcessor, registerProcessor, setDocumentPreprocessor
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface com.tangosol.config.xml.NamespaceHandler

        getOverrideProcessor
    • Method Detail

      • getFactoryNameAsString

        protected static java.lang.String getFactoryNameAsString​(java.lang.Class<?> factoryClass,
                                                                 com.tangosol.config.expression.Expression<java.lang.String> exprFactoryName,
                                                                 com.tangosol.config.expression.ParameterResolver resolver)
        Return the factory name produced by the provided expression, or the name of the factory class if the expression is null.
        Parameters:
        factoryClass - the Class of the factory (this will be used if no factory name was specified)
        exprFactoryName - the expression containing the BeanFactory name
        resolver - the ParameterResolver to use for resolving factory names
        Returns:
        factory name for the BeanFactory