You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/03/02 22:05:06 UTC
svn commit: r749435 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
openjpa-pro...
Author: ppoddar
Date: Mon Mar 2 21:05:05 2009
New Revision: 749435
URL: http://svn.apache.org/viewvc?rev=749435&view=rev
Log:
OPENJPA-704: Make extended path lookup optional to save runtime costs for predominant use cases.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestDynamicFetchPlan.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlanImpl.java
openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_pc.xml
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java Mon Mar 2 21:05:05 2009
@@ -217,6 +217,24 @@
throw translate(re);
}
}
+
+ public boolean getExtendedPathLookup() {
+ try {
+ return _fetch.getExtendedPathLookup();
+ } catch (RuntimeException re) {
+ throw translate(re);
+ }
+ }
+
+ public FetchConfiguration setExtendedPathLookup(boolean flag) {
+ try {
+ _fetch.setExtendedPathLookup(flag);
+ return this;
+ } catch (RuntimeException re) {
+ throw translate(re);
+ }
+ }
+
public Set getFetchGroups() {
try {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java Mon Mar 2 21:05:05 2009
@@ -148,6 +148,20 @@
* The query automatic flush configuration.
*/
public FetchConfiguration setFlushBeforeQueries(int flush);
+
+ /**
+ * Affirms if extended path lookup feature is active.
+ *
+ * @since 2.0.0
+ */
+ public boolean getExtendedPathLookup();
+
+ /**
+ * Sets extended path lookup feature.
+ *
+ * @since 2.0.0
+ */
+ public FetchConfiguration setExtendedPathLookup(boolean flag);
/**
* Returns immutable set of names of the fetch groups that this component
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java Mon Mar 2 21:05:05 2009
@@ -85,6 +85,7 @@
public Map hints = null;
public boolean fetchGroupContainsDefault = false;
public boolean fetchGroupContainsAll = false;
+ public boolean extendedPathLookup = false;
}
private final ConfigurationState _state;
@@ -156,6 +157,7 @@
setMaxFetchDepth(fetch.getMaxFetchDepth());
setQueryCacheEnabled(fetch.getQueryCacheEnabled());
setFlushBeforeQueries(fetch.getFlushBeforeQueries());
+ setExtendedPathLookup(fetch.getExtendedPathLookup());
setLockTimeout(fetch.getLockTimeout());
clearFetchGroups();
addFetchGroups(fetch.getFetchGroups());
@@ -222,6 +224,15 @@
public int getFlushBeforeQueries() {
return _state.flushQuery;
}
+
+ public boolean getExtendedPathLookup() {
+ return _state.extendedPathLookup;
+ }
+
+ public FetchConfiguration setExtendedPathLookup(boolean flag) {
+ _state.extendedPathLookup = flag;
+ return this;
+ }
public FetchConfiguration setFlushBeforeQueries(int flush) {
if (flush == DEFAULT && _state.ctx != null)
@@ -613,11 +624,10 @@
* Whether our configuration state includes the given field.
*/
private boolean includes(FieldMetaData fmd) {
- if (hasFetchGroupAll()
- || (hasFetchGroupDefault() && fmd.isInDefaultFetchGroup())
+ if ((hasFetchGroupDefault() && fmd.isInDefaultFetchGroup())
+ || hasFetchGroupAll()
|| hasField(fmd.getFullName(false))
- || hasField(fmd.getRealName())
- || (_fromField != null && hasField(_fromField + "." + fmd.getName())))
+ || hasExtendedLookupPath(fmd))
return true;
String[] fgs = fmd.getCustomFetchGroups();
for (int i = 0; i < fgs.length; i++)
@@ -625,6 +635,13 @@
return true;
return false;
}
+
+ private boolean hasExtendedLookupPath(FieldMetaData fmd) {
+ return getExtendedPathLookup()
+ && (hasField(fmd.getRealName())
+ || (_fromField != null
+ && hasField(_fromField + "." + fmd.getName())));
+ }
/**
* Return the available recursion depth via the given field for the
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestDynamicFetchPlan.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestDynamicFetchPlan.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestDynamicFetchPlan.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestDynamicFetchPlan.java Mon Mar 2 21:05:05 2009
@@ -59,6 +59,7 @@
public void testFetchBySubClassFieldB() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class, "b");
@@ -76,6 +77,7 @@
public void testFetchBySubClassFieldA() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class, "b");
@@ -93,6 +95,7 @@
public void testFetchBySuperClassField() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class, "b");
@@ -110,6 +113,7 @@
public void testFetchBySubClassFieldNameB() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class.getName() + ".b");
@@ -127,6 +131,7 @@
public void testFetchBySubClassFieldNameA() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class.getName() + ".b");
@@ -144,6 +149,7 @@
public void testFetchBySuperClassFieldName() {
OpenJPAEntityManager em = emf.createEntityManager();
FetchPlan fp = em.getFetchPlan();
+ fp.setExtendedPathLookup(true);
fp.clearFetchGroups();
fp.clearFields();
fp.addField(FetchA.class.getName() + ".b");
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java Mon Mar 2 21:05:05 2009
@@ -298,4 +298,19 @@
*/
@Reflectable(false)
public org.apache.openjpa.kernel.FetchConfiguration getDelegate();
+
+ /**
+ * Affirms if extended path lookup feature is active.
+ *
+ * @since 2.0.0
+ */
+ public boolean getExtendedPathLookup();
+
+ /**
+ * Sets extended path lookup feature.
+ *
+ * @since 2.0.0
+ */
+ public FetchPlan setExtendedPathLookup(boolean flag);
+
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlanImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlanImpl.java?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlanImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlanImpl.java Mon Mar 2 21:05:05 2009
@@ -249,6 +249,15 @@
_fetch.setWriteLockLevel(EntityManagerImpl.toLockLevel(mode));
return this;
}
+
+ public boolean getExtendedPathLookup() {
+ return _fetch.getExtendedPathLookup();
+ }
+
+ public FetchPlan setExtendedPathLookup(boolean flag) {
+ _fetch.setExtendedPathLookup(flag);
+ return this;
+ }
public int hashCode() {
return _fetch.hashCode();
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_pc.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_pc.xml?rev=749435&r1=749434&r2=749435&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_pc.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_pc.xml Mon Mar 2 21:05:05 2009
@@ -2149,14 +2149,25 @@
field-masking algorithms, which would allow the latter method behavior if
<literal>Magazine</literal> did not also define a field called <literal>
publisher</literal>.
- </para>
+ </para>
+
+ <para>
+ <title>Extended Path Lookup</title>
+To include the fields defined in a super class by the subclass or to distinguish
+between fields that are defined in <emphasis>both</emphasis> super- and subclass,
+set <literal>setExtendedPathLookup(boolean)</literal> on <literal>FetchPlan
+</literal> to <literal>true</literal>. By default, this option is set to
+<literal>false</literal>, to reduce more extensive lookups for predominant use
+cases.
+ </para>
+
<para>
In order to avoid the cost of reflection, OpenJPA does not perform any
validation of the field name / class name pairs that you put into the fetch
configuration. If you specify non-existent class / field pairs, nothing adverse
will happen, but you will receive no notification of the fact that the specified
configuration is not being used.
- </para>
+ </para>
<example id="ref_guide_fetch-conf_per_field">
<title>
Adding an Eager Field
@@ -2192,8 +2203,12 @@
joined into the select, OpenJPA avoids the extra join just to select the foreign
key values.
</para>
- </listitem>
- </itemizedlist>
+ </listitem>
+
+
+ </itemizedlist>
+
+
</section>
</section>
<section id="ref_guide_perfpack_eager">