Le 09-05-26 à 13:20, Chuck Hill a écrit :


On May 26, 2009, at 10:13 AM, Jean-Francois Veillette wrote:
Le 09-05-26 à 12:27, Chuck Hill a écrit :
Have you gotten any further on this?

No, I'm stuck, tried to trace in the debuger, but without the source it's hard to trace. jadclipse can help but I have to manually follow what is going on. At some point, it get the info from the bd in a dictionary, and ask for the eo from the cache (something like that, it was late yesterday), find it but somehow do not update it from the fetched values. It's hard to trace without the real source, but it sounded like I had something wrong in the model, something that tell eof to not update the values.

I am somewhat familiar with that part of EOF. Which version of WO are you using? WO 5.4 before 5.4.3 had bugs in this area making it function incorrectly in some cases.

WO 5.3.3

Are you using a database context delegate?

Not explicitely (maybe wonder does)


I'm not using ERXEC explicitely. If I do, it's all wonder's fault. I'll check and try to make a full blown integration with ERXEC.

If you are not using ERXEC, how are you locking the editing contexts?

wo does it because this simple case is with session.defaultEditingContext().

The only thing that stands out is that when a fetch happens, there are two identical selects "FROM CERT_FACTURE t0 WHERE t0.FK_DOSSIER = ?" withBindings: 1:12(fkDossier)". So I am wondering if you have an inheritance problem.

Yes, It is strange indeed, I first thought a simple problem with the output (like double logging), but it might be something else.

I think it is something other than double logging. Can you check the database log to verify?

I'll check,

- jfv

note: I tried to isolate and debug the things, I've added some code just before my first fetch of the relationship.
this is inside a 'Dossier' object here:

        EOEditingContext ec = editingContext();
ec.lock(); // just to make sure it wasn't lacking, but same result with and without
        try {
                System.out.println("EOEditingContext:"+ ec);
System.out.println("\nFactures [" + factures().count() + "]:: " + factures());
                editingContext().invalidateAllObjects();
                System.out.println("\ninvalidated all objects");
System.out.println("\nFactures [" + factures().count() + "]:: " + factures());
        } finally {
                ec.unlock();
        }

here is the output :

EOEditingContext:com.webobjects.eocontrol.eoeditingcont...@b800
[2009-05-25 14:27:37 EDT] <WorkerThread0> === Begin Internal Transaction [2009-05-25 14:27:37 EDT] <WorkerThread0> evaluateExpression: <com.webobjects.jdbcadaptor.MicrosoftSQLServerPlugIn $MicrosoftSQLServerExpression: "SELECT t0.AJUSTEMENT, t0.ARCHIVE, t0.COMMENTAIRE, t0.CONFIRMATION_CHEQUE_REMBOURSEMENT, t0.CREDIT_APPLIQUE, t0.CREDIT_RESTANT, t0.CREDIT_UTILISE, t0.DATE_ARCHIVE, t0.DATE_CONFIRMATION_FACTURE, t0.DATE_CREATION, t0.DATE_DERNIER_PAIEMENT, t0.DATE_ECHEANCE, t0.DATE_EFFECTIVE, t0.DATE_IMPRESSION, t0.DESCRIPTION_REJET_SYS_COMP, t0.EST_CONFIRME, t0.EST_FACTURE_AJUSTEMENT_MENSUEL, t0.EST_FACTURE_AJUSTEMENT_PERIODE_TRANSITION, t0.EST_FACTURE_AJUSTEMENT_RENOUVELLEMENT, t0.EST_FACTURE_ANTICIPE, t0.EST_FACTURE_DE_TRANSITION, t0.EST_FACTURE_INTERET, t0.EST_FACTURE_RENOUVELLEMENT, t0.EST_SUPPRIMER, t0.EST_TRANSMIS_SYS_COMP, t0.FK_AVIS_RETARD, t0.FK_DOSSIER, t0.FK_ETABLISSEMENT, t0.FK_ETAT_FACTURE, t0.FK_GRILLE_TARIFAIRE, t0.FK_LOT_FACTURES, t0.FK_PREPOSE, t0.FK_RAPPORT_COMPTABLE, t0.FK_REPRESENTANT, t0.FK_COURTIER, t0.FK_VERSION_DOCUMENT, t0.ID, t0.MONTANT_TAXE_ASSURANCE, t0.MONTANT_TAXE_TPS, t0.MONTANT_TAXE_TVQ, t0.NBR_AGENTS_FACTURE, t0.NBR_IMPRESSIONS, t0.NUMERO_FACTURE, t0.SOLDE, t0.SOURCE_FACTURE, t0.SOUS_TOTAL, t0.TOTAL FROM CERT_FACTURE t0 WHERE t0.FK_DOSSIER = ?" withBindings: 1:12(fkDossier)>
[2009-05-25 14:27:37 EDT] <WorkerThread0> 5 row(s) processed
[2009-05-25 14:27:37 EDT] <WorkerThread0> === Commit Internal Transaction [2009-05-25 14:27:37 EDT] <WorkerThread0> === Begin Internal Transaction [2009-05-25 14:27:37 EDT] <WorkerThread0> evaluateExpression: <com.webobjects.jdbcadaptor.MicrosoftSQLServerPlugIn $MicrosoftSQLServerExpression: "SELECT t0.AJUSTEMENT, t0.ARCHIVE, t0.COMMENTAIRE, t0.CONFIRMATION_CHEQUE_REMBOURSEMENT, t0.CREDIT_APPLIQUE, t0.CREDIT_RESTANT, t0.CREDIT_UTILISE, t0.DATE_ARCHIVE, t0.DATE_CONFIRMATION_FACTURE, t0.DATE_CREATION, t0.DATE_DERNIER_PAIEMENT, t0.DATE_ECHEANCE, t0.DATE_EFFECTIVE, t0.DATE_IMPRESSION, t0.DESCRIPTION_REJET_SYS_COMP, t0.EST_CONFIRME, t0.EST_FACTURE_AJUSTEMENT_MENSUEL, t0.EST_FACTURE_AJUSTEMENT_PERIODE_TRANSITION, t0.EST_FACTURE_AJUSTEMENT_RENOUVELLEMENT, t0.EST_FACTURE_ANTICIPE, t0.EST_FACTURE_DE_TRANSITION, t0.EST_FACTURE_INTERET, t0.EST_FACTURE_RENOUVELLEMENT, t0.EST_SUPPRIMER, t0.EST_TRANSMIS_SYS_COMP, t0.FK_AVIS_RETARD, t0.FK_DOSSIER, t0.FK_ETABLISSEMENT, t0.FK_ETAT_FACTURE, t0.FK_GRILLE_TARIFAIRE, t0.FK_LOT_FACTURES, t0.FK_PREPOSE, t0.FK_RAPPORT_COMPTABLE, t0.FK_REPRESENTANT, t0.FK_COURTIER, t0.FK_VERSION_DOCUMENT, t0.ID, t0.MONTANT_TAXE_ASSURANCE, t0.MONTANT_TAXE_TPS, t0.MONTANT_TAXE_TVQ, t0.NBR_AGENTS_FACTURE, t0.NBR_IMPRESSIONS, t0.NUMERO_FACTURE, t0.SOLDE, t0.SOURCE_FACTURE, t0.SOUS_TOTAL, t0.TOTAL FROM CERT_FACTURE t0 WHERE t0.FK_DOSSIER = ?" withBindings: 1:12(fkDossier)>
[2009-05-25 14:27:37 EDT] <WorkerThread0> 5 row(s) processed
[2009-05-25 14:27:37 EDT] <WorkerThread0> === Commit Internal Transaction

Factures [5]:: (<Facture ajustement = 0.0000, archive = true, commentaire = null, confirmationChequeRemboursement = false, creditApplique = 0.0000, creditRestant = 0.0000, creditUtilise = 0.0000, dateArchive = null, dateConfirmationFacture = null, dateCreation = 2006-07-21 14:20:34 Etc/GMT, dateDernierPaiement = null, dateEcheance = 2006-07-21 14:20:34 Etc/GMT, dateEffective = 2006-07-21 14:20:34 Etc/GMT, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = false, estFactureAjustementMensuel = false, estFactureAjustementPeriodeTransition = false, estFactureAjustementRenouvellement = false, estFactureAnticipe = false, estFactureDeTransition = true, estFactureInteret = false, estFactureRenouvellement = false, estSupprimer = false, estTransmisAuSystemeComptable = false, fkEtablissement = 300, fkRepresentant = null, fkTitulaire = 5, montantTaxeAssurance = 46.7900, montantTaxeTPS = 0.0000, montantTaxeTVQ = 0.0000, nbrAgentsFacture = 1, nbrImpressions = 0, numeroFacture = 0, solde = 566.6500, sourceFacture = 0, sousTotal = 519.8600, total = 566.6500, <com.farp.farpcertification.facturation.Facture pk:"17"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"18"> / >, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"374"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"376"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"377"> />) [2009-05-25 14:27:37 EDT] <WorkerThread0> === Begin Internal Transaction [2009-05-25 14:27:37 EDT] <WorkerThread0> evaluateExpression: <com.webobjects.jdbcadaptor.MicrosoftSQLServerPlugIn $MicrosoftSQLServerExpression: "SELECT t0.ARCHIVE, t0.COMMENTAIRE, t0.DATE_ARCHIVAGE, t0.DATE_CREATION, t0.DATE_EFFECTIVE, t0.FK_ETABLISSEMENT, t0.FK_ETAT, t0.FK_MEMBRE_DOSSIER, t0.FK_REPRESENTANT, t0.FK_COURTIER, t0.ID, t0.NOTE_DOSSIER, t0.NUMERO_CERTIFICAT, t0.TYPE_COURTIER FROM CERT_DOSSIER t0">
[2009-05-25 14:27:38 EDT] <WorkerThread0> 1998 row(s) processed
[2009-05-25 14:27:38 EDT] <WorkerThread0> === Commit Internal Transaction

invalidated all objects
[2009-05-25 14:27:38 EDT] <WorkerThread0> === Begin Internal Transaction [2009-05-25 14:27:38 EDT] <WorkerThread0> evaluateExpression: <com.webobjects.jdbcadaptor.MicrosoftSQLServerPlugIn $MicrosoftSQLServerExpression: "SELECT t0.AJUSTEMENT, t0.ARCHIVE, t0.COMMENTAIRE, t0.CONFIRMATION_CHEQUE_REMBOURSEMENT, t0.CREDIT_APPLIQUE, t0.CREDIT_RESTANT, t0.CREDIT_UTILISE, t0.DATE_ARCHIVE, t0.DATE_CONFIRMATION_FACTURE, t0.DATE_CREATION, t0.DATE_DERNIER_PAIEMENT, t0.DATE_ECHEANCE, t0.DATE_EFFECTIVE, t0.DATE_IMPRESSION, t0.DESCRIPTION_REJET_SYS_COMP, t0.EST_CONFIRME, t0.EST_FACTURE_AJUSTEMENT_MENSUEL, t0.EST_FACTURE_AJUSTEMENT_PERIODE_TRANSITION, t0.EST_FACTURE_AJUSTEMENT_RENOUVELLEMENT, t0.EST_FACTURE_ANTICIPE, t0.EST_FACTURE_DE_TRANSITION, t0.EST_FACTURE_INTERET, t0.EST_FACTURE_RENOUVELLEMENT, t0.EST_SUPPRIMER, t0.EST_TRANSMIS_SYS_COMP, t0.FK_AVIS_RETARD, t0.FK_DOSSIER, t0.FK_ETABLISSEMENT, t0.FK_ETAT_FACTURE, t0.FK_GRILLE_TARIFAIRE, t0.FK_LOT_FACTURES, t0.FK_PREPOSE, t0.FK_RAPPORT_COMPTABLE, t0.FK_REPRESENTANT, t0.FK_COURTIER, t0.FK_VERSION_DOCUMENT, t0.ID, t0.MONTANT_TAXE_ASSURANCE, t0.MONTANT_TAXE_TPS, t0.MONTANT_TAXE_TVQ, t0.NBR_AGENTS_FACTURE, t0.NBR_IMPRESSIONS, t0.NUMERO_FACTURE, t0.SOLDE, t0.SOURCE_FACTURE, t0.SOUS_TOTAL, t0.TOTAL FROM CERT_FACTURE t0 WHERE t0.FK_DOSSIER = ?" withBindings: 1:12(fkDossier)>
[2009-05-25 14:27:38 EDT] <WorkerThread0> 5 row(s) processed
[2009-05-25 14:27:38 EDT] <WorkerThread0> === Commit Internal Transaction [2009-05-25 14:27:38 EDT] <WorkerThread0> === Begin Internal Transaction [2009-05-25 14:27:38 EDT] <WorkerThread0> evaluateExpression: <com.webobjects.jdbcadaptor.MicrosoftSQLServerPlugIn $MicrosoftSQLServerExpression: "SELECT t0.AJUSTEMENT, t0.ARCHIVE, t0.COMMENTAIRE, t0.CONFIRMATION_CHEQUE_REMBOURSEMENT, t0.CREDIT_APPLIQUE, t0.CREDIT_RESTANT, t0.CREDIT_UTILISE, t0.DATE_ARCHIVE, t0.DATE_CONFIRMATION_FACTURE, t0.DATE_CREATION, t0.DATE_DERNIER_PAIEMENT, t0.DATE_ECHEANCE, t0.DATE_EFFECTIVE, t0.DATE_IMPRESSION, t0.DESCRIPTION_REJET_SYS_COMP, t0.EST_CONFIRME, t0.EST_FACTURE_AJUSTEMENT_MENSUEL, t0.EST_FACTURE_AJUSTEMENT_PERIODE_TRANSITION, t0.EST_FACTURE_AJUSTEMENT_RENOUVELLEMENT, t0.EST_FACTURE_ANTICIPE, t0.EST_FACTURE_DE_TRANSITION, t0.EST_FACTURE_INTERET, t0.EST_FACTURE_RENOUVELLEMENT, t0.EST_SUPPRIMER, t0.EST_TRANSMIS_SYS_COMP, t0.FK_AVIS_RETARD, t0.FK_DOSSIER, t0.FK_ETABLISSEMENT, t0.FK_ETAT_FACTURE, t0.FK_GRILLE_TARIFAIRE, t0.FK_LOT_FACTURES, t0.FK_PREPOSE, t0.FK_RAPPORT_COMPTABLE, t0.FK_REPRESENTANT, t0.FK_COURTIER, t0.FK_VERSION_DOCUMENT, t0.ID, t0.MONTANT_TAXE_ASSURANCE, t0.MONTANT_TAXE_TPS, t0.MONTANT_TAXE_TVQ, t0.NBR_AGENTS_FACTURE, t0.NBR_IMPRESSIONS, t0.NUMERO_FACTURE, t0.SOLDE, t0.SOURCE_FACTURE, t0.SOUS_TOTAL, t0.TOTAL FROM CERT_FACTURE t0 WHERE t0.FK_DOSSIER = ?" withBindings: 1:12(fkDossier)>
[2009-05-25 14:27:38 EDT] <WorkerThread0> 5 row(s) processed
[2009-05-25 14:27:38 EDT] <WorkerThread0> === Commit Internal Transaction

Factures [5]:: (<Facture ajustement = 0.0000, archive = true, commentaire = null, confirmationChequeRemboursement = false, creditApplique = 0.0000, creditRestant = 0.0000, creditUtilise = 0.0000, dateArchive = null, dateConfirmationFacture = null, dateCreation = 2006-07-21 14:20:34 Etc/GMT, dateDernierPaiement = null, dateEcheance = 2006-07-21 14:20:34 Etc/GMT, dateEffective = 2006-07-21 14:20:34 Etc/GMT, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = false, estFactureAjustementMensuel = false, estFactureAjustementPeriodeTransition = false, estFactureAjustementRenouvellement = false, estFactureAnticipe = false, estFactureDeTransition = true, estFactureInteret = false, estFactureRenouvellement = false, estSupprimer = false, estTransmisAuSystemeComptable = false, fkEtablissement = 300, fkRepresentant = null, fkTitulaire = 5, montantTaxeAssurance = 46.7900, montantTaxeTPS = 0.0000, montantTaxeTVQ = 0.0000, nbrAgentsFacture = 1, nbrImpressions = 0, numeroFacture = 0, solde = 566.6500, sourceFacture = 0, sousTotal = 519.8600, total = 566.6500, <com.farp.farpcertification.facturation.Facture pk:"17"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"18"> / >, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"374"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"376"> />, <Facture ajustement = null, archive = null, commentaire = null, confirmationChequeRemboursement = null, creditApplique = null, creditRestant = null, creditUtilise = null, dateArchive = null, dateConfirmationFacture = null, dateCreation = null, dateDernierPaiement = null, dateEcheance = null, dateEffective = null, dateImpression = null, descriptionRejetSystemeComptable = null, estConfirme = null, estFactureAjustementMensuel = null, estFactureAjustementPeriodeTransition = null, estFactureAjustementRenouvellement = null, estFactureAnticipe = null, estFactureDeTransition = null, estFactureInteret = null, estFactureRenouvellement = null, estSupprimer = null, estTransmisAuSystemeComptable = null, fkEtablissement = null, fkRepresentant = null, fkTitulaire = null, montantTaxeAssurance = null, montantTaxeTPS = null, montantTaxeTVQ = null, nbrAgentsFacture = null, nbrImpressions = null, numeroFacture = null, solde = null, sourceFacture = null, sousTotal = null, total = null, <com.farp.farpcertification.facturation.Facture pk:"377"> />)


--
Chuck Hill             Senior Consultant / VP Development

Come to WOWODC'09 in San Fran this June!
http://www.wocommunity.org/wowodc09/




--
Chuck Hill             Senior Consultant / VP Development

Come to WOWODC'09 in San Fran this June!
http://www.wocommunity.org/wowodc09/


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to