<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
    #email-body { min-width: 30em !important; }
    #email-page { padding: 8px !important; }
    #email-banner { padding: 8px 8px 0 8px !important; }
    #email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
    #email-fields { padding: 0 8px 8px 8px !important; }
    #email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
    <tr valign="top">
        <td id="email-page" style="padding:16px !important;">
            <table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
                <tr valign="top">
                    <td bgcolor="#3e4c4e" style="background-color:#3e4c4e;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://www.jboss.org/dms/hibernate/images/jira/jiraheader_hibernate.png" alt="" style="vertical-align:top;" /></td>
                </tr><tr valign="top">
    <td id="email-banner" style="padding:32px 32px 0 32px;">

                
                    <table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
                                        <img id="email-avatar" src="https://secure.gravatar.com/avatar/df12d7792bd3b7be3a4edf12cabd58cb?d=mm&s=48" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
                        <div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
                                    <a class="user-hover" rel="steve" id="email_steve" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=steve" style="color:#6c797f;">Steve Ebersole</a>
     commented on <img src="https://hibernate.atlassian.net/images/icons/issuetypes/task_agile.png" height="16" width="16" border="0" align="absmiddle" alt="Technical task"> <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.atlassian.net/browse/HHH-8354'>HHH-8354</a>
            </div>
                        <div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
                <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.atlassian.net/browse/HHH-8354'><strong>New dirty-checking options based on bytecode enhancement</strong></a>
            </div>
                    </td>
    </tr>
</table>
    </td>
</tr>
<tr valign="top">
    <td id="email-fields" style="padding:0 32px 32px 32px;">
        <table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
            <tr valign="top">
                <td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
                <td>
                    <table border="0" cellpadding="0" cellspacing="0" width="100%">
                        <tr valign="top">
    <td colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
        <div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;"><p>The call needs to stem from the "field writer method" generated in <tt>org.hibernate.bytecode.enhance.spi.Enhancer#generateFieldWriter</tt>.  I can see 2 ways...</p>

<p>The first approach would be to directly append bytecode instructions into the "field writer method" <tt>CtMethod</tt> block.  On the one hand, this would be fast.  Each "interested party" would need to append its own bytecode instructions into the the "field writer method" <tt>CtMethod</tt> block.</p>

<p>The second approach would be to use some form of notification bus with listeners.  The generated getter and setter methods would send notification that they were called through this bus and listeners could react to that.  Here, for example, the listener would essentially be the code you have now to track the field names that have changed.  The downside is that this would require multiple method calls, perhaps a list (to hold the listeners), etc.</p>

<p>All-in-all, I think I'd opt for the first approach.  It just seems like that will perform better.  But stylistically I like the second approach, so I could be convinced on going that way <img class="emoticon" src="https://hibernate.atlassian.net/images/icons/emoticons/smile.gif" height="20" width="20" align="absmiddle" alt="" border="0"/></p>

<hr />

<p>Also, I wonder if we ought to develop an interface to represent this dirty-checking.  The reason being is that we could then allow the user to directly implement the interfaces without the need for bytecode manipulation.  We do this for the <tt>EntityEntryContext</tt> stuff (<a href="https://hibernate.atlassian.net/browse/HHH-7667" title="Initial improved bytecode enhancement support" class="issue-link" data-issue-key="HHH-7667"><del>HHH-7667</del></a>).  </p>

<p>If we did add such an interface, it would also need to be added to the enhanced <tt>CtClass</tt> definition.  That would need to happen in <tt>org.hibernate.bytecode.enhance.spi.Enhancer#addInLineDirtyHandling</tt>.  The methods it adds would be the impls of that interface.</p>

<p>This is similar to the <tt>org.hibernate.CustomEntityDirtinessStrategy</tt> feature (mentioned in my referenced blog entry), but would be an integral part of the domain model either added by the user directly (implementing the dirty-check interface) or added by us via enhancement.</p></div>
        <div style="color:#505050;padding:4px 0 0 0;">                </div>
    </td>
</tr>
                    </table>
                </td>
            </tr>
        </table>
    </td>
</tr>













            </table>
        </td><!-- End #email-page -->
    </tr>
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
            This message is automatically generated by JIRA.<br />
            If you think it was sent incorrectly, please contact your JIRA administrators<br />
            For more information on JIRA, see: <a style='color:#6c797f;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
        </td>
    </tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->