r01f.xmlproperties
Class XMLProperties

java.lang.Object
  extended by r01f.xmlproperties.XMLProperties

public class XMLProperties
extends java.lang.Object

Los objetos XMLPropertiesManager deberían ser cacheados por aplicación, y para esto se utiliza esta clase, que mantiene una caché de los objetos XMLPropertiesManager:

                // Crear el propertiesManager... la instancia debería ser UNICA ya que contiene la cache
                XMLPropertiesCacheFactory cacheFactory = new XMLPropertiesCacheFactoryImpl();
                ResourcesLoaderFactory resourcesLoaderFactory = new ResourcesLoaderFactoryImpl();
                XMLProperties props = new XMLProperties(cacheFactory,resourcesFactory);
                // Acceder a las propiedades
                props.forApp(appCode1).of(componentOfApp1).getString(xPath);
                // o bien utilizar un wrapper
                XMLPropertyWrapper prop = new XMLPropertyWrapper(props.forApp(appCode2).of(componentOfApp2),xPath);
                prop.asString();
 
Por lo tanto, habría que mantener una UNICA INSTANCIA DE LA CLASE XMLProperties para toda la JVM.
Para esta función se utiliza Guice y la clase GuiceInjector que mantiene un SINGLETON del INYECTOR de GUICE:
                XMLPropertiesManager props = Guice.createInjector(new BootstrapGuiceModule()).getInstance(XMLProperties.class).forApp(appCode);
                XMLPropertyWrapper prop = new XMLPropertyWrapper(props.of(component),xPath);
                prop.asString();
 
... pero hacen falta 3 líneas de código para acceder a una propiedad así que para hacer la carga de propiedades más sencilla, lo ideal es crear una clase que encapsule el acceso:
                public class MyAppProps {
                        @Inject private XMLProperties _props;               // Inyectar el SINGLETON de XMLProperties

                        public static XMLPropertyWrapper at(final String component,final String xPath) {
                                XMLPropertiesManager props = _props.forApp("r01f");
                                XMLPropertyWrapper prop = new XMLPropertyWrapper(props.of(component),xPath);
                                return prop;
                        }
                        public static XMLPropertyWrapper at(final String component,final String xPathWithPlaceHolders,final String... vars) {
                                String theXPath = Strings.of(xPathWithPlaceHolders).customizeWith(vars).asString();
                                return R01FProps.at(component,theXPath);
                        }
                }
 
con lo que el uso ya es muy simple:
                MyAppProps.at(component,xPath).asString();
 

CARGA DE PROPIEDADES ver clase XMLPropertiesForComponentContainer.
----------------------------------------------------------------------------------------------------

See Also:
XMLPropertiesForComponentContainer

Field Summary
private  XMLPropertiesCacheFactory _cacheFactory
          Factoría de cache de propiedades Se utiliza en el objeto XMLPropertiesManager y necesita una referencia al ResourcesLoaderFactory puesto que la cache utiliza el objeto XMLPropertiesForComponentContainer para gestionar la carga de XMLs de propiedades y este objeto necesita cargar recursos con un ResourcesLoader
private  java.util.Map<java.lang.String,XMLPropertiesManager> _propertiesManagerForAppCache
          Cache de objetos XMLPropertiesManager por aplicación que contiene un objeto XMLPropertiesCache para dicha aplicación
private  ResourcesLoaderFactory _resourcesLoaderFactory
          Factoría de ResourcesLoader necesaria para crear el ResourcesLoader indicado en la configuración del componente (que SIEMPRE se carga desde el classPath) (ver XMLPropertiesForComponentContainer)
 
Constructor Summary
XMLProperties(XMLPropertiesCacheFactory cacheFactory, ResourcesLoaderFactory resourcesLoaderFactory)
          Constructor
 
Method Summary
 XMLPropertiesManager forApp(java.lang.String appCode)
          Obtiene el manager de propiedades XMLPropertiesManager para una aplicación.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_propertiesManagerForAppCache

private java.util.Map<java.lang.String,XMLPropertiesManager> _propertiesManagerForAppCache
Cache de objetos XMLPropertiesManager por aplicación que contiene un objeto XMLPropertiesCache para dicha aplicación


_resourcesLoaderFactory

private ResourcesLoaderFactory _resourcesLoaderFactory
Factoría de ResourcesLoader necesaria para crear el ResourcesLoader indicado en la configuración del componente (que SIEMPRE se carga desde el classPath) (ver XMLPropertiesForComponentContainer)


_cacheFactory

private XMLPropertiesCacheFactory _cacheFactory
Factoría de cache de propiedades Se utiliza en el objeto XMLPropertiesManager y necesita una referencia al ResourcesLoaderFactory puesto que la cache utiliza el objeto XMLPropertiesForComponentContainer para gestionar la carga de XMLs de propiedades y este objeto necesita cargar recursos con un ResourcesLoader

Constructor Detail

XMLProperties

@Inject
public XMLProperties(XMLPropertiesCacheFactory cacheFactory,
                            ResourcesLoaderFactory resourcesLoaderFactory)
Constructor

Parameters:
cacheFactory - Factoría de cache de propiedades.

NOTA: se utiliza en la clase XMLPropertiesManager para cachear las propiedades de un componente. Dado que en ESTA clase se cachea un objeto XMLPropertiesManager POR APLICACIÓN, hay una instancia de XMLPropertiesCache por XMLPropertiesManager y por lo tanto por APLICACION.

resourcesLoaderFactory - Factoría de los ResourcesLoaders responsables de cargar los xmls de propiedades.

NOTA: el ResourcesLoader concreto a utilizar se indica en el fichero de configuración del componente que SIEMPRE se carga desde el classPath (ver XMLPropertiesForComponentContainer).

Method Detail

forApp

public XMLPropertiesManager forApp(java.lang.String appCode)
Obtiene el manager de propiedades XMLPropertiesManager para una aplicación.

Parameters:
appCode - Código de aplicación.
Returns:
El manager que permite acceder a las propiedades.