Instancias de aplicación


([N1] Spicer) #1

Hola a todos,

Tengo una consulta conceptual.

Estoy creando bibliotecas comunes de componentes para compartir entre varios proyectos. Esto contempla elementos de datos (tablas, variables) y elementos de aplicación (menúes de administración, etc)

El tema es… no entiendo el concepto de las instancias de aplicación en la herencia. Para el tema de datos, está claro: una instancia es el equivalente a una base de datos nueva, y para un proyecto de datos, puedo tener muchas instancias, o conjuntos de datos sobre ese modelo.

Pero considerando que un proyecto de aplicación no tiene datos instanciables, sino que objetos que trabajan con datos… ¿qué sentido tiene tener una instancia de aplicación nueva de un proyecto heredado en una solución?

Gracias por las aclaraciones


([N4] eic) #2

Hola, Spicer.

Efectivamente, no tiene mucho sentido. De hecho, al menos en mi experiencia, ese tipo de proyectos de aplicación “comunes” los instancio una vez, y los heredo desde las aplicaciones que lo heredan.

Tiene su sentido instanciarlos por equivalencia con las instancias de datos, pero no tiene efecto real (en mi opinión) tener una o varias instancias de ellos… más que enmarañar la pestaña de instancias.


([N1] Spicer) #3

Estimado Fran,

Gracias por la respuesta. ¿Y cómo lo haces con los proyectos de datos asociados a estas aplicaciones comunes? ¿Haces que la aplicación objetivo herede los proyectos de aplicación que a su vez heredan los proyectos de datos respectivos, o haces que la aplicación objetivo herede directamente los proyectos de datos comunes?

Gracias nuevamente

 


([N1] Pepeto) #4

Los proyectos de aplicación, no tienen instancias “visibles” como los proyectos de datos, que lógicamente guardan datos en carpetas separadas físicamente.

Sin embargo, las instancias de los proyectos de aplicación son para permitir ejecutar un mismo proyecto varias veces “en memoria” en el servidor y por tanto, mantener datos de cada aplicación de forma independiente, como por ejemplo, las “Variables Globales”.

Además, son los proyectos de aplicación, los que nos permiten el acceso a los datos. Por tanto, al ejecutar una aplicación, es necesario saber a que instancia de datos nos tiene que llevar y para eso, hay que instanciarlos también.

Por tanto, si vas a tener una solucion con datos comunes, lo mas normal, es que solo tengas una instancia, tanto de datos como de aplicación, y la prodrás usar con todas las aplicaciones que la heredan.

un saludo

José Luis


([N1] Spicer) #5

Estimado José Luis,

Muchas gracias por la explicación. Muy clara, como siempre.


([N1] aztecmexico) #6

Solo un pequeño detalle,

Si vas a compartir instancias de datos o de aplicación no te sirve generar la herencia “directa” (así le llamo yo), ya que no te va a preguntar por cada caja que heredes si deseas crear una nueva instancia de la misma o si deseas compartir una ya existente.

Voy a intentar explicarlo un poco mejor.

Supón que tienes una aplicación personalizada basada en vBase, la llamaremos “App_propia”.

Lo “normal” sería que heredes vBase a App_propia y con eso cuando estas en desarrollo ya tienes acceso a todos los proyectos y cajas que a su vez hereda vBase, hasta aquí estamos bien, en desarrollo con eso es suficiente.

La estructura de herencias de vBase es la siguiente:

Cajas de aplicación: vBase hereda a Usuarios quien a su vez hereda a vDiseño y tambien la caja de datos de Usuarios.

Cajas de datos: vBase hereda a Entidades quien hereda a Localizaciones, quien hereda a Usuarios.

Bueno, bajo el supuesto de que deseas controlar total y absolutamente que todas las cajas puedan ser compartidas o no para ciertos clientes, si heredas como mencioné anteriormente, de manera “normal” vBase a tu App_propia, no vas a poder compartir las cajas de datos si llegas a generar una nueva instancia a partir de App_propia, ya que en automático te va a generar las instancias de las heredadas y las va a meter todas a un único directorio de datos.

Lo que debes hacer es, en App_propia heredar de manera manual (en la pestaña de herencia de las propiedades de la solución App_propia), todas y cada una de las cajas sobre las que quieras tener control, así al momento que generes una nueva instancia de aplicación a partir de App_propia el asistente te va a preguntar si deseas crear una nueva instancia o utilizar una existente para cada una de las cajas que heredaste directamente a App_propia.

En el vDevelop da igual, heredes solo vBase o heredes todas las cajas, siempre te lo va a pintar “bonito”, esto es, no te va a poner una flecha a cada caja que le heredaste a App_propia.

Haz la prueba y veras que es así.

Espero te sirva.

Saludos.

Martin Ibarra.


([N1] Spicer) #7

Estimado Martin,

Muchisimas gracias por la completa explicación. Una pregunta: Cuando dices

“Lo que debes hacer es, en App_propia heredar de manera manual (en la pestaña de herencia de las propiedades de la solución App_propia), todas y cada una de las cajas sobre las que quieras tener control.”

…te refieres a cajas de aplicación y de datos?

En el fondo, lo que me pasa es que no sé cuál es la forma más eficiente de trabajar con la herencia. Por un lado tengo una aplicación y su correspondiente caja de datos que he denominado SBase, en la cual tengo elementos comunes. Tengo otra que estoy llamando SBaseFlujos en la que tengo elementos que se basan en SBase, pero que son específicas para aplicaciones que requieran administrar flujos de actividades. Pretendo crear otras, para así tener un “mecano” que me haga más fácil la vida.

En este contexto, estoy muy enredado con este tema de las instancias, de modo que las sugerencias me vendrían de pelos

Muchas gracias!


([N1] aztecmexico) #8

Hola,

Así es, si solo heredas a vBase, por ejemplo, en la pestaña de herencia de la solución de ejemplo vas a ver a la izquierda (proyectos heredados) solo a vBase, y a la derecha (proyectos heredables) todos los demás (datos de Entidades, Usuarios y localizaciones) y aplicación de Usuarios y vDiseño.

Aquí al decir “manualmente” me refiero a que pases en esa pestaña de heredables a heredados los proyectos de datos o aplicación sobre los que quieras controlar si serán compartidos o no.

Te comento mi caso, a mi me interesa que todos los usuarios de una aplicación compartan la parte de localizaciones (datos), entonces a mi proyecto principal aparte de heredarle vBase en el bloque izquierdo, tambien le heredo el proyecto de datos de “localizaciones”, de esta manera puedo crear “N” instancias de aplicación para cada cliente, sin embargo todos sin excepción comparten el proyecto de “localizaciones”.

¿Razón para hacer esto? ahorro de espacio, mi proyecto de datos de localizaciones “pesa” cerca de 150 MB, y de momento lo tengo montado en un vServer Express, si por cada cliente que tengo le generara su propio proyecto de datos de localizaciones pues al segundo ya me comí y pasé el tamaño máximo del vServer Express, así en cambio todos comparten ese módulo y ahorro espacio, amén que yo me encargo de administrar las localidades para todos (casi medio millón de registros para México).

¿Cual es la forma más eficiente de trabajar con la herencia?, no creo que haya una respuesta puntual, depende de tus necesidades y requerimientos, así de botepronto por lo que comentas yo crearía una solución que heredara uno por uno tus proyectos “personalizados” de aplicación y los que pudieran resultar comunes a todos los usuarios (datos en catálogos, etc), así al momento de instanciar mi solución principal le indicaría al asistente que voy a utilizar mis proyectos de aplicación ya existentes (vamos, algo así como tu “almacen” de proyectos) y de datos ya existentes tambien, y solo generaría instancias de los proyectos de datos “propios” de cada cliente.

De esta manera al momento de visualizar las instancias en el vAdmin no te genera tantas ramas del árbol y resulta un tanto cuanto más sencillo administrarlo.

Ahora, aquí hay que probar, no sé si al compartir una instancia de aplicación y que en un momento determinado un usuario pudiera ocasionar que “rompiera” la misma eso afectaría a todos los demás usuarios que la están utilizando, me imagino que si, en ese caso y bajo ese supuesto sería mejor generar instancias de aplicación “propias” para cada cliente, así, si uno ocasiona que “rompa” su aplicación a los otros no les afectaría.

Otro punto a considerar es que cada instancia generada consume recursos de memoria, etc. Pero no te asustes, jejejeje, haz tus pruebas y evalua, solo entonces podrás decidir de qué manera te conviene más instanciar cada solución, pero sobre todo, conocerás más a fondo como se comporta el vServer ante las variopintas situaciones que se pueden dar, como dicen por ahí, para gustos colores, y vaya que opciones hay montones, decidir cual me conviene es lo difícil.

Saludos.

Martin Ibarra.


([N1] Spicer) #9

Uau…!

Gracias por compartir. Aún tengo que tener más soltura con esto de las instancias. Como te comenté, tengo un enredo más o menos. Tu post me ayuda mucho, gracias nuevamente

Saludos.