<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://hibernate.onjira.com/secure/useravatar?ownerId=sanne&avatarId=11144" 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="sanne" id="email_sanne" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=sanne" style="color:#6c797f;">Sanne Grinovero</a>
updated <img src="https://hibernate.onjira.com/images/icons/ico_epic.png" height="16" width="16" border="0" align="absmiddle" alt="Epic"> <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HHH-8000'>HHH-8000</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.onjira.com/browse/HHH-8000'><strong>Apply bytecode introspection to provide an execution context to the query planning engine</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 style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Change By:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a class="user-hover" rel="sanne" id="email_sanne" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=sanne" style="color:#6c797f;">Sanne Grinovero</a>
(13/Feb/13 5:19 PM)
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Description:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<span class="diffcontext">Using the same tricks of annotation processors as we applied for Infinispan as proof of concept (project Jokre), we can dynamically replace the invocation of - for example - createQuery() with a trap method which is going to trigger an inspection of the bytecode of the invoker.<br><br>The inspection will result in two different actions:<br>* replace the trap method with one which is a different method (normally not public), so this feature doesn't have any overhead as the replacement basically removed the inspection trigger.<br>* the newly invoked method will pass on some more information about the execution context of the requested query.<br><br>The upcoming query engine will have a "planning" component; this will be simple initially but will need to have basic logic to pick among different execution options; it seems natural to assume that this planning component will evolve over time to implement smarter techniques, possibly borrowing from the Teiid project.<br><br>I'm not an</span>
<span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"> example</span>
<span class="diffaddedchars" style="background-color:#ddfade;"> expert</span>
<span class="diffcontext"> of bytecode analysis but having talked to some, it seems it would be easy to implement for example escape analysis and make decisions in the query about the actual need of the invoker; for example if the query is loading User entities we might automatically infer that the client code is actually only interested in the User's birth dates, or that a different fetch strategy would be desirable to pre-load some relations.<br></span>
<span class="diffaddedchars" style="background-color:#ddfade;">Another example is unused relations: today we create proxies so that in case the relation is "walked" by the user code appropriate loading is triggered; it would be possible to proof that in some cases we don't need any proxy and a null would be good enough.</span>
<span class="diffcontext"><br></span>
<span class="diffaddedchars" style="background-color:#ddfade;"><br></span>
<span class="diffcontext">Initial optimizations could be simple</span>
<span class="diffaddedchars" style="background-color:#ddfade;">: overhead is zero so one could just implement a couple of simple tricks</span>
<span class="diffcontext">, and</span>
<span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"> we can gradually iterate on this to make it smarter</span>
<span class="diffaddedchars" style="background-color:#ddfade;"> let the concept evolve with gradual iterations</span>
<span class="diffcontext">.<br>The simplest optimization would be to simply identify which use case (method) is invoking the query, and read some external resource which lists fetch plans on a per-usecase base; such a resource could be easily generated by a profiling tool and help with performance tuning operations: today the same tuning is possible but requires several iterations between code changes and re-deploys, restarting stress tests on a very time consuming process.<br><br>In a longer term vision, the internal method could become smart enough to not just pick an appropriate static plan but also collect runtime information and implement ergonomic decisions. Besides fetch plans, this could be picking caching strategies, transactional isolation levels,</span>
<span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"> optimistic vs pessimistic locks</span>
<span class="diffaddedchars" style="background-color:#ddfade;"> different lock levels (lock removal?)</span>
<span class="diffcontext">, appropriate batch sizes, maybe even generation of</span>
<span class="diffremovedchars" style="background-color:#ffe7e7;text-decoration:line-through;"> prepares</span>
<span class="diffaddedchars" style="background-color:#ddfade;"> prepared</span>
<span class="diffcontext"> statements.<br><br>Proof of concept and low level explanation:<br>https://github.com/infinispan/jokre</span>
</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 -->