modeling-users Mailing List for Object-Relational Bridge for python
Status: Abandoned
Brought to you by:
sbigaret
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(19) |
Feb
(55) |
Mar
(54) |
Apr
(48) |
May
(41) |
Jun
(40) |
Jul
(156) |
Aug
(56) |
Sep
(90) |
Oct
(14) |
Nov
(41) |
Dec
(32) |
2004 |
Jan
(6) |
Feb
(57) |
Mar
(38) |
Apr
(23) |
May
(3) |
Jun
(40) |
Jul
(39) |
Aug
(82) |
Sep
(31) |
Oct
(14) |
Nov
|
Dec
(9) |
2005 |
Jan
|
Feb
(4) |
Mar
(13) |
Apr
|
May
(5) |
Jun
(2) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
(1) |
Feb
(1) |
Mar
(9) |
Apr
(1) |
May
|
Jun
(1) |
Jul
(5) |
Aug
|
Sep
(5) |
Oct
(1) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(4) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Vineet D. <vin...@gm...> - 2011-07-09 05:21:32
|
Hi *Sébastien Bigaret, I saw your work of "modeling". Excellent work ! That's what I was looking for my projects. Pl. tell me whether it is supported with Python 2.6. Reason why I use Python 2.6 is--- I am using web2py framework. http://www.web2py.com It supports Python 2.6 (not lower) * It would be great if I can make use of "modeling". Best regards, Vineet |
From: Sébastien B. <sbi...@us...> - 2009-07-20 08:18:53
|
Hi Bernard, You're absolutely right, we have a stupid bug here, introduced in rev.944. You'll find the simple patch below, fixing the problem (this has been committed into the trunk, rev.1004) Thanks for reporting. > Running mdl_validate_model.py sample_pymodel.py now gave no errors, but > returned nothing. I'm assuming that is following the unix philosophy of > being silent when there is nothing to report. Exactly: the return status is the only element indicating whether an error occured unless -v is specified. I'm happy to see a new person here coming from the WO/EO world. If you want to integrate support for psycopg2 into the framework (checking that the tests run ok etc.) feel free to contact me directly; even if I have almost no time to make the project evolve I may still be able to point you in the right direction!-) -- Sébastien. As per http://modeling.svn.sourceforge.net/viewvc/modeling/trunk/ProjectModeling/Modeling/scripts/mdl_generate_python_code.py?r1=961&r2=1004&pathrev=1004&diff_format=u --- trunk/ProjectModeling/Modeling/scripts/mdl_generate_python_code.py 2004/11/30 17:25:35 961 +++ trunk/ProjectModeling/Modeling/scripts/mdl_generate_python_code.py 2009/07/20 07:34:12 1004 @@ -178,7 +178,7 @@ from Modeling.ModelValidation import NOT_SUPPORTED,ERROR,WARNING,INFO,DEBUG errors=MV.ModelValidationException(ignore_levels=[DEBUG,INFO,WARNING]) MV.validateModel(model, errors) - if errors: + if errors.has_errors(): log("Error: model has errors") if verbose: log(str(errors)) else: log("(-v for details)") bds...@kn... a écrit : > When I run the validation check on the sample_model.py, it will validate OK. > > > bernard@li4-106:~/tmp> mdl_validate_model.py -v sample_pymodel.py > Loading the model... > Done. > Validating... > Done. > > However, when I then try to generate the python classes from it, I get > reports of errors: > > bernard@li4-106:~/tmp> mdl_generate_python_code.py -v sample_pymodel.py > Loading the model... > Error: model has errors > > Aborting > > I can't find any information on what those errors might be. > > Bernard |
From: <bds...@kn...> - 2009-07-19 10:12:11
|
When I run the validation check on the sample_model.py, it will validate OK. bernard@li4-106:~/tmp> mdl_validate_model.py -v sample_pymodel.py Loading the model... Done. Validating... Done. However, when I then try to generate the python classes from it, I get reports of errors: bernard@li4-106:~/tmp> mdl_generate_python_code.py -v sample_pymodel.py Loading the model... Error: model has errors Aborting I can't find any information on what those errors might be. Bernard |
From: <bds...@kn...> - 2009-07-16 11:15:18
|
I had psycopg working doing Zope user authentication against postgresql, so I knew psycopg was working. I saw the latest versions of psycopg install into /usr/local/lib/python/site-packages/psycopg2. However, when I tried to run mdl_validate_model.py as a test of the Modeling install, I got errors concerning python not being able to load psycopg. Dropping into the interpreter and following an example of working with psycopg2 (which did 'import psycopg2'), I was able to fetch data from the database. Having recently seen someone on the Zope users list having trouble with psycopg imports, and seeing the solution involved importing psycopg2, I guessed this was the issue with Modeling. I created a symlink in site-packages from psycopg2 for psycopg. Running mdl_validate_model.py sample_pymodel.py now gave no errors, but returned nothing. I'm assuming that is following the unix philosophy of being silent when there is nothing to report. Bernard |
From: <bds...@kn...> - 2009-07-16 10:29:20
|
Hi, I'd like to re-start this project. Could someone let me know how to go about doing this. I've downloaded the latest release, but it does not work on python 2.4.5 with psycopg2. I'm guessing at the moment that this is because modeling expects to use the older version of psycopg. I used WebObjects for several years, but I think that python/zope is actually a better fit than java. Bernard |
From: Wolfgang K. <fel...@gm...> - 2007-11-01 09:29:52
|
Bonjour, enfin, je suis un imb=C3=A9cile, on pourrait tout aussi bien = =C3=A9crire=20 Francais, non? > It's always nice to learn that a new pythoneer is among us :) Je connais Python depuis plus que dix ans maintenant (1994 en fait) et=20 je l'ai utilis=C3=A9 de temps en temps pour =C3=A9crire des petit = "scripts"=20 "pr=C3=AAt =C3=A0 jeter" sur MacOS X et Windows (pratique puisque = Python=20 fonctionne et avec OSA et avec COM). Mais maintenant je suis en train=20 de me pr=C3=A9parer pour travailler dans le monde FMDS = (fiabilit=C3=A9...) et=20 donc il faudrait que je me "bidouille" une "boite =C3=A0 outils" pour=20 travailler avec - des bases de donn=C3=A9es (p.ex. le sch=C3=A9ma MIMOSA CRIS, p.ex. = sur=20 PostgreSQL), - l'analyse statistique des donn=C3=A9es (p.ex. avec R) - et des outils pour cr=C3=A9er des tableaux de r=C3=A9sultats = (OpenOffice,=20 Gnumeric...), - des graphes (Matplotlib...) - et peut =C3=AAtre m=C3=AAme des GUI simples (GTK/Kiwi/Qt/Wxwidgets - = lequel=20 je comprendra mieux) Et il me semble encore une fois que Python soit l'outil = quasi-id=C3=A9al=20 pour tout cela. > Unfortunately, the support for compound primary keys has never been > finished. The code has been produced with multiple PKs in mind, > however it has never been tested, Pas de probl=C3=A8me :-). J'ai un sch=C3=A9ma tout fait "assez" complex = (300-400 entit=C3=A9s avec des cl=C3=A9s de 5-10 champs), on pourrait = cr=C3=A9er=20 des donn=C3=A9es pour les tests automatiquement... > and I suspect it would require more > than just 'testing it'. Du tout premier coup d'oeuil, le code ne me semblait pas aussi=20 difficilement comprehensible que celui de SQLAlchemy (la seule=20 alternative qui fonctionne d=C3=A9j=C3=A0 que je connais - y en a t-il=20 d'autres?). > However, I won't spend time to develop new things alone on my own. Modeling dans la librairie standard! C'est s=C3=A9rieux, d'ailleurs. = Tout=20 comme Pyrex, OmniORBpy et OmniNotify, Traits, un module de "programming = by contract"... En fait je cherche quelque chose qui me permet de "d=C3=A9clarer" un=20 mod=C3=A8le "logique" objet-relationnel (dans le cas pr=C3=A9sent c'est = MIMOSA=20 CCOM, en UML)en Python d'une mani=C3=A8re simple et d'utiliser un = sch=C3=A9ma=20 "physique" donn=C3=A9 (MIMOSA CRIS, en SQL) pour la persistence... > Now, if you find yourself interested enough and in the case you're > eager to look seriously at it, I mean the code, I'll be happy to help > you in the task. Je peux au moins essayer. :-) > If you're just looking for a object-relational bridge working "out of > the box" for your schemas involving compound PKs, I hate to say that > but frankly: I have to admit that you need to look elsewhere, because > the MDL framework does not support the feature you request right now. En fait je ne connais que SQLAlchemy qui fonctionne avec des cl=C3=A9es = composites... Dommage que Apple n'ait pas donn=C3=A9 de renaissance =C3=A0 EOF comme = version=20 client-serveur de Core Data. X-( Pourtant il y avait pas que moi qui=20 l'attendait pour Xcode 3.0, il me semble. A+, Wolfgang Keller |
From:
<sbi...@us...> - 2007-10-31 16:53:24
|
Hello Wolfgang, It's always nice to learn that a new pythoneer is among us :) Sadly, I won't be able to immediatly answer your particular request. Unfortunately, the support for compound primary keys has never been finished. The code has been produced with multiple PKs in mind, however it has never been tested, and I suspect it would require more than just 'testing it'. I guess I should update the home page, stating that the framework is not actively developped for the moment being. The lack of time on my side is the main culprit. It is however stable, and running in 2 "live" applications that are online for years and doing well --meaning: no bugs have been triggered for a long period. However, I won't spend time to develop new things alone on my own. Now, if you find yourself interested enough and in the case you're eager to look seriously at it, I mean the code, I'll be happy to help you in the task. If you're just looking for a object-relational bridge working "out of the box" for your schemas involving compound PKs, I hate to say that but frankly: I have to admit that you need to look elsewhere, because the MDL framework does not support the feature you request right now. Do not hesitate to ask if you need further details. With my best regards, -- Sébastien. PS: In case you're curious, roughly said, two main things needs to be done: 1. being able to provide a generic way of supplying your own PKs values when inserting new objects, cf. DBContext.prepareForSaveWithCoordinator() calling AdaptorChannel.primaryKeysForNewRowsWithEntity(), that's where we eed to define a delegate for handling the cases where the PKs are not automatically generated (that's true for simple PK btw) 2. testing that everything works okay with compound PKs: automatic traversal of 1-1 & 1-to-many relationships, searching w/ paterns, generation of complex SQL queries based on long KeyValuePath, updating and deleting objects, etc. This is probably the more complex task, since it requires a new schema for testing the features. Wolfgang Keller a écrit : > Hello, > > finally I got around to learn enough of Python to be able to start learning Modeling... :-) > > ...but the documentation (which is well done, btw.) says that Modeling doesn't support composite primary keys. X-( This would be a show-stopper for real-world applications in my case, as my datamodels (in fact they are not mine but "industry standards", because I'm too lazy to make my own ones ;-)) are all about "real world things" and thus for a reasonable identification schema surrogate keys are a no-no... > > TIA, > > Sincerely, > > Wolfgang Keller > |
From: Wolfgang K. <fel...@gm...> - 2007-10-19 11:20:41
|
Hello, finally I got around to learn enough of Python to be able to start learning Modeling... :-) ...but the documentation (which is well done, btw.) says that Modeling doesn't support composite primary keys. X-( This would be a show-stopper for real-world applications in my case, as my datamodels (in fact they are not mine but "industry standards", because I'm too lazy to make my own ones ;-)) are all about "real world things" and thus for a reasonable identification schema surrogate keys are a no-no... TIA, Sincerely, Wolfgang Keller -- GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail |
From:
<sbi...@us...> - 2006-10-09 16:17:44
|
Sorry for the very late answer, for an unknown reason I did not see your = post. > Well, I can forbid that for the main database of my application. > =20 >> - optimistic locking: you'll get notifications when saving changes, >=20 > How does this work? I was thinking of a delegate method being called by saveChanges() when it= notices that changes have happened in the database since the last time t= he DB was queried (meaning that someone else has modified the db). The delegate will receive a full view of observed modifications: the prop= erties that have changed (attributes+relationships), objects that have be= en deleted. With this information any possible processing is possible: c= ustom fusion of local+db modifications, notifying the user of a conflict = and asking him how to solve it, ignoring changes and overriding the db ch= anges, any combination of the previous solutions... In any case, the dele= gate will decide whether the transaction opened by saveChanges() should b= e cancelled for real or re-submitted after conflicts have been solved. -- S=E9bastien. Wolfgang Keller wrote: >> But, given that pessimistic locking locks any data that is going to be= =20 >> updated, if your application is transaction-intensive updating the sam= e data,=20 >=20 >> you'll get a lot of processes waiting at the same time. >=20 > "Waiting for Godot" >=20 > Or, as users of SAP call it in German; "Sanduhr-Anzeige-Programm" -=20 > Hourglass-Display-Program. >:-> > =20 >> it won't even help if the framework had something like a central serve= r on=20 >> top of the db & shared among different processes since the data still = can=20 >> be updated directly at the database level by any other process.=20 >=20 > Well, I can forbid that for the main database of my application. > =20 >> - optimistic locking: you'll get notifications when saving changes, >=20 > How does this work? >=20 >> giving you the opportunity to examine the change and, e.g., automatica= lly=20 >> handle them or provide feedback to the user.=20 >=20 > That would be what I am looking for. >=20 > Sincerely, >=20 > Wolfgang Keller >=20 |
From: Wolfgang K. <wol...@gm...> - 2006-09-27 11:55:12
|
> But, given that pessimistic locking locks any data that is going to be > updated, if your application is transaction-intensive updating the same data, > you'll get a lot of processes waiting at the same time. "Waiting for Godot" Or, as users of SAP call it in German; "Sanduhr-Anzeige-Programm" - Hourglass-Display-Program. >:-> > it won't even help if the framework had something like a central server on > top of the db & shared among different processes since the data still can > be updated directly at the database level by any other process. Well, I can forbid that for the main database of my application. > - optimistic locking: you'll get notifications when saving changes, How does this work? > giving you the opportunity to examine the change and, e.g., automatically > handle them or provide feedback to the user. That would be what I am looking for. Sincerely, Wolfgang Keller -- My email-address is correct. Do NOT remove ".nospam" to reply. |
From:
<sbi...@us...> - 2006-09-23 09:22:37
|
Wolfgang Keller wrote: [...] >> Explicit database-locking would be called Pessimlistic Locking, where=20 >> modifying an object implies acquiring a lock on the corresponding data= base=20 >> column(s) until changes are saved (or discarded). This feature is on = the=20 >> TODO list, but development has not started yet. >=20 > Any realistic estimate when it will be available? >=20 > In a transaction-intensive application, not having pessimistic locking = will=20 > mean getting lots of transaction failures, I guess? And lots of handwor= k to=20 > clean up afterwards... You're right, if the application is very busy, you'll get a lot of failur= es. However, it's really application-specific: if most conflicts can be progr= ammatically solved your application will softly behave under optimistic l= ocking; if not, agreed, pessimistic locking is needed. But, given that pessimistic locking locks any data that is going to be up= dated, if your application is transaction-intensive updating the same dat= a, you'll get a lot of processes waiting at the same time. To answer your question, no idea on a ETA for pessimistic locking --we've= not started implementing it. > What I am in fact looking for is something that allows transactions at = the=20 > object level to be as ACID as PostgreSQL transactions at the database l= evel. >=20 > Am I just dreaming? No you're not: the framework bring the ACI properties at the object-level= , and the Durability property on standard (non-nested) EditingContexts. http://modeling.sourceforge.net/UserGuide/nested-editing-context.html http://modeling.sourceforge.net/UserGuide/nested-ec-ACI.html However, I understand what you mean here; you must be thinking of transac= tions being ACID when opened at the object level "down to the database". = But we're not at the same level; it won't even help if the framework had= something like a central server on top of the db & shared among differen= t processes since the data still can be updated directly at the database = level by any other process. That must be the reason for wanting pessimistic locking. The pb. with pes= simistic is that a transaction at the object level are likely to last muc= h longer than standard SQL transactions (following the different steps of= updating data through numerous web pages for example), so in the meantim= e, all other app. are denied starting any updates. Well, I'll stop here, but if you really need to deal with concurrent upda= tes of the same data I'll summarize the siuation: - no locking (for now, the default): concurrent updates override previous= changes, not even detecting that another process has changed the data (p= lease note the framework DO broadcast changes between threads) - optimistic locking: you'll get notifications when saving changes, givin= g you the opportunity to examine the change and, e.g., automatically hand= le them or provide feedback to the user. As explained in a previous post= , implementation has started: despite some limitations (w/ nested ECs and= the handling of deleted objects as well), it is in a sable state. - pessimistic locking: locks rows before updating objects' attributes. No= t started yet. You may want to bypass the lack of this feature by impl. y= our own, simple, locking mechanism. For example, by overriding willChange= () [ http://modeling.sourceforge.net/UserGuide/node75.html ] and acquiri= ng a global lock in the database --agreed, this is simple, but locking s= pecific rows (using info. of their GlobalID) needs a lot of care to avoid= deadlocks. -- S=E9bastien. |
From: Wolfgang K. <wol...@gm...> - 2006-09-18 12:46:01
|
>> Is the possibility to rollback changes on the roadmap of Modeling? This is >> for the case where several instances of an application using modeling run >> in >> parallel at different sites, and a transaction needs to be distributed over >> more than one instance of the application... > > I'm not sure to understand what you mean by "a transaction needs to be > distributed over more than one instance". Well, a distributed transaction. Two database servers, two applications, one application on each server, both applications use modeling for persistence and are connected to each other through RPC. But I figured out that it will be more efficient to simply link the underlying databases with multi-master replication instead of doing it at the application level. So don't bother for my stupid question... > Explicit database-locking would be called Pessimlistic Locking, where > modifying an object implies acquiring a lock on the corresponding database > column(s) until changes are saved (or discarded). This feature is on the > TODO list, but development has not started yet. Any realistic estimate when it will be available? In a transaction-intensive application, not having pessimistic locking will mean getting lots of transaction failures, I guess? And lots of handwork to clean up afterwards... What I am in fact looking for is something that allows transactions at the object level to be as ACID as PostgreSQL transactions at the database level. Am I just dreaming? TIA, SIncerely, Wolfgang Keller -- My email-address is correct. Do NOT remove ".nospam" to reply. |
From:
<sbi...@us...> - 2006-09-12 10:14:10
|
Hi Wolgang & all, Wolfgang Keller wrote: > Hello, >=20 > just out of curiosity: >=20 > Is the possibility to rollback changes on the roadmap of Modeling? This= is=20 > for the case where several instances of an application using modeling r= un in=20 > parallel at different sites, and a transaction needs to be distributed = over=20 > more than one instance of the application... I'm not sure to understand what you mean by "a transaction needs to be di= stributed over more than one instance". If what follows doers not answer = your question, or if you need further explanations, please do not hesitat= e to ask. For the moment being, an EditingContext (EC) is the abstraction, at the o= bject level, of a transaction. One EC, one transaction, that can be commi= tted (hence, producing a transaction at the database level), or rolled ba= ck. You can also have sub-tranbsactions at the object level (see http://= modeling.sourceforge.net/UserGuide/nested-editing-context.html). Now as far as I understand it, your next question is about concurrent mod= ifications in different ECs. That can happen: in the same process, differ= ent threads, or in different processes --see below. > And, what would happen in Modeling if a different application, which do= es not=20 > pass through Modeling, but connects directly to the underlying database= ,=20 > modifies records in this database? Does Modeling go so far and notice w= hen a=20 > lock on a record is acquired by a different application, lock the=20 > corresponding object in memory, and then update the objects in memory w= ith=20 > the changes the other applications makes to the database? Or is such a=20 > function totally utopian? *duck* The features you ask for is partially addressed by a patch described here= : http://permalink.gmane.org/gmane.comp.python.modeling/374 although that they are addressed in a different but (imho) equivalent way= , as described below. With this patch: - an EditingContext saving changes broadcasts its changes to others, who = in turn merge the committed changes with their own, uncommitted, changes. (for now, this only works within the same process, with e.g. ECs dispatch= ed in different threads, but NOT for ECs that are created in different pr= ocesses) - if, as you described, an external application changes some database val= ues, any EC saving its changes will receive an OptimisticLockingFailure e= xception when trying to save changes on some of the externally modified d= atas. In this case: external application=3D=3Dan other process; it can be anyth= ing modifying the db, and particularly: an other application using the mo= deling framework. This is obviously the first step, in further development the externally m= odified objects would be sent back to the EC so that you can choose to re= fresh the values, examine the differences and accept or discard the chang= es. Explicit database-locking would be called Pessimlistic Locking, where mod= ifying an object implies acquiring a lock on the corresponding database c= olumn(s) until changes are saved (or discarded). This feature is on the = TODO list, but development has not started yet. -- S=E9bastien. Wolfgang Keller wrote: > Hello, >=20 > just out of curiosity: >=20 > Is the possibility to rollback changes on the roadmap of Modeling? This= is=20 > for the case where several instances of an application using modeling r= un in=20 > parallel at different sites, and a transaction needs to be distributed = over=20 > more than one instance of the application... >=20 > And, what would happen in Modeling if a different application, which do= es not=20 > pass through Modeling, but connects directly to the underlying database= ,=20 > modifies records in this database? Does Modeling go so far and notice w= hen a=20 > lock on a record is acquired by a different application, lock the=20 > corresponding object in memory, and then update the objects in memory w= ith=20 > the changes the other applications makes to the database? Or is such a=20 > function totally utopian? *duck* >=20 > TIA, >=20 > Sincerely, >=20 > Wolfgang Keller >=20 |
From: Wolfgang K. <wol...@gm...> - 2006-09-10 23:03:16
|
Hello, just out of curiosity: Is the possibility to rollback changes on the roadmap of Modeling? This is for the case where several instances of an application using modeling run in parallel at different sites, and a transaction needs to be distributed over more than one instance of the application... And, what would happen in Modeling if a different application, which does not pass through Modeling, but connects directly to the underlying database, modifies records in this database? Does Modeling go so far and notice when a lock on a record is acquired by a different application, lock the corresponding object in memory, and then update the objects in memory with the changes the other applications makes to the database? Or is such a function totally utopian? *duck* TIA, Sincerely, Wolfgang Keller -- My email-address is correct. Do NOT remove ".nospam" to reply. |
From: <pms...@so...> - 2006-07-31 18:18:47
|
Hi again, Thanks a lot! I am sorry for this late feedback, but I have been on holiday :-) I will look into it as soon as I get the time and get back to you at the earliest convenience. Best, Paul Sébastien Bigaret wrote: > Hi Paul & all, > > Thanks for the detailed report. > > Now I can see the problem. It is, in fact, not related to parent/child EC in particular, but to a more general problem, as described at: > http://modeling.sourceforge.net/UserGuide/framework-integration-sessioning-ec.html > > Just after 0.9 I posted a first patch partially correcting the problem, see the post here: > http://thread.gmane.org/gmane.comp.python.modeling/374/focus=374 > > I'll have some time next week-end to test it in your configuration; if you find some time in the meantime to test it I'll be glad to read your experience :) > > Thanks again for the report, and hopefully the patch will be tested enough to be integrated into the framework soon. > > Cheers, > > -- Sébastien. > > > pms...@so... a écrit : >> Please ignore the previous reply, it was only partly completed; I had a >> little keyboard shortcut accident :-) >> >> Hi Sébastien, >> >> The test you mention run fine here, but still I get no changes in the >> child in the following example, maybe I am doing something weird here. >> Thanks a lot for looking into this :-) >> >> Cheers, >> Paul >> >> >> EXAMPLE >> ======= >> >> pymodel_parentchild.py >> ---------------------------------------------------------------------------- >> from Modeling.PyModel import * >> >> Association.defaults['delete'] = ['nullify', 'nullify'] >> Entity.defaults['properties'] = [] >> >> model = Model('parentchild', version='0.1') >> model.associations = [] >> model.entities = [ >> >> Entity('Person', >> properties = [ >> APrimaryKey('uid', >> isClassProperty=0, >> isRequired=1, doc='PK'), >> AString('first_name', width=60), >> AString('last_name', width=60), >> ], >> ), >> >> ] >> ---------------------------------------------------------------------------- >> >> >> Person.py >> ---------------------------------------------------------------------------- >> from Modeling import dynamic >> __metaclass__ = dynamic.CustomObjectMeta >> >> class Person: >> entityName = 'Person' >> mdl_define_properties = 1 >> ---------------------------------------------------------------------------- >> >> >> >> test_parentchild.py >> ---------------------------------------------------------------------------- >> from parentchild.Person import Person >> from Modeling.EditingContext import EditingContext as EC >> >> parent_ec = EC() >> child_ec = EC(parent_ec) >> >> def populate(ec): >> ec.insert(Person(first_name='Anna', last_name='Anderson')) >> >> def result(): >> global parent_ec, child_ec >> >> print "PARENT:", >> for p in parent_ec.fetch('Person'): print p.first_name, >> p.last_name, >> print >> print "CHILD :", >> for p in child_ec.fetch('Person'): print p.first_name, p.last_name, >> print >> print >> >> print "POPULATING AND SAVING CHANGES" >> populate(parent_ec) >> #parent_ec.processRecentChanges() >> parent_ec.saveChanges() >> >> result() >> >> print "CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES" >> anna = parent_ec.fetch('Person', 'first_name=="Anna"')[0] >> anna.first_name = 'anna' >> #parent_ec.processRecentChanges() >> parent_ec.saveChanges() >> >> result() >> ---------------------------------------------------------------------------- >> >> >> OUTPUT FROM TEST >> ------------------------------------------------------------ >> POPULATING AND SAVING CHANGES >> PARENT: Anna Anderson >> CHILD : Anna Anderson >> >> CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES >> PARENT: anna Anderson >> CHILD : Anna Anderson >> ------------------------------------------------------------ >> >> >> >> >> Sébastien Bigaret wrote: >>> Hi Paul & all, >>> >>> pms...@so... wrote: >>> [...] >>>> However, I can't quite get what is meant by the sentence: >>>> >>>> - the states of the objects in the result set will reflect any changes >>>> made to them in the parent object store, even the uncommitted ones. >>>> >>>> From testing, when I change an object held by the parent EC, and then >>>> do a fetch on that object in the child, the change is not shown in the >>>> object held by the child EC. >>> Your understanding is correct, and the changes should appear in the child context. If they are not, it is definitely a bug. >>> >>> Could you please send me your example, where the bug appear? This is something I did not observe from now on, and I'll be glad to examine and fix it. >>> >>> Cheers, >>> >>> -- Sébastien. >>> >>> >>> PS: Oh, BTW, this is tested in tests/test_EditingContext_ParentChildpy, method test_03_fetchedAndModifiedObjectsInParent() >>> >>> pms...@so... a écrit : >>>> Hi all, >>>> >>>> I am reading chapter "5.2 Declaring and using a nested EditingContext" >>>> in the user guide on the web: >>>> >>>> http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html >>>> >>>> I understand and can verify by testing (I am using modeling release 0.9) >>>> that: >>>> >>>> 1. Inserting an object in the parent EC will show up in a fetch in the >>>> child EC. >>>> >>>> 2. Deleting an object in the parent EC deletes it from the result set in >>>> the child EC. >>>> >>>> However, I can't quite get what is meant by the sentence: >>>> >>>> - the states of the objects in the result set will reflect any changes >>>> made to them in the parent object store, even the uncommitted ones. >>>> >>>> From testing, when I change an object held by the parent EC, and then >>>> do a fetch on that object in the child, the change is not shown in the >>>> object held by the child EC. >>>> >>>> Can anyone get me on the right track here? >>>> >>>> And last, but not least, thanks for all the work on this magnificent >>>> framework :-) >>>> >>>> Cheers >>>> Paul >>>> >>>> Using Tomcat but need to do more? Need to support web services, security? >>>> Get stuff done quickly with pre-integrated technology to make your job easier >>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >>>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >>>> _______________________________________________ >>>> Modeling-users mailing list >>>> Mod...@li... >>>> https://lists.sourceforge.net/lists/listinfo/modeling-users >>>> >>>> >> >> ------------------------------------------------------------------------- >> Using Tomcat but need to do more? Need to support web services, security? >> Get stuff done quickly with pre-integrated technology to make your job easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Modeling-users mailing list >> Mod...@li... >> https://lists.sourceforge.net/lists/listinfo/modeling-users >> >> > |
From:
<sbi...@us...> - 2006-07-12 12:34:06
|
Hi Paul & all, Thanks for the detailed report. Now I can see the problem. It is, in fact, not related to parent/child EC= in particular, but to a more general problem, as described at: http://modeling.sourceforge.net/UserGuide/framework-integration-sessionin= g-ec.html Just after 0.9 I posted a first patch partially correcting the problem, s= ee the post here: http://thread.gmane.org/gmane.comp.python.modeling/374/focus=3D374 I'll have some time next week-end to test it in your configuration; if yo= u find some time in the meantime to test it I'll be glad to read your exp= erience :) =20 Thanks again for the report, and hopefully the patch will be tested enoug= h to be integrated into the framework soon. Cheers, -- S=E9bastien. pms...@so... a =E9crit : > Please ignore the previous reply, it was only partly completed; I had a= =20 > little keyboard shortcut accident :-) >=20 > Hi S=E9bastien, >=20 > The test you mention run fine here, but still I get no changes in the=20 > child in the following example, maybe I am doing something weird here.=20 > Thanks a lot for looking into this :-) >=20 > Cheers, > Paul >=20 >=20 > EXAMPLE > =3D=3D=3D=3D=3D=3D=3D >=20 > pymodel_parentchild.py > -----------------------------------------------------------------------= ----- > from Modeling.PyModel import * >=20 > Association.defaults['delete'] =3D ['nullify', 'nullify'] > Entity.defaults['properties'] =3D [] >=20 > model =3D Model('parentchild', version=3D'0.1') > model.associations =3D [] > model.entities =3D [ >=20 > Entity('Person', > properties =3D [ > APrimaryKey('uid', > isClassProperty=3D0, > isRequired=3D1, doc=3D'PK'), > AString('first_name', width=3D60), > AString('last_name', width=3D60), > ], > ), >=20 > ] > -----------------------------------------------------------------------= ----- >=20 >=20 > Person.py > -----------------------------------------------------------------------= ----- > from Modeling import dynamic > __metaclass__ =3D dynamic.CustomObjectMeta >=20 > class Person: > entityName =3D 'Person' > mdl_define_properties =3D 1 > -----------------------------------------------------------------------= ----- >=20 >=20 >=20 > test_parentchild.py > -----------------------------------------------------------------------= ----- > from parentchild.Person import Person > from Modeling.EditingContext import EditingContext as EC >=20 > parent_ec =3D EC() > child_ec =3D EC(parent_ec) >=20 > def populate(ec): > ec.insert(Person(first_name=3D'Anna', last_name=3D'Anderson')) >=20 > def result(): > global parent_ec, child_ec >=20 > print "PARENT:", > for p in parent_ec.fetch('Person'): print p.first_name,=20 > p.last_name, > print > print "CHILD :", > for p in child_ec.fetch('Person'): print p.first_name, p.last_= name, > print > print >=20 > print "POPULATING AND SAVING CHANGES" > populate(parent_ec) > #parent_ec.processRecentChanges() > parent_ec.saveChanges() >=20 > result() >=20 > print "CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES" > anna =3D parent_ec.fetch('Person', 'first_name=3D=3D"Anna"')[0] > anna.first_name =3D 'anna' > #parent_ec.processRecentChanges() > parent_ec.saveChanges() >=20 > result() > -----------------------------------------------------------------------= ----- >=20 >=20 > OUTPUT FROM TEST > ------------------------------------------------------------ > POPULATING AND SAVING CHANGES > PARENT: Anna Anderson > CHILD : Anna Anderson >=20 > CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES > PARENT: anna Anderson > CHILD : Anna Anderson > ------------------------------------------------------------ >=20 >=20 >=20 >=20 > S=E9bastien Bigaret wrote: >> Hi Paul & all, >> >> pms...@so... wrote: >> [...] >>> However, I can't quite get what is meant by the sentence: >>> >>> - the states of the objects in the result set will reflect any chan= ges=20 >>> made to them in the parent object store, even the uncommitted ones. >>> >>> From testing, when I change an object held by the parent EC, and the= n=20 >>> do a fetch on that object in the child, the change is not shown in th= e=20 >>> object held by the child EC. >> Your understanding is correct, and the changes should appear in the ch= ild context. If they are not, it is definitely a bug. >> >> Could you please send me your example, where the bug appear? This is = something I did not observe from now on, and I'll be glad to examine and = fix it. >> >> Cheers, >> >> -- S=E9bastien. >> >> >> PS: Oh, BTW, this is tested in tests/test_EditingContext_ParentChildpy= , method test_03_fetchedAndModifiedObjectsInParent() >> >> pms...@so... a =E9crit : >>> Hi all, >>> >>> I am reading chapter "5.2 Declaring and using a nested EditingContext= "=20 >>> in the user guide on the web: >>> >>> http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html >>> >>> I understand and can verify by testing (I am using modeling release 0= .9)=20 >>> that: >>> >>> 1. Inserting an object in the parent EC will show up in a fetch in th= e=20 >>> child EC. >>> >>> 2. Deleting an object in the parent EC deletes it from the result set= in=20 >>> the child EC. >>> >>> However, I can't quite get what is meant by the sentence: >>> >>> - the states of the objects in the result set will reflect any chan= ges=20 >>> made to them in the parent object store, even the uncommitted ones. >>> >>> From testing, when I change an object held by the parent EC, and the= n=20 >>> do a fetch on that object in the child, the change is not shown in th= e=20 >>> object held by the child EC. >>> >>> Can anyone get me on the right track here? >>> >>> And last, but not least, thanks for all the work on this magnificent=20 >>> framework :-) >>> >>> Cheers >>> Paul >>> >>> Using Tomcat but need to do more? Need to support web services, secur= ity? >>> Get stuff done quickly with pre-integrated technology to make your jo= b easier >>> Download IBM WebSphere Application Server v.1.0.1 based on Apache Ger= onimo >>> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&d= at=3D121642 >>> _______________________________________________ >>> Modeling-users mailing list >>> Mod...@li... >>> https://lists.sourceforge.net/lists/listinfo/modeling-users >>> >>> >=20 >=20 > -----------------------------------------------------------------------= -- > Using Tomcat but need to do more? Need to support web services, securit= y? > Get stuff done quickly with pre-integrated technology to make your job = easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geron= imo > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > Modeling-users mailing list > Mod...@li... > https://lists.sourceforge.net/lists/listinfo/modeling-users >=20 >=20 |
From: <pms...@so...> - 2006-07-09 12:32:16
|
Please ignore the previous reply, it was only partly completed; I had a little keyboard shortcut accident :-) Hi Sébastien, The test you mention run fine here, but still I get no changes in the child in the following example, maybe I am doing something weird here. Thanks a lot for looking into this :-) Cheers, Paul EXAMPLE ======= pymodel_parentchild.py ---------------------------------------------------------------------------- from Modeling.PyModel import * Association.defaults['delete'] = ['nullify', 'nullify'] Entity.defaults['properties'] = [] model = Model('parentchild', version='0.1') model.associations = [] model.entities = [ Entity('Person', properties = [ APrimaryKey('uid', isClassProperty=0, isRequired=1, doc='PK'), AString('first_name', width=60), AString('last_name', width=60), ], ), ] ---------------------------------------------------------------------------- Person.py ---------------------------------------------------------------------------- from Modeling import dynamic __metaclass__ = dynamic.CustomObjectMeta class Person: entityName = 'Person' mdl_define_properties = 1 ---------------------------------------------------------------------------- test_parentchild.py ---------------------------------------------------------------------------- from parentchild.Person import Person from Modeling.EditingContext import EditingContext as EC parent_ec = EC() child_ec = EC(parent_ec) def populate(ec): ec.insert(Person(first_name='Anna', last_name='Anderson')) def result(): global parent_ec, child_ec print "PARENT:", for p in parent_ec.fetch('Person'): print p.first_name, p.last_name, print print "CHILD :", for p in child_ec.fetch('Person'): print p.first_name, p.last_name, print print print "POPULATING AND SAVING CHANGES" populate(parent_ec) #parent_ec.processRecentChanges() parent_ec.saveChanges() result() print "CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES" anna = parent_ec.fetch('Person', 'first_name=="Anna"')[0] anna.first_name = 'anna' #parent_ec.processRecentChanges() parent_ec.saveChanges() result() ---------------------------------------------------------------------------- OUTPUT FROM TEST ------------------------------------------------------------ POPULATING AND SAVING CHANGES PARENT: Anna Anderson CHILD : Anna Anderson CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES PARENT: anna Anderson CHILD : Anna Anderson ------------------------------------------------------------ Sébastien Bigaret wrote: > Hi Paul & all, > > pms...@so... wrote: > [...] >> However, I can't quite get what is meant by the sentence: >> >> - the states of the objects in the result set will reflect any changes >> made to them in the parent object store, even the uncommitted ones. >> >> From testing, when I change an object held by the parent EC, and then >> do a fetch on that object in the child, the change is not shown in the >> object held by the child EC. > > Your understanding is correct, and the changes should appear in the child context. If they are not, it is definitely a bug. > > Could you please send me your example, where the bug appear? This is something I did not observe from now on, and I'll be glad to examine and fix it. > > Cheers, > > -- Sébastien. > > > PS: Oh, BTW, this is tested in tests/test_EditingContext_ParentChildpy, method test_03_fetchedAndModifiedObjectsInParent() > > pms...@so... a écrit : >> Hi all, >> >> I am reading chapter "5.2 Declaring and using a nested EditingContext" >> in the user guide on the web: >> >> http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html >> >> I understand and can verify by testing (I am using modeling release 0.9) >> that: >> >> 1. Inserting an object in the parent EC will show up in a fetch in the >> child EC. >> >> 2. Deleting an object in the parent EC deletes it from the result set in >> the child EC. >> >> However, I can't quite get what is meant by the sentence: >> >> - the states of the objects in the result set will reflect any changes >> made to them in the parent object store, even the uncommitted ones. >> >> From testing, when I change an object held by the parent EC, and then >> do a fetch on that object in the child, the change is not shown in the >> object held by the child EC. >> >> Can anyone get me on the right track here? >> >> And last, but not least, thanks for all the work on this magnificent >> framework :-) >> >> Cheers >> Paul >> >> Using Tomcat but need to do more? Need to support web services, security? >> Get stuff done quickly with pre-integrated technology to make your job easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Modeling-users mailing list >> Mod...@li... >> https://lists.sourceforge.net/lists/listinfo/modeling-users >> >> > |
From: <pms...@so...> - 2006-07-09 12:22:51
|
Hi Sébastien, The test you mention run fine here, but still I get no changes in the child in the following example: pymodel_parentchild.py ---------------------------------------------------------------------------- from Modeling.PyModel import * Association.defaults['delete'] = ['nullify', 'nullify'] Entity.defaults['properties'] = [] model = Model('parentchild', version='0.1') model.associations = [] model.entities = [ Entity('Person', properties = [ APrimaryKey('uid', isClassProperty=0, isRequired=1, doc='PK'), # AString('first_name', width=60), AString('last_name', width=60), ], ), ] ---------------------------------------------------------------------------- Person.py ---------------------------------------------------------------------------- TEST ---------------------------------------------------------------------------- from parentchild.Person import Person from Modeling.EditingContext import EditingContext as EC parent_ec = EC() child_ec = EC(parent_ec) def populate(ec): ec.insert(Person(first_name='Anna', last_name='Anderson')) def result(): global parent_ec, child_ec print "PARENT:", for p in parent_ec.fetch('Person'): print p.first_name, p.last_name, print print "CHILD :", for p in child_ec.fetch('Person'): print p.first_name, p.last_name, print print print "POPULATING AND SAVING CHANGES" populate(parent_ec) #parent_ec.processRecentChanges() parent_ec.saveChanges() result() print "CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES" anna = parent_ec.fetch('Person', 'first_name=="Anna"')[0] anna.first_name = 'anna' #parent_ec.processRecentChanges() parent_ec.saveChanges() result() ---------------------------------------------------------------------------- OUTPUT FROM TEST ------------------------------------------------------------ POPULATING AND SAVING CHANGES PARENT: Anna Anderson CHILD : Anna Anderson CHANGING 'Anna' --> 'anna' in parent AND SAVING CHANGES PARENT: anna Anderson CHILD : Anna Anderson ------------------------------------------------------------ Sébastien Bigaret wrote: > Hi Paul & all, > > pms...@so... wrote: > [...] >> However, I can't quite get what is meant by the sentence: >> >> - the states of the objects in the result set will reflect any changes >> made to them in the parent object store, even the uncommitted ones. >> >> From testing, when I change an object held by the parent EC, and then >> do a fetch on that object in the child, the change is not shown in the >> object held by the child EC. > > Your understanding is correct, and the changes should appear in the child context. If they are not, it is definitely a bug. > > Could you please send me your example, where the bug appear? This is something I did not observe from now on, and I'll be glad to examine and fix it. > > Cheers, > > -- Sébastien. > > > PS: Oh, BTW, this is tested in tests/test_EditingContext_ParentChildpy, method test_03_fetchedAndModifiedObjectsInParent() > > pms...@so... a écrit : >> Hi all, >> >> I am reading chapter "5.2 Declaring and using a nested EditingContext" >> in the user guide on the web: >> >> http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html >> >> I understand and can verify by testing (I am using modeling release 0.9) >> that: >> >> 1. Inserting an object in the parent EC will show up in a fetch in the >> child EC. >> >> 2. Deleting an object in the parent EC deletes it from the result set in >> the child EC. >> >> However, I can't quite get what is meant by the sentence: >> >> - the states of the objects in the result set will reflect any changes >> made to them in the parent object store, even the uncommitted ones. >> >> From testing, when I change an object held by the parent EC, and then >> do a fetch on that object in the child, the change is not shown in the >> object held by the child EC. >> >> Can anyone get me on the right track here? >> >> And last, but not least, thanks for all the work on this magnificent >> framework :-) >> >> Cheers >> Paul >> >> Using Tomcat but need to do more? Need to support web services, security? >> Get stuff done quickly with pre-integrated technology to make your job easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Modeling-users mailing list >> Mod...@li... >> https://lists.sourceforge.net/lists/listinfo/modeling-users >> >> > |
From:
<sbi...@us...> - 2006-07-05 14:53:49
|
Hi Paul & all, pms...@so... wrote: [...] > However, I can't quite get what is meant by the sentence: >=20 > - the states of the objects in the result set will reflect any change= s=20 > made to them in the parent object store, even the uncommitted ones. >=20 > From testing, when I change an object held by the parent EC, and then=20 > do a fetch on that object in the child, the change is not shown in the=20 > object held by the child EC. Your understanding is correct, and the changes should appear in the child= context. If they are not, it is definitely a bug. Could you please send me your example, where the bug appear? This is som= ething I did not observe from now on, and I'll be glad to examine and fix= it. Cheers, -- S=E9bastien. PS: Oh, BTW, this is tested in tests/test_EditingContext_ParentChildpy, m= ethod test_03_fetchedAndModifiedObjectsInParent() pms...@so... a =E9crit : > Hi all, >=20 > I am reading chapter "5.2 Declaring and using a nested EditingContext"=20 > in the user guide on the web: >=20 > http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html >=20 > I understand and can verify by testing (I am using modeling release 0.9= )=20 > that: >=20 > 1. Inserting an object in the parent EC will show up in a fetch in the=20 > child EC. >=20 > 2. Deleting an object in the parent EC deletes it from the result set i= n=20 > the child EC. >=20 > However, I can't quite get what is meant by the sentence: >=20 > - the states of the objects in the result set will reflect any change= s=20 > made to them in the parent object store, even the uncommitted ones. >=20 > From testing, when I change an object held by the parent EC, and then=20 > do a fetch on that object in the child, the change is not shown in the=20 > object held by the child EC. >=20 > Can anyone get me on the right track here? >=20 > And last, but not least, thanks for all the work on this magnificent=20 > framework :-) >=20 > Cheers > Paul >=20 > Using Tomcat but need to do more? Need to support web services, securit= y? > Get stuff done quickly with pre-integrated technology to make your job = easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geron= imo > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > Modeling-users mailing list > Mod...@li... > https://lists.sourceforge.net/lists/listinfo/modeling-users >=20 >=20 |
From: <pms...@so...> - 2006-06-28 11:59:43
|
Hi all, I am reading chapter "5.2 Declaring and using a nested EditingContext" in the user guide on the web: http://modeling.sourceforge.net/UserGuide/nested-ec-usage.html I understand and can verify by testing (I am using modeling release 0.9) that: 1. Inserting an object in the parent EC will show up in a fetch in the child EC. 2. Deleting an object in the parent EC deletes it from the result set in the child EC. However, I can't quite get what is meant by the sentence: - the states of the objects in the result set will reflect any changes made to them in the parent object store, even the uncommitted ones. From testing, when I change an object held by the parent EC, and then do a fetch on that object in the child, the change is not shown in the object held by the child EC. Can anyone get me on the right track here? And last, but not least, thanks for all the work on this magnificent framework :-) Cheers Paul |
From:
<sbi...@us...> - 2006-04-17 12:12:09
|
Hi Paul and all, Paul Mylchreest wrote: > On 13-Mar-06, at 03:32 , S=E9bastien Bigaret wrote: >>> The only thing missing is notification of >>> changes between EC's and was wondering if you have had any requests f= or >>> this? >> >> No, not yet; do you think you could have some time testing the feature >> if we go for it? >> > > Yes. Ok, so I've updated and verified patch 911567, so that it can be applied to release 0.9. You'll find it at: https://sourceforge.net/tracker/index.php?func=3Ddetail&aid=3D911567&grou= p_id=3D58935&atid=3D489337 With this patch, every changes made in an EC is propagated to other ECs after these changes have been successfully committed into the database. The process is the following: - the EC that has committed changes to the db broadcasts the changes to the other ECs, Ex: object 'Person' p1 has been saved with a new value for p1.nickname - every EC receiving the notification examines the changes. - for every updated object, it merges the changes: 1. determine the uncommitted changes locally made to that object (Ex.: same object 'Person' p1.age has a new value) 2. apply the committed changes (Ex.: p1.nickname is updated) 3. make sure that local uncommitted changes are re-applied, if necessary (Ex.: p1.age should have the same value as in step 1., whatever changes were committed to the db) Please note that deleted objects are not yet handled. You can also have a look at the supplied unittests for more details. -- S=E9bastien. |
From: Paul M. <pau...@ma...> - 2006-03-13 10:09:45
|
Hello S=E9bastien, On 13-Mar-06, at 03:32 , S=E9bastien Bigaret wrote: > Paul Mylchreest wrote: >> Salut S=E9bastien, >> > [...] >> I'm using the "pound" load balancer. It has a feature that allows to >> redirect requests to a zeoclient on per session basis (by IP or =20 >> user), >> thus solving that problem. > > Good to know there is a simple solution for this. I'll add it in the > documentation as well. > > If you don't mind, I'll probably ask you privately about some more > details about the pound setup when I'm writing the documentation =20 > for this. > Certainly, I would be glad to give any details about that. > [ For the archives: I've found pound at: http://www.apsis.ch/pound ] > >> The only thing missing is notification of >> changes between EC's and was wondering if you have had any =20 >> requests for >> this? > > No, not yet; do you think you could have some time testing the feature > if we go for it? > Yes. Cheers, Paul |
From:
<sbi...@us...> - 2006-03-13 08:35:12
|
Paul Mylchreest wrote: > Salut S=E9bastien, >=20 [...] > I'm using the "pound" load balancer. It has a feature that allows to > redirect requests to a zeoclient on per session basis (by IP or user), > thus solving that problem. Good to know there is a simple solution for this. I'll add it in the documentation as well. If you don't mind, I'll probably ask you privately about some more details about the pound setup when I'm writing the documentation for this. [ For the archives: I've found pound at: http://www.apsis.ch/pound ] > The only thing missing is notification of > changes between EC's and was wondering if you have had any requests for > this? No, not yet; do you think you could have some time testing the feature if we go for it? Cheers, -- S=E9bastien. |
From: Paul M. <pau...@ma...> - 2006-03-08 17:55:02
|
Salut S=E9bastien, On 4-Mar-06, at 08:25 , S=E9bastien Bigaret wrote: > Now of course, if you can make sure that a given session is always > served by the same zeoclient, then you'll get back the "full power" of > having a session-EC, with pending (uncommitted) changes crossing the > page requests. But I do not know if this is possible w/ zope/zeo. > I'm using the "pound" load balancer. It has a feature that allows to =20 redirect requests to a zeoclient on per session basis (by IP or =20 user), thus solving that problem. The only thing missing is =20 notification of changes between EC's and was wondering if you have =20 had any requests for this? > I hope I managed to be clear in my explanations. And I'll add a > paragraph making this explicit in the documentation. > Yes. Thanks for clearing this up. Your explanation was very clear. Cheers, Paul, |
From:
<sbi...@us...> - 2006-03-04 13:26:41
|
Paul Mylchreest a =E9crit : > Hi again, >=20 > I applied the patch and here are the logs (I deleted the registered > callback): [...] Ok, thanks > Also, when tracing defaultEditingContext(), each server seems to return > a different EC. >=20 > Server1: session.id: 11414313110001400458 ec: > <Modeling.EditingContext.EditingContext object at 0x284b0f0> > Server2: session.id: 11414313110001400458 ec: > <Modeling.EditingContext.EditingContext object at 0x26bb9d0> >=20 Oh well, I guess the documentation lacks an important paragraph here. The ZECS is designed to work in a MT environment, not in different instances. That's why you get this, hopefully you noticed it. The fact is that, you cannot share EC between different processes (so this is not specific to zeo itself). To do such a thing, it would be necessary to store the EC in the session along with its pending insertions/deletions, and the whole graph of objects as well since pending modifications can exist in-memory. It is not possible in the current implementation, and there is no plan for making this available (for example, in the zope/zeo case, this means that every single object and their attributes should be made zodb-Persistent so that they can be stored in a session object). In fact, Zope/zeo & zodb address the same problem by opening and closing a transaction changes at the beginning/end of each request loop. If you need to hold back changes between two or three requests/pages, you won't change the real object in the "main" zodb, rather you'll store the changes in a session object. - If every changes made in a request loop is committed/rolled back at the end of the request, then you'll made changes directly in the object. You can do the same w/ ZECS: this is why it has an option binding EC-transactions to zope transactions, cf. http://modeling.sf.net/UserGuide/framework-integration-zope-options.html - on the other hand, if the modifications of, say, a given objet should be made accross different requests/pages before being permanently stored in a db (either zodb, or rdbms), you'll just make it the usual way; e.g. storing the changes in a session-object, then in the last page, committing the changes into the object and the DB. -> This is because you have different python instances (processes) that you lose the ability to have persisting changes accross requests in the objects handled by an EC. Now of course, if you can make sure that a given session is always served by the same zeoclient, then you'll get back the "full power" of having a session-EC, with pending (uncommitted) changes crossing the page requests. But I do not know if this is possible w/ zope/zeo. I hope I managed to be clear in my explanations. And I'll add a paragraph making this explicit in the documentation. -- S=E9bastien. > Thanks, > Paul >=20 > On 3-Mar-06, at 18:28 , S=E9bastien Bigaret wrote: >=20 >> Thanks for all the precisions; this is definitely a situation that >> should be detected and handled by the product. >> >> I've opened ticket #1442766 for that. >> http://sourceforge.net/tracker/index.php?func=3Ddetail&aid=3D1442766&g= roup_id=3D58935&atid=3D489335 >> >> >> If you have some time, could you try the attached patch (replacing the >> one sent earlier) ? >> >> I've had some tests and more zLog statements: I've no zeo env. at >> hand, I have no time for trying to set up one and I do not have any >> real experience w/ zeo environments, so if you could install this >> patch and report the observed logs for the second zeoclient, that will >> be a great help for me to fully understand how zeo works. In >> particular, I'd like to determine whether TransientObject is also >> shared and correctly setup or not --I think it is not, and, well, we'd >> better be sure! or the second, 3rd etc. zeo instances won't have any >> SESSION.defaultEditiingContext. >> >> -- S=E9bastien. >> >> >> PS: LOG statements at the INFO level for the purpose of verifications >> --they should be DEBUG or BLATHER when committed. >=20 >=20 >=20 > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting lang= uage > that extends applications into web and mobile media. Attend the live > webcast > and join the prime developer group breaking into this new coding territ= ory! > http://sel.as-us.falkag.net/sel?cmd=3Dk&kid=110944&bid$1720&dat=121642 > _______________________________________________ > Modeling-users mailing list > Mod...@li... > https://lists.sourceforge.net/lists/listinfo/modeling-users >=20 >=20 |