|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectr01f.xmlproperties.XMLProperties
public class XMLProperties
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.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.
----------------------------------------------------------------------------------------------------
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 |
|---|
private java.util.Map<java.lang.String,XMLPropertiesManager> _propertiesManagerForAppCache
XMLPropertiesManager por aplicación que contiene un objeto
XMLPropertiesCache para dicha aplicación
private ResourcesLoaderFactory _resourcesLoaderFactory
ResourcesLoader necesaria para crear el ResourcesLoader
indicado en la configuración del componente (que SIEMPRE se carga desde el classPath)
(ver XMLPropertiesForComponentContainer)
private XMLPropertiesCacheFactory _cacheFactory
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 |
|---|
@Inject
public XMLProperties(XMLPropertiesCacheFactory cacheFactory,
ResourcesLoaderFactory resourcesLoaderFactory)
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 |
|---|
public XMLPropertiesManager forApp(java.lang.String appCode)
XMLPropertiesManager para una aplicación.
appCode - Código de aplicación.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||