en lugar de decir que es ridiculo preguntaria porque hay varias personas experimentadas que dicen que no sirve.
La sesion mantiene una referencia a todos los objetos que se usan en la sesion. Si siempre usas la misma sesion al cabo de un tiempo vas a tener la base de datos completa en memoria 2012/2/13 BlackCid <[email protected]> > Y respecto a: > " > Session-per-application > Imposible usar en una aplicación real > Más que un pattern es una “Time bomb” > " > > Me parece ridículo que diga eso, yo llevo tiempo haciendo pruebas y > una vez solucionados los problemas iniciales va como la seda con > cientos de interacciones por segundo. > > On 13 feb, 18:23, BlackCid <[email protected]> wrote: > > "yo creo que primero iría por "minimizar" cada request en lugar de > > crear una mega-aplicación en ram. ¿cuál es el costo de acceso a base > > de datos que tenés? " > > > > Estamos hablando de un juego multijugador, es imposible que no tenga > > todo en ram... tiene que haber una sesion unicamente si o si, no pude > > haber dos usuarios interactuando con distinta informacion... > > > > On 13 feb, 17:45, "[email protected]" <[email protected]> > > wrote: > > > > > > > > > Lo que te recomiendo es que no uses la session de nh como contenedor > > > de objetos desde multiples threads. > > > > > Tendrías que analizar bien la arquitectura a utilizar, revisar los > > > ciclos de vida de los objetos... > > > > > ...no es recomendable la "Session-per-application" > > > (http://fabiomaulo.blogspot.com/2009/04/empezando-con-nh-session.html) > > > > > en tu caso, estarías planteando una "Session-per-time", es decir, que > > > la utilizan todos los hilos un determinado tiempo que ahora es hasta q > > > se te reinicia el app-pool pero creo que podrías buscar algo mas > > > elegante. > > > > > Consulta ¿cuántos miles de usuarios esperás que estén haciendo request > > > en mismo momento?... > > > > > yo creo que primero iría por "minimizar" cada request en lugar de > > > crear una mega-aplicación en ram. ¿cuál es el costo de acceso a base > > > de datos que tenés? > > > > > saludos. > > > nelo > > > > > 2012/2/13 BlackCid <[email protected]>: > > > > > > No acabo de entender que quieres decir, para controlar el > > > > multithreading he añadido locks y va perfectaente, respecto a lo otro > > > > que os referis, no se si quereis decir que use nhibernate solo para > > > > cargar y guardar y luego traspase esa informacion a objetos separados > > > > de nhibernate. Para eso debería hacer una capa intermedia, pero de la > > > > forma que me la imagino para cada campo de cada clase debería llamar > a > > > > un metodo que registrase ese cambio para posteriormente guardarlo en > > > > nhibernate antes de hacer el flush que se realizaría cada X > minutos... > > > > ¿eso no cargaría demasiado? > > > > > > On 12 feb, 19:26, "[email protected]" <[email protected]> > > > > wrote: > > > >> Hola blacksid, creo que deberías considerar que nhibernate es un > ORM, > > > >> nada mas, nada menos. Creo que le estás dando demasiado > "protagonismo" > > > >> o "responsabilidades" en tu proyecto. > > > > > >> Como dice Carlos, deberías buscar mecanismo que sea apto para para > > > >> multithreading, ese mecanismo, dentro, como ORM, puede usar > > > >> tranquilamente nhibernate, pero la session de nh no es el contenedor > > > >> de objetos adecuado para el proposito que mencionás. > > > > > >> saludos. > > > >> nelo > > > > > >> > multithreading. > > > > > >> 2012/2/12 Carlos Peix <[email protected]>: > > > > > >> > Hola blacksid, > > > > > >> > Flush auto esta pensado justamente para el caso que mencionas, es > decir, > > > >> > cuando NH "sospecha" que un query puede alcanzar objetos que > tiene en > > > >> > memoria con persistencia pendiente, entonces hace un flush a la > base para > > > >> > que el query traiga ese objeto. > > > > > >> > Ahora bien, si tenes una sola sesion de NH en memoria para un > juego > > > >> > multijugador y esa sesion esta viva mucho tiempo, me parece que > no vas por > > > >> > el camino correcto. > > > > > >> > A menos que ese juego sea un simple experimento, sugiero que > trabajes en > > > >> > memoria con esa informacion u otro tipo de mecanismo que sea apto > para > > > >> > multithreading. > > > > > >> > ---------------------------------- > > > >> > Carlos Peix > > > > > >> > 2012/2/12 BlackCid <[email protected]> > > > > > >> >> A ver, se trata de un juego multijugador, por eso debo usar una > sesion > > > >> >> todo el rato (digamos que dura infinito, en realidad cada X > tiempo se > > > >> >> reiniciaría la aplicacion pero bueno), y es por eso que se me > complica > > > >> >> tanto. Respecto a lo del flush lo que se suele hacer es un flush > cada > > > >> >> X minutos en este tipo de aplicaciones, por eso no lo pongo > auto. Aun > > > >> >> debo estudiar como se realiza el flush pero daba por hecho el > > > >> >> realizarlo cada X minutos, a no ser que me recomendeis otra cosa. > > > > > >> >> On 11 feb, 16:07, Carlos Peix <[email protected]> wrote: > > > >> >> > Hola blacksid, > > > > > >> >> > Por algun motivo estas desestimando la solucion que te propuso > Nelo mas > > > >> >> > arriba? me refiero a la de configurar el flush en auto. > > > > > >> >> > ---------------------------------- > > > >> >> > Carlos Peix > > > > > >> >> > 2012/2/11 BlackCid <[email protected]> > > > > > >> >> > > A ver el tema es el siguiente, primero hago el query para > saber si > > > >> >> > > esta el objeto, si no está hago new de un objeto, y le hago > un save. > > > >> >> > > El tema es que tal vez luego, y solo tal vez, lo necesitaré. > Se trata > > > >> >> > > de una aplicacion q van interactuando (con la misma sesión), > asi que > > > >> >> > > no puedo predecir el futuro. > > > > > >> >> > > De momento lo que he hecho es hacer una lista de los ids > creados, no > > > >> >> > > va del todo mal pero bueno si se pudiese usar nhibernate > directamente, > > > >> >> > > código q me ahorro. > > > > > >> >> > > On 10 feb, 20:08, "[email protected]" < > [email protected]> > > > >> >> > > wrote: > > > >> >> > > > Si, hasta donde recuerdo, si accedes a un objeto con el > Get y lo > > > >> >> > > > tiene > > > >> >> > > > en cache te trae ese (ya sea por el Save o porque lo > consultaste > > > >> >> > > > antes > > > >> >> > > > en esa session). El tema no es que no lo encuentre, sino > que no sabe > > > >> >> > > > si el objeto que está en cache cumple con las condiciones > de la > > > >> >> > > > query. > > > > > >> >> > > > Si nos dieses un poco mas de contexto de lo que estás > queriendo > > > >> >> > > > hacer, > > > >> >> > > > quizás alguien tenga alguna idea de como solucionarlo. > > > > > >> >> > > > saludos. > > > >> >> > > > nelo. > > > > > >> >> > > > 2012/2/10 BlackCid <[email protected]>: > > > > > >> >> > > > > Entonces la respuesta es No se puede. ¿No? > > > >> >> > > > > De todas formas yo creo que es más por la cache de > query, porque > > > >> >> > > > > si > > > >> >> > > > > hago un get, (que antes no habia hecho y por tanto no > debe estar > > > >> >> > > > > en > > > >> >> > > > > caché), de su id lo pilla :-/, así que algo me dice que > es porque > > > >> >> > > > > primero ejecuto al query, luego hago el save y luego la > vuelvo a > > > >> >> > > > > ejecutar. Pero intento invalidar la query caché y no > parece > > > >> >> > > > > funcionar. > > > >> >> > > > > ¿Que posibilidades tengo para invalidar la caché de > query? A ver > > > >> >> > > > > si > > > >> >> > > > > estoy intentándolo bien... > > > > > >> >> > > > > Aunque a lo mejor tienes razón y ejecuta la query contra > la base > > > >> >> > > > > de > > > >> >> > > > > datos pero el get si lo coja de su memoria. :S > > > > > >> >> > > > > On 10 feb, 04:02, "[email protected]" > > > >> >> > > > > <[email protected]> > > > >> >> > > > > wrote: > > > >> >> > > > >> Seguramente porque tenés el FlushMode en Never o en > Commit y la > > > >> >> > > > >> query > > > >> >> > > > >> se ejecuta contra la DB... hasta donde recuerdo, > NHibernate no > > > >> >> > > > >> tiene > > > >> >> > > > >> un motor T-SQL para los objetos en RAM. > > > > > >> >> > > > >> Una opción sería que pases a FlushMode Auto y de esta > forma > > > >> >> > > > >> NHibernate > > > >> >> > > > >> hará automáticamente el Flush cuando detecte que el > resultado de > > > >> >> > > > >> una > > > >> >> > > > >> query se puede ver afectado por objetos cuyo estado > todavía no > > > >> >> > > > >> fue > > > >> >> > > > >> reflejado en la DB. > > > > > >> >> > > > >> Si vas por el FlushMode en Auto, debés manejar > correctamente las > > > >> >> > > > >> transacciones y no es compatible con CpBT ni con > session que > > > >> >> > > > >> duren mas > > > >> >> > > > >> que un request (pensando en una aplicación web). > > > > > >> >> > > > >> saludos. > > > >> >> > > > >> nelo > > > > > >> >> > > > >> 2012/2/9 BlackCid <[email protected]>: > > > > > >> >> > > > >> > Ya, yo estoy hablando desde la misma sesión, pero > resulta que > > > >> >> > > > >> > hago > > > >> >> > > un > > > >> >> > > > >> > save de dicha entidad, y luego cuando hago una query > no me > > > >> >> > > > >> > sale. > > > > > >> >> > > > >> > On 8 feb, 17:14, "[email protected]" > > > >> >> > > > >> > <[email protected]> > > > >> >> > > > >> > wrote: > > > >> >> > > > >> >> Desde la misma session SI, desde otra NO. El flush es > > > >> >> > > > >> >> justamente el > > > >> >> > > > >> >> "pasaje" de la session a la db. (también influye > como manejes > > > >> >> > > > >> >> la > > > >> >> > > > >> >> transacción). > > > > > >> >> > > > >> >> saludos. > > > >> >> > > > >> >> nelo > > > > > >> >> > > > >> >> 2012/2/8 BlackCid <[email protected]>: > > > > > >> >> > > > >> >> > Resulta qe en un momento dado creo una nueva > entrada, pero > > > >> >> > > > >> >> > hasta > > > >> >> > > que > > > >> >> > > > >> >> > no se hace un flush no puedo obtenerla, ¿hay > alguna forma de > > > >> >> > > > >> >> > recuperarla antes de hacer un flush? > > > > > >> >> > > > >> >> > -- > > > >> >> > > > >> >> > Para escribir al Grupo, hágalo a esta dirección: > > > >> >> > > [email protected] > > > >> >> > > > >> >> > Para más, visite: > > > >> >> > > > http://groups.google.com/group/NHibernate-Hispano-Ocultartextodela > > > >> >> > > cita > > > >> >> > > - > > > > > >> >> > > > >> >> - Mostrar texto de la cita - > > > > > >> >> > > > >> > -- > > > >> >> > > > >> > Para escribir al Grupo, hágalo a esta dirección: > > > >> >> > > [email protected] > > > >> >> > > > >> > Para más, > > > >> >> > > > >> > visite: > http://groups.google.com/group/NHibernate-Hispano > > > > > >> >> > > > > -- > > > >> >> > > > > Para escribir al Grupo, hágalo a esta dirección: > > > >> >> > > [email protected] > > > >> >> > > > > Para más, > > > >> >> > > > > visite: > http://groups.google.com/group/NHibernate-Hispano-Ocultartextodela > > > >> >> > > > > cita - > > > > > >> >> > > > - Mostrar texto de la cita - > > > > > >> >> > > -- > > > >> >> > > Para escribir al Grupo, hágalo a esta dirección: > > > >> >> > > [email protected] > > > >> >> > > Para más, visite: > http://groups.google.com/group/NHibernate-Hispano- > > > >> >> > > Ocultar texto de la cita -- Ocultar texto de la cita - > > > > - Mostrar texto de la cita -... > > > > leer más » > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Ing. Marcos Mellibovsky ARSoft Consultoría Informática [email protected] 0351 155630801 msn:[email protected] -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
