On 18/03/2010, at 12:36 PM, Adam Heath wrote:

> Scott Gray wrote:
>> On 18/03/2010, at 11:48 AM, Adam Heath wrote:
>> 
>>> Scott Gray wrote:
>>>> On 18/03/2010, at 11:04 AM, Adam Heath wrote:
>>>> 
>>>>> Scott Gray wrote:
>>>>>> On 18/03/2010, at 10:50 AM, Adam Heath wrote:
>>>>>> 
>>>>>>> Jacopo Cappellato wrote:
>>>>>>>> Adam,
>>>>>>>> 
>>>>>>>> this is going to be a long thread and I don't want it to be.
>>>>>>>> I already tried to explain why I decided to change the primary key of 
>>>>>>>> OrderShipment without following the deprecation mechanism (that I 
>>>>>>>> think it is a very good best practice) in this specific situation.
>>>>>>>> I perfectly know when and how the shipment plans (i.e. the feature for 
>>>>>>>> which the OrderShipment entity was introduced) were implemented: I 
>>>>>>>> know because I contributed it (and the OrderShipment entity of course).
>>>>>>>> I also know that it was only partially implemented and so I would be 
>>>>>>>> very surprised (especially because no one over the years ever asked or 
>>>>>>>> reported bugs etc.. about it - apart from me that was aware of its 
>>>>>>>> existence) if it is really used in production by someone. This is 
>>>>>>>> simply to explain that I was not irresponsible when I did it.
>>>>>>>> 
>>>>>>>> However you are right if you say that I can't be completely sure if 
>>>>>>>> someone somewhere is using the entity. Also, lately the community 
>>>>>>>> seems to be more inclined to transform "best practices" (to be applied 
>>>>>>>> "cum granu salis") into "policies" to be applied blindly.
>>>>>>>> In some way this is good because it requires less skills and 
>>>>>>>> creativity (but more pragmatism) and also less skilled persons can 
>>>>>>>> become good reviewers just by following written rules.
>>>>>>>> This is probably less interesting but maybe necessary given the grow 
>>>>>>>> of the community.
>>>>>>>> 
>>>>>>>> So ok, I am convinced now, we have to deprecate that entity etc.
>>>>>>>> 
>>>>>>>> What does your book of policies says about this: is it something I 
>>>>>>>> *have* to do as a punishment for this bad commit or will you take care 
>>>>>>>> of it?
>>>>>>> If I implied that it had to be you to do it, I apoligize.  I didn't
>>>>>>> mean it to sound that way.
>>>>>>> 
>>>>>>> I was trying to discuss with you about the reasons behind this change,
>>>>>>> so that we could all agree as to what the reasons and use cases were.
>>>>>>> 
>>>>>>> Now that it seems we are on the same page, we can go about fixing this
>>>>>>> as a team.  I'll admit, however, that I have never gone thru an entity
>>>>>>> deprecation exercise.  And OrderShipment is a very low-level entity,
>>>>>>> that has tons of references, so doing this right could be very
>>>>>>> complex.  The reason why I was so heated was that I understood this
>>>>>>> would be a lot of work, and I was trying to see if there is a better
>>>>>>> way than changing the primary key.
>>>>>>> 
>>>>>>> The reason the original committer is generally the best one to fix
>>>>>>> their original commit, is because that original committer knows the
>>>>>>> most about what they were trying to do.  That original person knows
>>>>>>> their own code they wrote, and probably has an understand of the rest
>>>>>>> of the files that they were modifying.
>>>>>>> 
>>>>>>> However, due to the scope of this deprecation, we need the rest of the
>>>>>>> community to help out.  Unless we decide to revert this primary key
>>>>>>> change, and due this a different way.
>>>>>>> 
>>>>>>>> PS: BTW, if no one will implement the deprecation pattern in the next 
>>>>>>>> few days I will do that, no problem.
>>>>>>> There's no big hurry.  My previously mentioned importer already had
>>>>>>> the shipGroupSeqId available(it was hard-coded to 00001, as it's
>>>>>>> somewhat simple), so it wasn't a big change for me personally.
>>>>>> I'm yet to form an opinion on whether the approach Jacopo took was a 
>>>>>> valid one,  I've been looking at the code and I don't yet understand 
>>>>>> what problems this change may have caused for downstream users.
>>>>>> Adam, would you mind explaining in more detail how the change has 
>>>>>> effected you negatively?
>>>>> A new field was added to the OrderShipment entity, and that field was
>>>>> made a primary key.
>>>>> 
>>>>> My importer, which started from an empty database, thru an error,
>>>>> because this field was not set, and null is not allowed.  As I said,
>>>>> the fix for me was simple, as this particular job hasn't gone live
>>>>> yet, so I don't have to worry so much about migration.
>>>> I would argue that in this case the early failure was a good thing.  If 
>>>> the deprecation pattern had been followed it's possible you wouldn't have 
>>>> noticed until much later and then would have had to deal with updating 
>>>> your importer as well as migrating the data from the old table to the new.
>>> You don't understand how deprecation works.
>> 
>> That is a strong statement but the teacher has spoken, I shall go and face 
>> the corner now.
>> 
>>> The entity is renamed.  So there would still be the failure in my
>>> importer, as it tried to update an entity that doesn't exist.
>> 
>> I assumed your importer was acting on the database directly, my bad.
>> 
>>> Additionally, if someone upgrading their data does an xml dump, the
>>> old data will be dumped with the entity named OrderShipment.  After
>>> installing the newer ofbiz, that identiy will also not exist, so the
>>> xml import will fail as well, when it can't find the OrderShipment
>>> entity(which was renamed to OldOrderShipment).
>> 
>> 
>> Since I don't understand how deprecation works I guess I'm also failing to 
>> understand how what you describe would be better than what would happen 
>> right now.
>> 
>> Once again, I'm not against the deprecation pattern, I'm just struggling to 
>> see how it would have resulted in something better for the downstream user 
>> (but because I don't understand how deprecation works this probably requires 
>> more explaining that it would for someone who is more enlightened).
> 
> Read this:
> http://cwiki.apache.org/confluence/display/OFBTECH/General+Entity+Overview
> 
> the part about deprecated entities.
> 
> Before deprecation:
> 
> <OrderShipment />, has a table named "order_shipment" in the database.
> 
> After deprecation:
> 
> <OldOrderShipment tableName="order_shipment"/>
> <OrderShip/>
> <service name="convertOldOrderShipmentToOrderShip"/>
> <!-- all other places that reference/deal with OrderShipment are
> changed to deal with OrderShip -->
> 
> 
> During upgrade, the new OrderShip entity will have a table created in
> the database, called "order_ship".  This table will be empty at this
> point.
> 
> The existing tables will not be changed at all.  This is because the
> OldOrderShipment entity is mapped to the "order_shipment".  Any other
> tables that also still exist and reference "order_shipment" in the
> database will continue to function correctly.
> 
> 
> Actually, I just noticed a problem with the deprecation policy.  Any
> existing entities that currently reference OrderShipment, by way of
> <relation>, can't have those relations dropped.  Those should be
> changed to "OldFooRelation", and the fk-name set appropriately, so
> that the referential links in the database will be kept and not destroyed.

I am aware of the document and understand the concepts put forward.

What I am asking you is, how in this case would following the deprecation 
policy have resulted in a better downstream user experience?

My current understanding was that Jacopo chose the approach he did because it 
was a simpler one and resulted in a cleaner data model (i.e. no Old* entity 
left lying around until the end of time).  What I don't understand is how 
downstream users will suffer extra pain because the deprecation guideline 
wasn't followed in this case.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to