close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Closed 14 years ago

#424 closed enhancement (fixed)

Ampliación de funcionalidad métodos Get de MMS::Container: si no existe el Objeto en memoria, cargarlo de repositorio

Reported by: atorre Owned by: Pedro Gea
Priority: critical Milestone: Release 0.6
Component: Persistence Keywords: Container, métodos Get, Load, Repository
Cc:

Description (last modified by Pedro Gea)

Hola MMS,
creo que se podría ampliar la funcionalidad de los métodos Get del contenedor de MMS. Si no existe en el contenedor, lo podría intentar cargar de un repositorio (¿o un conjunto de repositorios ordenados?) que se pasaría como argumento adicional en el Anything info.

Sigue un ejemplo de una función que lo hace:

NameBlock GetDataSet_INELO(Anything info)
// INELO: If Not Exists, LOad
{
  Real dsFound = MMS::Container::FindDataSet(info);
  If(dsFound, MMS::Container::GetDataSet(dsFound),
  {
    WriteLn("GetDataSet_INELO:\nDataSet "<< info["DataSetName"] +" not loaded", "W");
    NameBlock repo = info["Repository"];
    repo::LoadDataSet(info)
  })
};

MMS::@DataSet Prueba = GetDataSet_INELO(
[[
   Text DataSetName = "<DATA_SET_NAME>",
   Text DataSetVersion = "<DATA_SET_VERSION>",
   MMS::@Repository Repository = KNOWN_REPOSITORY_OBJECT
]]);

Change History (3)

comment:1 Changed 14 years ago by Pedro Gea

Component: GeneralPersistence
Description: modified (diff)

Este tique está relacionado con #385. Podrían tratarse conjuntamente.

comment:2 Changed 14 years ago by Pedro Gea

(In [2377]) Se introduce una variante de los métodos Get[Object] del contenedor principal (MMS::Container) que permite cargar los objetos de repositorios si no se encuentran cargados.
Refs #424

comment:3 Changed 14 years ago by Pedro Gea

Resolution: fixed
Status: newclosed

El método solicitado se implementa con el nombre: Get[Object]_Load.
El método recibe necesarimente dos argumentos:

  • el primero es la información del objeto que desea ser cargado (el mismo argumento de Get[Object])
  • el segundo es una lista de ubicaciones (repositorios) donde buscar en caso de no encontrarse el objeto cargado.

El método admite que se le indique directamente un repositorio en lugar de una lista.
El método busca ordenadamente en los respositorios indicados cargando el objeto del primer repositorio en el que lo encuentre.
Si el segundo argumento fuese Empty actuaría como Get[Object] pues no buscaría en ningún .

A continuación se indican algunas variantes de uso:

// Usando el nombre del modelo y el nombre de un repositorio:
MMS::@Model model = MMS::Container::GetModel_Load("Mat.Veh", "Default");
// Usando el identificador del modelo y la instancia de un repositorio:
MMS::@Model model = MMS::Container::GetModel_Load("Mat.Veh__1.0", 
  MMS::Container::GetRepository(1));
// Usando el par nombre-versión del modelo y una lista de objetos repositorio:
MMS::@Model model = MMS::Container::GetModel_Load([["Mat.Veh", "1.0"]], 
  MMS::Container::GetRepositories(?));
Note: See TracTickets for help on using tickets.